カスケード型積分器櫛形(CIC)フィルターで狭帯域信号を間引きする場合、CIC周波数応答を補償するのにより適したFIRフィルターはどれですか。
カスケード型積分器櫛形(CIC)フィルターで狭帯域信号を間引きする場合、CIC周波数応答を補償するのにより適したFIRフィルターはどれですか。
回答:
質問に対する答えは1つではありません。フィルター設計の問題と同様に、要件にも依存します。ウィキペディアのページでかなりよく説明されているように、CIC(カスケード積分器櫛)フィルターは、多数の積分器と櫛段のペア(したがって名前)で構成されています。各積分コームステージには、ボックスカーフィルター(つまり、長方形の周波数応答を持つフィルター)と同等の総インパルス応答があります。ボックスカーの周波数(大きさ)の応答は、全体的なCICの構造は、振幅応答を有するように起こっているので、sinc関数に類似した形状を有しているいくつかの電力に取っsinc関数のように見える、Nは積分櫛形段の数です。
ただし、アプリケーション固有の要件に基づいて調整するつまみはそれほど多くありません。CIC構造のデシメーション/補間比、くしの遅延、および段数を微調整できますが、sincのような周波数応答に悩まされます。メインローブと比較的高いサイドローブを持っています。したがって、CICの後には、応答全体を「クリーンアップ」する別のフィルターが続くのが一般的です。
こすり合わせ:CICがアプリケーションによって定義される後に配置する補正フィルターに必要なもの。本当に重要なのは、アプリケーションのニーズに基づいて制約する、全体的なカスケードの応答です。「最適」な特定のフィルターはありません。
同様の質問/signals//a/1551/306があり、以下は他の投稿からの回答のサブセットです。
一般に、CICフィルターを補償するには、CICフィルター応答の逆を使用して、補償フィルターを生成できます。CICの応答は2です
ここで、Dは微分遅延、Mは間引き率、Nはフィルター次数(カスケードフィルターの数)です。逆は次のように指定できます
補償フィルターの周波数応答が得られたら、必要なFIRフィルターの長さを選択するだけです。FIRの長さはアプリケーション固有です。明らかに、FIRフィルターが長ければ長いほど、より良い補償になります。
以下は、この単純な補正のプロットです。
以下は、周波数応答とプロットを作成するPythonコードです。
numpyとしてnumpyをインポートnumpyからsn、abs、piをインポートpylabをインポート
D = 1; M = 7; N = 3
Hfunc = lambda w : abs( (sin((w*M)/2)) / (sin((w*D)/2.)) )**N
HfuncC = lambda w : abs( (sin((w*D)/2.)) / (sin((w*M)/2.)) )**N
w = np.arange(1024) * pi/1024
G = (M*D)**N
H = np.array(map(Hfunc, w))
Hc = np.array(map(HfuncC, w))
# only use the inverse (compensation) roughly to the first null.
Hc[int(1024*pi/M/2):] = 1e-8
plot(w, 20*log10(H/G))
plot(w, 20*log10(Hc*G))
grid('on')
2 R. Lyons、「Understanding Digital Signal Processing」、2nd ed。、Prentice Hall、Upper Saddle River、ニュージャージー、2004
ISOP(補間2次多項式)は、CIC通過帯域ドループの補償によく使用されます。
このフィルターのMatlab応答は、以下を使用して表示できます。
alpha = 0.01 ;
b = [1, alpha, -alpha] ;
h = mfilt.firsrc(1,1,b)
freqz( b )
要件に合わせてアルファを選択するのは難しい部分です。最悪の場合のプリフォームのブルートフォースシミュレーションでは、0から0.5まで0.001刻みでループし、アルファを見つけて、最良の垂下補償をもたらします。最良のドループ補償をパスバンドの端での最小のエラーとして定義します。
効率を上げるために、このフィルターは通常、データレートを低くして、補間の場合はCICの前に、間引きの場合はCICの後に配置されます。