Sawen Moerjie

Sawen_Blog

一个普通的传媒工科牲的博客
follow

多速率信号処理-CICフィルター

基本原理#

級聯積分梳狀濾波器(Cascade Integrator Comb)は、多速率信号処理において非常に効率的なデジタルフィルターです。CIC フィルターはローパスフィルターの特性を持ち、以下の利点があります:

  • フィルター係数はすべて11であり、設計時にフィルター係数を保存する必要がなく、ストレージユニットを節約し、フィルタリング時には加算器と累積器のみが必要で、乗算器は不要です。
  • 構造が規則的で、全体の構造に影響を与えずに補間因子を柔軟に設定できます。

積分器#

積分器の構造は

2024after4202409052106726.png

時域では次のように表されます:

y1(n)=x(n)+y1(n1)y_1(n)=x(n)+y_1(n-1)

周波数域では次のように表されます:

H1(ejw)=11ejwH_1(\mathrm{e}^{\mathrm{j}w})=\frac{1}{1-\mathrm{e}^{-\mathrm{j}w}}

積分器の振幅スペクトルは次のようになります:

H1(ejw)=11ejw=1ejw/2(ejw/2ejw/2)=12sin(w2)\left|H_1(\mathrm{e}^{jw})\right|=\left|\frac{1}{1-\mathrm{e}^{-jw}}\right|=\left|\frac{1}{\mathrm{e}^{-jw/2}(\mathrm{e}^{jw/2}-\mathrm{e}^{-jw/2})}\right|=\left|\frac{1}{2\sin\left(\frac{w}{2}\right)}\right|

この式から、積分器は極点(ω=2kπ(\omega = 2k \pikkは整数) のみを持ち、零点は持たず、直流信号に対して無限大の増幅を持つことがわかります。

1725542139077.png

梳狀濾波器#

時域では次のように表されます:

yC(n)=x(n)x(nRM)y_C(n)=x(n)-x(n-RM)

R と M の積は梳狀濾波器の遅延長を示します。

周波数域では次のように表されます:

HC(z)=1zRMH_\mathrm{C}(z)=1-z^{-RM}

振幅スペクトルは次のようになります:

HC(ejw)=1ejRMw=ejRMw/2(ejRMw/2ejRMw/2)=2sin(RM2w)\left|H_{\mathrm{C}}(\mathrm{e}^{\mathrm{j}w})\right|=\left|1-\mathrm{e}^{-\mathrm{j}RMw}\right|=\left|\mathrm{e}^{-\mathrm{j}RMw/2}(\mathrm{e}^{\mathrm{j}RMw/2}-\mathrm{e}^{-\mathrm{j}RMw/2})\right|=2\left|\sin\left(\frac{RM}{2}w\right)\right|

1725542829180.png

梳狀濾波器は零点のみを持ち、極点は持たないことがわかります。

R=8、M=1 の場合、構造は次のようになります:

1725542752856.png

これにより、単一級 CIC フィルターの振幅スペクトルは次のようになります:

HCIC(ejw)=H1(ejw)HC(ejw)=sin(RM2w)sin(w2)\left|H_{\mathrm{CIC}}(\mathrm{e}^{\mathrm{j}w})\right|=\left|H_{1}(\mathrm{e}^{\mathrm{j}w})\right|\cdot\left|H_{\mathrm{C}}(\mathrm{e}^{\mathrm{j}w})\right|=\left|\frac{\sin\left(\frac{RM}{2}w\right)}{\sin\left(\frac{w}{2}\right)}\right|

$\mathrm {RM\omega}/2=\mathrm {k}:\pi $、すなわち $w=\frac {2k\pi}{RM}\quad (k=\pm1,\pm2,\cdots,\pm (RM-1))$ のとき、零点を確定できます。

ω/2=kπ\omega /2 =k\pi、すなわちω=2kπ\omega = 2k\piのとき、このときの振幅応答は次のようになります:

HCIC(ejω)ω=2kπ=RM\left|H_{\mathrm{CIC}}(\mathrm{e}^{\mathrm{j}\omega})\right|_{\omega=2k\pi}=RM

これにより、零極点の相殺が実現されます。

単一級 CIC フィルターはω=0\omega =0のときHCIC(ejω)=RM \left| H_{CIC}(e^{j\omega}) \right|=RMであるため、主瓣区間は[0,2πRM]\begin{bmatrix}0,\frac{2\pi}{RM}\end{bmatrix}であり、残りはすべて副瓣で、第一副瓣レベルは次のようになります:

A1=HCIC(ejw)w=3πRM=sin(RM2×3πRM)sin(12×3πRM)=1sin(3π2RM)A_1=\left|H_{\mathrm{CIC}}(\mathrm{e}^{\mathrm{j}w})\right|_{w=\frac{3\pi}{RM}}=\left|\frac{\sin\left(\frac{RM}{2}\times\frac{3\pi}{RM}\right)}{\sin\left(\frac{1}{2}\times\frac{3\pi}{RM}\right)}\right|=\left|\frac{1}{\sin\left(\frac{3\pi}{2RM}\right)}\right|

したがって、副瓣抑制は次のようになります:

A=RMsin(3π2RM)A=\left|RM\sin\left(\frac{3\pi}{2RM}\right)\right|

R \mathrm{R}\rightarrow\infty のとき、副瓣抑制は次のようになります:

A=20lg(limRA)=20lg(3π2)=13.46dBA=20lg(\lim_{R\to\infty}A)=20lg(\frac{3\pi}{2})=13.46dB

単一級 CIC フィルターの阻止帯減衰は次のようになります:

α=20lgb\alpha =-20lgb

通帯内容差(通帯波紋)は次のようになります:

δ=20lgbπsin(bπ)\delta = 20lg\left|\frac{b\pi}{\sin(b\pi)}\right|

ここで、b は帯域幅比率因子です。

b=Bfs/(RM)b=\frac{B}{f_s/(RM)}

単一級 CIC フィルターの副瓣レベルは高いため、多段 CIC 級聯によって改善できます。

H(ejw)=sin(RM2w)sin(w2)N\left|H(\mathrm{e}^{\mathrm{j}w})\right|=\left|\frac{\sin\left(\frac{RM}{2}w\right)}{\sin\left(\frac{w}{2}\right)}\right|^N

1725886131150.png

N 級 CIC 級聯フィルターにおいて、副瓣抑制、阻止帯減衰、通帯内容差は次のように表されます:

{AN=13.46NdBαN=20NlgbδN=20Nlgbπsin(bπ)\begin{cases}A_\mathrm{N}=13.46N\:\mathrm{dB}\\\alpha_\mathrm{N}=-20N\lg b\\\delta_\mathrm{N}=20N\lg\left|\frac{b\pi}{\sin(b\pi)}\right|\end{cases}

CIC フィルターの階数を増やすことで、副瓣抑制と阻止帯減衰を増加させることができますが、通帯内容差が大きくなります。したがって、通帯性能を考慮して、通常はN5N\leq5を選択します。NNが不変のとき、帯域幅比率因子bbが小さいほど、CIC フィルターの通帯と阻止帯特性も良好になります。したがって、CIC は一般に補間システムの最後の段階に位置します(入力レートが最も高い)。

位増加問題#

多段フィルターの振幅応答から、ω0\omega \rightarrow 0のとき:

limw0H(ejw)=limw0RM2cos(RMw/2)12cos(w/2)N=(RM)N\lim\limits_{w\to0}\Bigl|H(\mathrm{e}^{\mathrm{j}w})\Bigr|=\lim\limits_{w\to0}\Biggl|\frac{\frac{RM}{2}\cdot\cos(RMw/2)}{\frac{1}{2}\cdot\cos(w/2)}\Biggr|^N=(RM)^N

これにより、多段 CIC フィルターが引き起こす可能性のある振幅増益の最大値は次のようになります:

Gmax=(RM)NG_{max}=(RM)^N

入力データx(n)x(n)が符号付き数で、ビット幅がBinB_{in}、値の範囲が[2Bin1,2Bin11][-2^{B_{in}-1},2^{B_{in}-1}-1]であると仮定すると、出力y(n)y(n)の最大値は次のようになります:

ymax=2Bm1(RM)Ny_{max}=-2^{B_{\mathrm{m}}-1}\cdot\left(RM\right)^N

したがって、出力の最大ビット幅は次のようになります:

Bout=ceil[log2ymax]+1=Nceil[log2(RM)]+BinB_{\mathrm{out}}=\text{ceil}[\log_2|y_{\mathrm{max}}|]+1=N\cdot\text{ceil}[\log_2(RM)]+B_{\mathrm{in}}

FPGA 設計時には、出力信号のビット幅を適切に設定し、データのオーバーフローを防止する必要があります。リソースを節約するために、各段階で適切にビットを切り捨てることもできます。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。