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 Center および File ExchangeDigital Filter Design についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by