- Notifications
You must be signed in to change notification settings - Fork4
bolderflight/filter
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This is a library of digital filters. This library is compatible with Arduino and with CMake build systems.
Use the Arduino Library Manager to install this library or clone to your Arduino/libraries folder. Additionally, theBolder Flight Systems Units library must be installed. This library is added as:
#include"filter.h"
An example Arduino executable is located atexamples/arduino/filter_example/filter_example.ino. Teensy 3.x, 4.x, and LC devices are used for testing under Arduino and this library should be compatible with other devices.
CMake is used to build this library, which is exported as a library target calledfilter. The header is added as:
#include"filter.h"
The library can be also be compiled stand-alone using the CMake idiom of creating abuild directory and then, from within that directory issuing:
cmake ..make
This will build the library, an example executable calledfilter_example, and an executable for testing using the Google Test framework, calledfilter_test. The example executable source files are located atexamples/cmake/filter_example.cc.
This library is within the namespacebfs
Filter dlpf(b, a)y = dlpf(x)
Filters the input data x using a rational transfer function defined by the numerator and denominator coefficients b and a, similar to MATLAB'sfilter function. If a[0] is not equal to 1, then filter normalizes the filter coefficients by a[0]. Therefore, a[0] must be nonzero.
Filter(const T (&b)[N], const T (&a)[M]) This creates aFilter object. It is a templated class and the constructor takes an array of the numerator coefficients and an array of the denomenator coefficients.
/* Moving average filter with a window size of 5*/float b[] = {0.2,0.2,0.2,0.2,0.2};float a[] = {1};bfs::Filter<float,5,1>dlpf(b, a);
T Update(const T val) Filters the input data returning the filtered value.
/* Filter data array x*/for (size_t i =0; i <100; i++) { y = dlpf.Update(x[i]);}
void Reset() Resets the filter states.
dlpf.Reset();
This class implements a 1st order IIR filter given a desired cutoff and sampling frequency. Optionally, an initial value may also be passed for non-zero initial values.
void Init(const float cutoff_hz, const float samp_hz) Initializes the IIR filter given a cutoff frequency and sampling rate.
/** An IIR filter with a 10 Hz cutoff frequency* and a 50 Hz sampling rate*/bfs::Iir dlpf;dlpf.Init(10.0f,50.0f);
void Init(const float cutoff_hz, const float samp_hz, const float initial_val) Initializes the IIR filter given a cutoff frequency, sampling rate, and initial value.
/** An IIR filter with a 10 Hz cutoff frequency,* a 50 Hz sampling rate, and an initial value* of 101325.*/bfs::Iir dlpf;dlpf.Init(10.0f,50.0f,101325.0f);
float Filter(const float val) Passes a new value to the filter and returns the filtered result.
dlpf.Filter(97600.0f);
About
Library of digital filters