Filter design: MATLAB firls (Least-squares linear-phase FIR filter design) alternative?

I also just realized how easy it is to call this function using Pycall as an alternative solution:

filty = pyimport("scipy")
firls = filty.signal.firls

Followed by code similar to the MATLAB approach:

center_freq = 20
filter_frequency_spread_wide = 10
ffrequencies   = [ 
    0, 
    (1-transition_width)*(center_freq-filter_frequency_spread_wide), 
    (center_freq-filter_frequency_spread_wide), 
    (center_freq+filter_frequency_spread_wide), 
    (1+transition_width)*(center_freq+filter_frequency_spread_wide), 
    nyquist, 
]/nyquist
idealresponse  = [ 0 0 1 1 0 0 ]
filterweightsW = (firls(201,ffrequencies,idealresponse))
plot((ffrequencies*nyquist),idealresponse[:])
fft_filtkern  = abs.(fft(filterweightsW))
fft_filtkern  = fft_filtkern./maximum(fft_filtkern) # normalized to 1.0 for visual comparison ease
hz_filtkern   = range(0,nyquist, length=101)
plot!(hz_filtkern,fft_filtkern[1:ceil(Int,length(fft_filtkern)/2)],color=:black)

1 Like