Compensateur de filtre FIR lors de l'utilisation d'un filtre de décimation CIC

Réponses:

3

Il n'y a pas de réponse unique à votre question: comme pour tout problème de conception de filtre, cela dépend de vos besoins. Comme décrit assez bien sur la page Wikipedia , les filtres CIC (cascaded-integrator-comb) sont constitués d'un certain nombre de paires d'étapes d'intégrateur et de peigne (d'où le nom). Chaque étage intégrateur-peigne a une réponse impulsionnelle agrégée équivalente à un filtre wagon plat (c'est-à-dire un filtre à réponse rectangulaire). La réponse en fréquence (amplitude) d'un wagon couvert a une forme ressemblant à une fonction sinc, de sorte que la structure globale du CIC va avoir une réponse en amplitude qui ressemble à une fonction sinc prise à une puissance , où N est le nombre d'étages intégrateur-peigne.NN

Cependant, il n'y a pas beaucoup de boutons à ajuster en fonction des exigences spécifiques à l'application. Vous pouvez modifier le rapport de décimation / interpolation de la structure CIC, le délai du peigne et le nombre d'étages, mais vous êtes toujours coincé avec la réponse en fréquence de type sinc, qui n'est pas particulièrement idéale, car elle n'est pas plate à travers le lobe principal et a des lobes latéraux relativement élevés. Il est donc typique qu'un CIC soit suivi d'un autre filtre qui «nettoie» la réponse globale.

Le hic: ce dont vous avez besoin de tout filtre compensateur que vous mettez après le CIC va être défini par votre application. Ce qui est vraiment important, c'est la réponse de la cascade globale, que vous contraindriez en fonction des besoins de votre application. Il n'y a pas de filtre spécifique «le plus approprié».

Jason R
la source
Où vous avez écrit "un avec une réponse en fréquence rectangulaire", ne voulez-vous pas dire "un avec une réponse impulsionnelle rectangulaire ?"
nibot
Oui tu as raison. Merci d'avoir signalé l'erreur.
Jason R
4

Il y avait une question similaire, https://dsp.stackexchange.com/a/1551/306 , et ce qui suit est un sous-ensemble de la réponse de l'autre post.

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 2

H(ω)=|sjen(ω/2)sjen(ω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(ω)=|sjen(ωM/2)sjen(ω/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')

sjenc-1

1 Altera, "Comprendre les filtres de rémunération CIC"

2 R. Lyons, "Understanding Digital Signal Processing", 2e éd., Prentice Hall, Upper Saddle River, New Jersey, 2004

Christopher Felton
la source
Vous montrez la réponse en fréquence souhaitée dans le filtre de compensation ... mais comment obtenir des coefficients de filtre qui produisent un filtre qui se rapproche de cette réponse? Je pense que c'est ce que la question pose.
nibot
0

Les ISOP (polynômes interpolés du second ordre) sont souvent utilisés pour compenser l'affaissement de la bande passante CIC.

La réponse Matlab de ce filtre peut être affichée en utilisant:

alpha = 0.01 ;
b     = [1, alpha, -alpha] ; 
h     = mfilt.firsrc(1,1,b)
freqz( b )

Le choix de l'alpha pour vos besoins est la partie délicate. Les pires simulations de force brute de préforme, bouclant sur 0 à 0,5 par incréments de 0,001, trouvant l'alpha qui donne la meilleure compensation de statisme. Définir la meilleure compensation d'affaissement comme une erreur minimale au bord de votre bande passante.

Pour plus d'efficacité, ce filtre est normalement placé au débit de données le plus bas, avant le CIC pour l'interpolation et après le CIC pour la décimation.

Morgan
la source
Voir Voir dsp.stackexchange.com/questions/19584/… pour une autre interprétation / explication de cette approche de rémunération.
Dan Boschen