⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dfilter.hpp

📁 Adaptive digital Filters in C++
💻 HPP
字号:
// dfilter.hpp		A Digital Filter base class implementation
//			(note everything is inline so this file IS the source)

//                      (c) Copyright 1995, Everett F. Carter Jr.
//                      Permission is granted by the author to use
//			this software for any application provided this
//			copyright notice is preserved.

// rcsid: @(#)dfilter.hpp	1.6 16:30:38 5/16/95   EFC

#ifndef DIGITAL_FILTER_HPP_
#define DIGITAL_FILTER_HPP_ 1.6

#include <stdlib.h>
#include <iostream.h>

#include <bool.h>

class DigitalFilter
{
	protected:
	   float out_val;
	   long invals;
           int err;
	   bool _output_error;
           virtual float filter(const float) = 0;
           DigitalFilter() : err(-1), invals(0L), out_val(0.0),
				 _output_error(false) {}
        public:
           virtual ~DigitalFilter() {}

	   int operator!()     { return err; }
	   void output_error() { _output_error = true; }
	   void output_value() { _output_error = false; }

	   // get data into the filter
           friend DigitalFilter& operator>>(const float x, DigitalFilter& f);
           friend DigitalFilter& operator<<(DigitalFilter& f, const float x);

           friend istream& operator>>(istream& is, DigitalFilter& f);


	   // get data out of the filter
	   friend float operator>>(const DigitalFilter& f, float& x);
	   friend float operator<<(float& x,const DigitalFilter& f);
	   friend double operator>>(const DigitalFilter& f, double& x);
	   friend double operator<<(double& x,const DigitalFilter& f);

           friend ostream& operator<<(ostream& os, const DigitalFilter& f);

	   // chaining multiple filters together
       friend DigitalFilter& operator>>(const DigitalFilter& f1, DigitalFilter& f2);
       friend DigitalFilter& operator<<(DigitalFilter& f1, const DigitalFilter& f2);
          
};


// the friends as inlines

// input new data value
inline DigitalFilter& operator>>(const float x, DigitalFilter& f)
{

	float ftmp = f.filter( x );

        return f;

}

inline DigitalFilter& operator<<(DigitalFilter& f, const float x)
{

	float ftmp = f.filter( x );

        return f;

}

inline istream& operator>>(istream& is, DigitalFilter& f)
{
	float x;

	is >> x;	x >> f;

	return is;
}

// output new filter value
inline float operator>>(const DigitalFilter& f, float& x)
{

        return x = f.out_val;
}

inline float operator<<(float& x,const DigitalFilter& f)
{

        return x = f.out_val;
}

inline double operator>>(const DigitalFilter& f, double& x)
{

        return x = f.out_val;
}

inline double operator<<(double& x,const DigitalFilter& f)
{

        return x = f.out_val;
}

inline ostream& operator<<(ostream& os, const DigitalFilter& f)
{
	return os << f.out_val;
}

// chaining digital filters
inline DigitalFilter& operator>>(const DigitalFilter& f1, DigitalFilter& f2)
{

	float ftmp = f2.filter( f1.out_val );

        return f2;

}

inline DigitalFilter& operator<<(DigitalFilter& f1,const DigitalFilter& f2)
{

	float ftmp = f1.filter( f2.out_val );

        return f1;

}

#endif




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -