A framework of classes is provided for designing and realizing Infinite Impulse Response (IIR) digital filters of arbitrary order. A representation of filters as a cascade of second order sections, allows processing of arbitrary number of channels of sample data of any underlying floating point type.
Through the use of templates and a functional programming style, building blocks are assembled from a set of classes that map neatly and directly to signal processing concepts.
Filters are modeled as analog prototypes each in their own class, with a calculation of the s-plane poles and zeroes, for arbitrary order with prescribed specifications. The filter is transformed into the digital domain poles and zeroes using a set of generalized classes.
Analog prototype filters are provided for Butterworth, Chebyshev, Inverse Chebyshev, Elliptic, and Bessel low pass and shelving filters, which combined with the appropriate provided transformations allows the formation of Low Pass, High Pass, Band Pass, Band Stop, Low Shelf, High Shelf, and Peaking/Notch Equalizer filters of arbitrary order with the given response characteristic capable of operating on an arbitrary number of channels in any desired floating point type. As a bonus, highly optimized forms of the RBJ Audio Cookbook biquads are included. SSE3-optimized version of the cascade processing function is provided for Visual Studio 2008 environments.
A collection of flat functions are also provided to simplify tasks common to the handling of audio data. For example, copying interleaved channel buffers, mixing them, or de-interleaving the data.
The library allocates no memory and depends on nothing externally (except for the standard library).
Source for a small cross platform graphical test application is provided to demonstrate the features, usage, and response characteristics of each filter. The program requires the JUCE framework to build (available separately).
The following filters are defined:
BiquadLowPass, BiquadHighPass, BiquadBandPass1, BiquadBandPass2, BiquadBandStop BiquadAllPass, BiquadLowShelf, BiquadHighShelf, BiquadPeak
ButterLowPass, ButterHighPass, ButterBandPass, ButterBandStop ButterLowShelf, ButterHighShelf, ButterPeak
ChebyILowPass, ChebyIHighPass, ChebyIBandPass, ChebyIBandStop ChebyILowShelf, ChebyIHighShelf, ChebyIPeak
ChebyIILowPass, ChebyIIHighPass, ChebyIIBandPass, ChebyIIBandStop ChebyIILowShelf, ChebyIIHighShelf, ChebyIIPeak
EllipticLowPass, EllipticHighPass, EllipticBandPass, EllipticBandStop
BesselLowPass, BesselHighPass, BesselBandPass, BesselBandStop
These details are provided for information only. No information here is legal advice and should not be used as such.