以下は、CIC補償に対処するものであり、一般的な「歪み」手法ではありません。しかし、それは変化しない「歪み」を「補償」するための簡単な方法です。周波数応答がわかっている場合は、周波数の逆数を使用して補正できます。CICフィルターのような例では、複雑さが軽減されたために貧弱なフィルターが使用される可能性があり、後でシグナルチェーンで補正されます。この例では、周波数応答は既知であり、その逆を使用できます。マルチレートフィルターでは、デシメーション後に「使用可能な」スペクトルのみを使用することに注意してください。
一般に、CICフィルターを補償するには、CICフィルター応答の逆を使用して、補償フィルターを生成できます。CICの応答(参照[r2]または[r3]を参照)
H(ω)=∣∣∣sin(ωD/2)sin(ωM/2)∣∣∣N
ここで、Dは微分遅延、Mは間引き率、Nはフィルター次数(カスケードフィルターの数)です。逆は次のように指定できます
H(ω)=∣∣∣sin(ωM/2)sin(ωD/2)∣∣∣N
補償フィルターの周波数応答が得られたら、必要なFIRフィルターの長さを選択するだけです。FIRの長さはアプリケーション固有です。明らかに、FIRフィルターが長ければ長いほど、より良い補償になります。
以下は、この単純な補正のプロットです。
以下は、周波数応答とプロットを作成するPythonコードです。
import numpy as np
from numpy import sin, abs, pi
import 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')
sinc−1
[r1] アルテラ、「CIC補正フィルターについて」
[r2] R.ライオンズ、「Understanding Digital Signal Processing」、第2版、Prentice Hall、アッパーサドルリバー、ニュージャージー、2004
[r3] R.ライオンズ、「カスケード型積分器の櫛形フィルターについて」