📄 dfilter.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 + -