Je crée un channelizer qui se compose d'un mélangeur complexe, d'un décimateur CIC et d'un filtre de compensation / décimation FIR. Le filtre FIR final peut, le cas échéant, être implémenté comme plusieurs filtres.
Ma question est, comment puis-je concevoir un filtre de telle sorte qu'il compense la réponse en fréquence très non plate du filtre CIC? Créez-vous la réponse en fréquence que vous souhaitez en calculant l'inverse de la réponse du CIC, puis exécutez-la via une FFT inverse pour obtenir la réponse impulsionnelle?
Comme vous pouvez le voir, bien que mon problème particulier concerne les filtres CIC, ma question est vraiment de savoir comment créer tout type de filtre de compensation de distorsion.
Merci pour votre temps.
filters
fft
filter-design
Jim Clay
la source
la source
Réponses:
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])
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
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.
[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"
la source
M=8
etN=9
il crée les mêmes tracés que la référence 1. J'ai utilisé la nomenclature plus près de la référence 2.Je pense que la réponse de Christopher est bonne. J'ai pensé que j'ajouterais un pour nous les types paresseux / tricheurs.
En fouillant dans fdatool de Matlab (outil de conception et d'analyse de filtres), j'ai découvert qu'il pouvait concevoir et modéliser des filtres CIC et sinc invers, où le filtre invers sinc est le filtre de compensation de distorsion du CIC.
Vous générez le filtre CIC en allant directement à la page "Créer un filtre multi-taux" (bouton à gauche dans la version R2011b) et en spécifiant le filtre CIC. Vous pouvez ensuite définir tous les paramètres que vous souhaitez dessus, tels que les taux d'interpolation / décimation, le nombre de cascades (Matlab l'appelle "sections"), etc.
Vous créez le filtre sinc inverse en accédant à la page "Filtre de conception" (la page que l'outil utilise par défaut au démarrage) et en spécifiant "Inverse Sinc Lowpass" dans le menu déroulant Lowpass. Vous pouvez ensuite définir les différents paramètres pour cela. Il a quelques paramètres uniques dans la partie Options de la boîte de dialogue, y compris "p", qui correspond au nombre de cascades (exposant sinc).
La conception du filtre invers inversé n'était pas complètement satisfaisante, cependant, car le faire correctement semblait moins une instance de calcul que de déterminer où était ma bande passante, ce que le CIC tombait à ce moment-là, puis de concevoir un filtre qui a à peu près annulé sur ce statisme. Étant donné que mon filtre CIC avait quatre cascades, j'aurais pensé que je devrais définir "p" à quatre, mais il a été surcompensé de façon quand je l'ai fait. J'ai fini par laisser "p" à 1, la valeur par défaut.
L'outil a vraiment brillé lorsque j'ai enregistré les deux filtres dans ma session, puis je suis allé dans le gestionnaire de filtres et les ai mis en cascade pour voir la réponse en fréquence globale. C'était très utile et facile à faire.
la source
Sans dupliquer la réponse ici, veuillez consulter
comment faire un filtre de compensation CIC
qui montre une solution très simple à 3 robinets pour la compensation CIC.
Ceci est spécifique à CIC ou toute demande de Sinc inverse est requise (comme avant la conversion N / A).
Pour compenser toute distorsion transversale générale (celle qui pourrait être reproduite avec un filtre transversal par opposition à une distorsion de bruit dynamique), je prendrais l'approche d'utiliser les équations de Wiener Hopf pour arriver à un filtre de compensation utilisant l'approche de l'erreur du moindre carré, idéalement utiliser une séquence d'apprentissage si disponible pour comparer la réponse souhaitée à la réponse réelle et former l'égaliseur. Pour une application montrant cela avec le code source utilisé, voir:
Compensation de la réponse en fréquence du haut-parleur dans un signal audio
la source