Нижеследующее касается компенсации 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
Получив частотный отклик компенсационного фильтра, мы можем просто выбрать желаемую длину КИХ-фильтра. Длина РПИ зависит от приложения. Очевидно, что чем дольше КИХ-фильтр, тем лучше компенсация.
Ниже приведены графики этой прямой компенсации.
Ниже приведен код 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')
См. [R1] для других подходов и приближений .sinc−1
[r1] Альтера, "Понимание компенсационных фильтров CIC"
[r2] Р. Лайонс, «Понимание цифровой обработки сигналов», 2-е изд., Прентис Холл, Аппер-Седл-Ривер, Нью-Джерси, 2004
[r3] Р. Лайонс, «Понимание гребенчатых интегральных фильтров»