FIR filter decomposition (single rate)?

20 vues (au cours des 30 derniers jours)
Jay
Jay le 13 Mai 2025
Réponse apportée : AH le 27 Mai 2025
I have a long single rate FIR filter. Due to a hardware limitation, I want to decompose it into two or more cascaded FIR filters with smaller taps. For example, I have 200 taps single rate FIR filter. What I want to do is decomposing the original 200-tap FIR filter into two or more cascaded 100-tap FIR filters. Does MATLAB have a related function or toolbox?
  2 commentaires
Mathieu NOE
Mathieu NOE le 13 Mai 2025
hello
maybe you can truncate your FIR filter if you can afford some tolerance in how the filter curve behaves in the lower frequency range (depends of your application)
splitting in two may not give you any benefit because shorter filters = less accuracy in lower freqs and having two instead of one filter may not be as accurate as the original filter anyway
or you could change to IIR filter for a much more compact realization (implement it as SOS (biquad) sections)
Jay
Jay le 13 Mai 2025
Thanks Mathieu for the reply and the suggestions!
I was hoping to find a systematic way to decompose a single higher order filter into multiple stages with lower order filters with equivalent frequency response. This could be possible using a spectral factorization. However, it seems that this is only practically attractive in a certain condition and generally requires optimization technique. I ended up with reimplementing hardware to accomodate the latency restriction.

Connectez-vous pour commenter.

Réponses (1)

AH
AH le 27 Mai 2025
I suggest you use tf2zpk and zp2ctf. Use tf2zpk and zp2ctf. Let's say that the long FIR filter coefficients are stored in the row vector b. Then, [z,p,k] = tf2zpk(b,1); [num,den] = zp2ctf(z,p,k);. The function zp2ctf has name-value pairs that provides you with some nubs to control the order of sections.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by