2

I have the following code in matlab that applies a filter to the "data" dataset. I would like to find the equivalent function in python.

epsilon = 8;
minpts = 12;
Normfreq = 0.0045;
Steepness = 0.9999;
StopbandAttenuation = 20;
filtered = lowpass(data, Normfreq, 'Steepness', Steepness, 'StopbandAttenuation', StopbandAttenuation);
Paolo
  • 21,270
  • 6
  • 38
  • 69

1 Answers1

1

Scipy is probably the best tool for this. You can use scipy's signal processing libraries.

From their docs, they even offer matlab style filter desing.

Matlab-style IIR filter design

butter(N, Wn[, btype, analog, output, fs]) -Butterworth digital and analog filter design.

buttord(wp, ws, gpass, gstop[, analog, fs]) - Butterworth filter order selection.

cheby1(N, rp, Wn[, btype, analog, output, fs]) - Chebyshev type I digital and analog filter design.

cheb1ord(wp, ws, gpass, gstop[, analog, fs]) - Chebyshev type I filter order selection.

cheby2(N, rs, Wn[, btype, analog, output, fs])- Chebyshev type II digital and analog filter design.

cheb2ord(wp, ws, gpass, gstop[, analog, fs]) - Chebyshev type II filter order selection.

ellip(N, rp, rs, Wn[, btype, analog, output, fs])- Elliptic (Cauer) digital and analog filter design.

ellipord(wp, ws, gpass, gstop[, analog, fs])- Elliptic (Cauer) filter order selection.

bessel(N, Wn[, btype, analog, output, norm, fs]) - Bessel/Thomson digital and analog filter design.

iirnotch(w0, Q[, fs]) - Design second-order IIR notch digital filter.

iirpeak(w0, Q[, fs]) - Design second-order IIR peak (resonant) digital filter.

You'd probably want to use a butterworth filter and then use the lfilter to apply the filter to your data.

Ref to this SO answer for a more in-depht example.

zglin
  • 2,891
  • 2
  • 15
  • 26