Biquad filter library in C++ template form. On mbed LPC1768, can run about 100K operations per second with double precision float, or about 200K with single precision float.
Diff: biquad.h
- Revision:
- 0:f8ed62dbacbc
- Child:
- 1:9c0546cd518e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/biquad.h Tue Feb 14 19:12:33 2012 +0000 @@ -0,0 +1,53 @@ +/* + * biquad.cpp + * + * Original source material from Robert Bristow Johnson at + * http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt + * + * Derived from public domain C implementation by Tom St. Denis + * + * Thanks gents! + * + * C++-ification by Mark J. Howell + * + */ + +#include <math.h> + +#ifndef M_LN2 +#define M_LN2 0.69314718055994530942 +#endif + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +/* filter types */ +typedef enum { + LPF, /* low pass filter */ + HPF, /* High pass filter */ + BPF, /* band pass filter */ + NOTCH, /* Notch Filter */ + PEQ, /* Peaking band EQ filter */ + LSH, /* Low shelf filter */ + HSH /* High shelf filter */ +} BIQUAD_FILTER_TYPE; + +template <typename T> +class Biquad { + +public: + Biquad(BIQUAD_FILTER_TYPE type, + T dbGain, /* gain of filter */ + T freq, /* center frequency */ + T srate, /* sampling rate */ + T bandwidth); /* bandwidth in octaves */ + + void Reset(BIQUAD_FILTER_TYPE type, T dbGain, T freq, T srate, T bandwidth); + + T Calculate(T sample); + + T a0, a1, a2, a3, a4; + T x1, x2, y1, y2; + +};