Ce qui suit concerne la compensation CIC et n'est pas une technique générale de «distorsion». Mais c'est une méthode simple pour "compenser" une "distorsion" non variable. Si la réponse en fréquence est connue, l'inverse de la fréquence peut être utilisé pour compenser. Des exemples comme le filtre CIC, où un mauvais filtre pourrait être utilisé en raison de la complexité réduite, sont compensés plus tard dans la chaîne de signal. Dans cet exemple, la réponse en fréquence est connue et l'inverse peut être utilisé. Remarque: avec les filtres multi-taux, vous ne souhaitez utiliser le spectre "utilisable" qu'après décimation.
Généralement, pour compenser un filtre CIC, l'inverse de la réponse des filtres CIC peut être utilisé pour générer le filtre de compensation. Le CIC a une réponse de (voir référence [r2] ou [r3])
H( ω ) = ∣∣∣s i n ( ω D / 2 )s i n ( ω M/ 2)∣∣∣N
Où D est le retard de différenciation, M est le taux de décimation et N est l'ordre des filtres (nombre de filtres en cascade). L'inverse peut être spécifié comme
H(ω ) = ∣∣∣s in ( ω M/ 2 )s i n ( ω D / 2)∣∣∣N
Une fois que nous avons la réponse en fréquence du filtre de compensation, nous pouvons simplement choisir la longueur de filtre FIR que nous désirons. La longueur de la FIR est spécifique à l'application. Évidemment, plus le filtre FIR est long, meilleure est la compensation.
Les éléments suivants sont des graphiques de cette compensation simple.
Ce qui suit est le code Python pour créer les réponses en fréquence et les tracés.
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')
s i n c- 1
[r1] Altera, "Comprendre les filtres de compensation CIC"
[r2] R. Lyons, "Understanding Digital Signal Processing", 2e éd., Prentice Hall, Upper Saddle River, New Jersey, 2004
[r3] R. Lyons, "Comprendre les filtres en peigne pour intégrateur en cascade"