# FIR Filter Implementation in Julia

Hello all,

I’m trying to replicate this MATLAB code in Julia for zero-phase filtering:

``````d = designfilt('bandpassfir', 'StopbandFrequency1', 1e-9, ...
'PassbandFrequency1', 35, 'PassbandFrequency2', 45, ...
'StopbandFrequency2', 50, 'StopbandAttenuation1', 120, ...
'PassbandRipple', 1, 'StopbandAttenuation2', 120, 'SampleRate', 100);
``````

Which results in a filter with the following properties:

``````d =

digitalFilter with properties:

Coefficients: [1×371 double]

Specifications:
FrequencyResponse: 'bandpass'
ImpulseResponse: 'fir'
SampleRate: 100
StopbandAttenuation1: 120
PassbandFrequency1: 1
StopbandFrequency2: 50
PassbandRipple: 1
PassbandFrequency2: 5
StopbandAttenuation2: 120
StopbandFrequency1: 1.0000e-09
DesignMethod: 'equiripple'
``````

And I use this in filtfilt:

``````filteredData = filtfilt(d, data)
``````

However, I’m having difficulty with the DSP package to replicate this. The FIR method asks for a window and I couldn’t find the equiripple design method for FIR in the documentation. Can anybody help me out?

Thanks,
Yasir

1 Like

I don’t think DSP.jl supports as many design techniques as Matlab does. You can approximate the same filter response using `remez`:

``````fil = remez(371, [0, 34, 35, 45, 46, 50], [0, 1, 0], Hz=100, maxiter=100);
``````

Alternatively, just go with a FIR window design:

``````fil = digitalfilter(Bandpass(35, 45, fs=100), FIRWindow(blackman(371)));
``````

which actually produces better stopband rejection. I don’t think any of these two methods reaches 120 dB of rejection, though.

2 Likes

Thanks a lot! I’ll use the FIR window then, 120 dB was a bit overkill so something around 60 would do the trick just as well.

1 Like