Skip to main content

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

Install the python package with pip:

pip3 install fir1

You can also install from source:

git clone https://github.com/berndporr/fir1
cd fir1
python3 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:

f = fir1.Fir1(NTAPS)
f.setLearningRate(LEARNING_RATE);

y= np.empty(len(ecg))
for i in range(len(ecg)):
    ref_noise = np.sin(2.0 * np.pi / 20.0 * i);
    canceller = f.filter(ref_noise)
    output_signal = ecg[i] - canceller
    f.lms_update(output_signal)
    y[i] = output_signal

Both the demo file and an explanation how the LMS filter works can be found on the homepage of the project:

https://github.com/berndporr/fir1

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for fir1, version 1.3.0.15
Filename, size File type Python version Upload date Hashes
Filename, size fir1-1.3.0.15-cp36-cp36m-win_amd64.whl (28.5 kB) File type Wheel Python version 3.6 Upload date Hashes View hashes
Filename, size fir1-1.3.0.15.tar.gz (53.1 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page