Efficient FIR realtime filter
Project description
An efficient Finite Impulse Response (FIR) filter class written in C++ with python wrapper.
Adaptive filtering is also implemented using the Least Mean Square (LMS) or Normalised Least Mean Square (NLMS) algorithm.
Installation
Linux
If you want to install it via pip you first need to install the fir1 filter binaries:
sudo add-apt-repository ppa:berndporr/usbdux sudo apt-get update sudo apt install fir1 sudo apt install fir1-dev
Then install the python package with pip:
pip3 install fir1
You can also install from source:
git clone https://github.com/berndporr/fir1 cd fir1 cmake . make make install python3 setup.py install
Windows
There is a pre-compiled package which can be installed via pip:
pip3 install fir1
If you want to compile from source you first need to build the static fir windows library which is called fir_static.lib. Open the command line and type:
cmake -G "Visual Studio 15 2017 Win64" .
Then start Visual Studio and build fir.sln. Go back to the command line and type:
python setup.py install
Usage
Realtime filtering
The filter is a realtime filter which receives samples one by one so it can process data as it arrives from an ADC converter. This is simulated here with the for loop:
import fir1 b = signal.firwin(999,0.1) f = fir1.Fir1(b) for i in range(len(noisy_signal)): clean_signal[i] = f.filter(noisy_signal[i])
The constructor Fir1() receives the filter coefficients (= impulse response) and then filtering is performed with the method filter().
LMS adaptive filter
The file lms_50Hz_ecg_filter.py removes 50Hz from an ECG with the help of the lms filter. The filter learns its own frequency response from a reference 50Hz sine wave.
Both the demo file and an explanation how the LMS filter works can be found on the homepage of the project:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.