A seguir, aborda a compensação CIC e não é uma técnica geral de "distorção". Mas é um método direto para "compensar" a "distorção" não variável. Se a resposta em frequência é conhecida, o inverso da frequência pode ser usado para compensar. Exemplos como o filtro CIC, onde um filtro ruim pode ser usado devido à complexidade reduzida, são compensados posteriormente na cadeia de sinal. Neste exemplo, a resposta de frequência é conhecida e o inverso pode ser usado. Observe que, com os filtros com várias taxas, você deseja usar apenas o espectro "utilizável" após a dizimação.
Geralmente, para compensar um filtro CIC, o inverso da resposta dos filtros CIC pode ser usado para gerar o filtro de compensação. O CIC tem uma resposta de (consulte a referência [r2] ou [r3])
H(ω)=∣∣∣sin(ωD/2)sin(ωM/2)∣∣∣N
Onde D é o atraso diferenciado, M é a taxa de dizimação e N é a ordem dos filtros (número de filtros em cascata). O inverso pode ser especificado como
H(ω)=∣∣∣sin(ωM/2)sin(ωD/2)∣∣∣N
Uma vez que tenhamos a resposta de frequência do filtro de compensação, podemos simplesmente escolher o comprimento do filtro FIR que desejamos. O comprimento do FIR é específico da aplicação. Obviamente, quanto mais tempo o filtro FIR, melhor a compensação.
A seguir, são apresentados gráficos dessa compensação direta.
A seguir, é apresentado o código Python para criar as respostas e gráficos de frequência.
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] Altera, "Entendendo os filtros de compensação CIC"
[r2] R. Lyons, "Understanding Digital Signal Processing", 2ª ed., Prentice Hall, Upper Saddle River, Nova Jersey, 2004
[r3] R. Lyons, "Entendendo os filtros combinados em cascata do integrador"