FIR filter decomposition (single rate)?

6 次查看(过去 30 天)
Jay
Jay 2025-5-13
回答: AH 2025-5-27
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 个评论
Mathieu NOE
Mathieu NOE 2025-5-13
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 2025-5-13
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.

请先登录,再进行评论。

回答(1 个)

AH
AH 2025-5-27
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.

类别

Help CenterFile Exchange 中查找有关 Digital Filter Design 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by