Comment créer un filtre de compensation de distorsion


11

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.


3
Un filtre dont le but est de compenser la distorsion plus tôt dans le système de communication est souvent appelé égaliseur ; cela peut vous donner plus d'informations à lire dans l'intervalle. Les types courants sont l'égaliseur à forçage nul (ce qui n'est pas ce que vous voulez si le système que vous compensez a des zéros dans sa réponse en fréquence) et l'égaliseur d'erreur moyenne quadratique minimale (MMSE).
Jason R

@JasonR Je connais les égaliseurs adaptatifs MMSE dans le contexte des égaliseurs orientés vers la décision de compensation de canal, mais je doute que c'est ce que vous vouliez dire. Souhaitez-vous former l'égaliseur en quelque sorte? Je suppose que le nœud est de savoir comment déterminer l'erreur.
Jim Clay

MMSE fait uniquement référence au critère recherché par l'égaliseur; il peut être adaptatif ou non adaptatif. Si vous connaissez la fonction de transfert du système à compenser, et la fonction d'autocorrélation de tout bruit additif, et les deux sont invariants dans le temps, alors vous pouvez dériver "l'égaliseur" MMSE, qui sera fixe dans le temps. Des solutions adaptatives peuvent être utilisées lorsque ces informations ne sont pas connues avec précision ou qu'elles changent au fil du temps (ce qui est assez courant).
Jason R

Les filtres adaptatifs incluent souvent un mode d'apprentissage où un certain nombre de symboles connus sont transmis à travers le système, permettant au récepteur de laisser son filtre converger sur un bon ensemble de coefficients. Après la formation, il est également courant d'entrer dans une phase de suivi, où l'opération dirigée par la décision est utilisée pour des mises à jour continues des robinets de filtre. Comme alternative, dans un régime où le SNR et l'ISI sont "assez bons", le mode décisionnel pourrait être utilisé dès le départ comme un schéma d'acquisition aveugle, sautant la phase de formation.
Jason R

Trouver du matériel de lecture mathématique accessible sur ce sujet est quelque peu difficile. J'aime la théorie du filtre adaptatif de Haykin , mais il faut un certain effort pour couper à travers les mathématiques (et vous avez besoin d'un fond solide d'algèbre linéaire). C'est suffisamment compliqué pour que si vous ne l'utilisez pas régulièrement, vous devrez d'abord vous familiariser avec les sujets de traitement statistique du signal.
Jason R

Réponses:


9

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(ω)=|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

[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 référence 1 est géniale, mais utilise une terminologie différente (M = retard d'étape, où vous avez utilisé D. R = taux de réduction, où vous avez utilisé M), il m'a donc fallu un certain temps pour voir l'erreur: vous utilisez WM / 2, Altera spécifie pi F / R. Après un rapide tracé Excel, je pense que la version d'Altera est la bonne.
Alan Campbell

@AlanCampbell Si vous tracez les équations ci-dessus (ce que j'ai fait dans l'extrait de code), vous verrez qu'il n'y a pas d'erreur. Ce que je n'ai pas explicitement appelé dans les équations, c'est le gain . Remarquez dans le code snip que je supprime le gain. Si vous exécutez le code snip et modifiez le M=8et N=9il 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.
Christopher Felton

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.


0

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.