So erstellen Sie einen Verzerrungskompensationsfilter

11

Ich erstelle einen Channelizer, der aus einem komplexen Mischer, einem CIC- Dezimator und einem FIR-Kompensations- / Dezimierungsfilter besteht. Der endgültige FIR-Filter kann, wenn es darauf ankommt, als mehr als ein Filter implementiert werden.

Meine Frage ist, wie entwerfe ich einen Filter so, dass er den sehr nicht flachen Frequenzgang des CIC-Filters kompensiert? Erstellen Sie den gewünschten Frequenzgang, indem Sie den Kehrwert der CIC-Antwort berechnen und dann eine inverse FFT durchlaufen, um die Impulsantwort zu erhalten?

Wie Sie sehen können, ist meine Frage, obwohl mein spezielles Problem CIC-Filter betrifft, wirklich, wie Sie irgendeine Art von Verzerrungskompensationsfilter erstellen.

Vielen Dank für Ihre Zeit.

Jim Clay
quelle
3
Ein Filter, dessen Zweck es ist, Verzerrungen früher im Kommunikationssystem zu kompensieren, wird oft als Equalizer bezeichnet . Das kann Ihnen in der Zwischenzeit weitere Informationen geben, über die Sie lesen können. Übliche Typen sind der Null-Forcing-Equalizer (was nicht das ist, was Sie wollen, wenn das System, das Sie kompensieren, Nullen im Frequenzgang hat) und der MMSE-Equalizer (Minimum Mean Squared Error).
Jason R
@JasonR Ich bin mit MMSE Adaptive Equalizers im Zusammenhang mit kanalkompensierenden entscheidungsgerichteten Equalizern vertraut, aber ich bezweifle, dass Sie das gemeint haben. Würden Sie den Equalizer irgendwie trainieren? Ich denke, der springende Punkt ist, wie Sie den Fehler bestimmen.
Jim Clay
MMSE bezieht sich nur auf das Kriterium, nach dem der Equalizer strebt. es kann adaptiv oder nicht adaptiv sein. Wenn Sie die Übertragungsfunktion des zu kompensierenden Systems und die Autokorrelationsfunktion eines additiven Rauschens kennen und beide zeitinvariant sind, können Sie "den" MMSE-Equalizer ableiten, der über die Zeit festgelegt wird. Adaptive Lösungen können verwendet werden, wenn diese Informationen entweder nicht genau bekannt sind oder sich im Laufe der Zeit ändern (was ziemlich häufig vorkommt).
Jason R
Adaptive Filter umfassen häufig einen Trainingsmodus, in dem eine Anzahl bekannter Symbole durch das System übertragen werden, so dass der Empfänger seinen Filter auf einen guten Satz von Koeffizienten konvergieren lassen kann. Nach dem Training tritt häufig auch eine Verfolgungsphase ein, in der der entscheidungsgesteuerte Betrieb für die kontinuierliche Aktualisierung der Filterabgriffe verwendet wird. Alternativ könnte in einem Regime, in dem SNR und ISI "gut genug" sind, der entscheidungsgesteuerte Modus von Anfang an als blindes Erfassungsschema verwendet werden, wobei die Trainingsphase übersprungen wird.
Jason R
Es ist etwas schwierig, Lesematerial zu diesem Thema zu finden, das mathematisch zugänglich ist. Ich mag Haykins adaptive Filtertheorie , aber es erfordert einige Mühe, die Mathematik zu durchbrechen (und Sie benötigen einen soliden linearen Algebra-Hintergrund). Es ist kompliziert genug, dass Sie, wenn Sie es nicht regelmäßig verwenden, zuerst die Themen der statistischen Signalverarbeitung auffrischen müssen.
Jason R

Antworten:

9

Das Folgende befasst sich mit der CIC-Kompensation und ist keine allgemeine "Verzerrungstechnik". Es ist jedoch eine einfache Methode, nicht variierende "Verzerrungen" zu "kompensieren". Wenn der Frequenzgang bekannt ist, kann die Inverse der Frequenz zur Kompensation verwendet werden. Beispiele wie das CIC-Filter, bei dem aufgrund der verringerten Komplexität ein schlechtes Filter verwendet werden könnte, werden später in der Signalkette kompensiert. In diesem Beispiel ist der Frequenzgang bekannt und das Inverse kann verwendet werden. Beachten Sie, dass Sie bei Filtern mit mehreren Raten das "verwendbare" Spektrum erst nach der Dezimierung verwenden möchten.

Im Allgemeinen kann zur Kompensation eines CIC-Filters die Umkehrung der CIC-Filterantwort verwendet werden, um das Kompensationsfilter zu erzeugen. Der CIC hat eine Antwort von (siehe Referenz [r2] oder [r3])

H.(ω)=|sichn(ωD./.2)sichn(ωM./.2)|N.

Dabei ist D die Differenzierungsverzögerung, M die Dezimierungsrate und N die Filterreihenfolge (Anzahl der kaskadierten Filter). Die Umkehrung kann angegeben werden als

H.(ω)=|sichn(ωM./.2)sichn(ωD./.2)|N.

Sobald wir den Frequenzgang des Kompensationsfilters haben, können wir einfach die gewünschte Länge des FIR-Filters auswählen. Die Länge der FIR ist anwendungsspezifisch. Je länger der FIR-Filter ist, desto besser ist natürlich die Kompensation.

Das Folgende sind Diagramme dieser einfachen Kompensation.

Das Folgende ist der Python-Code zum Erstellen der Frequenzantworten und Diagramme.

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')

sichnc- -1

[r1] Altera, "CIC-Kompensationsfilter verstehen"

[r2] R. Lyons, "Understanding Digital Signal Processing", 2. Auflage, Prentice Hall, Upper Saddle River, New Jersey, 2004

[r3] R. Lyons, "Kaskadierte Integrator-Kammfilter verstehen"

Christopher Felton
quelle
Ref. 1 ist großartig, verwendet jedoch eine andere Terminologie (M = Stufenverzögerung, bei der Sie D verwendet haben. R = Reduktionsrate, bei der Sie M verwendet haben). Daher habe ich eine Weile gebraucht, um den Fehler zu erkennen: Sie verwenden WM / 2, Altera gibt pi an F / R. Nach einem kurzen Excel-Plot glaube ich, dass die Altera-Version die richtige ist.
Alan Campbell
@AlanCampbell Wenn Sie die obigen Gleichungen zeichnen (was ich im Code-Snippet getan habe), werden Sie sehen, dass es keinen Fehler gibt. Was ich in den Gleichungen nicht explizit genannt habe, ist der Gewinn . Beachten Sie im Code-Snip, dass ich die Verstärkung entferne. Wenn Sie den Code Schnipsel ausführen und ändern Sie das M=8und N=9es schafft die gleichen Plots als Referenz 1. ich die verwendete Nomenklatur näher Referenz 2.
Christopher Felton
2

Ich denke, Christophers Antwort ist gut. Ich dachte, ich würde einen für uns Lazy / Cheater-Typen hinzufügen.

Beim Stöbern in Matlabs fdatool (Filter Design & Analysis Tool) stellte ich fest, dass es sowohl CIC- als auch inverse Sinc-Filter entwerfen und modellieren kann, wobei das inverse Sinc-Filter das Verzerrungskompensationsfilter des CIC ist.

Sie generieren den CIC-Filter, indem Sie direkt zur Seite "Filter mit mehreren Raten erstellen" (Schaltfläche links in Version R2011b) gehen und den CIC-Filter angeben. Sie können dann alle gewünschten Parameter festlegen, z. B. Interpolations- / Dezimierungsraten, Anzahl der Kaskaden (Matlab nennt sie "Abschnitte") usw.

Sie erstellen den inversen Sinc-Filter, indem Sie zur Seite "Designfilter" (die Seite, auf die das Tool beim Start standardmäßig zurückgreift) gehen und im Dropdown-Menü "Tiefpass" "Inverse Sinc Lowpass" angeben. Sie können dann die verschiedenen Parameter dafür einstellen. Es gibt einige eindeutige Parameter im Optionsteil des Dialogfelds, einschließlich "p", das der Anzahl der Kaskaden entspricht (sinc-Exponent).

Das inverse Sinc-Filterdesign war jedoch nicht ganz zufriedenstellend, da es weniger ein Beispiel für die Berechnung zu sein schien, als herauszufinden, wo sich mein Durchlassbereich befand, was der CIC-Abfall zu diesem Zeitpunkt war, und dann einen Filter zu entwerfen, der grob aufgehoben wurde raus aus dieser Erschlaffung. Da mein CIC-Filter vier Kaskaden hatte, hätte ich gedacht, dass ich "p" auf vier setzen müsste, aber es war viel überkompensiert, als ich das tat. Am Ende habe ich "p" bei 1 gelassen, dem Standardwert.

Das Tool glänzte wirklich, als ich beide Filter in meiner Sitzung speicherte, dann in den Filtermanager ging und sie kaskadierte, um den gesamten Frequenzgang anzuzeigen. Dies war sehr hilfreich und einfach zu tun.

Jim Clay
quelle
0

Ohne die Antwort hier zu duplizieren, lesen Sie bitte

wie man einen CIC-Kompensationsfilter macht

Dies zeigt eine sehr einfache 3-Tap-Lösung für die CIC-Kompensation.

Dies ist spezifisch für CIC oder es ist eine Anwendung für einen inversen Sinc erforderlich (z. B. vor der D / A-Umwandlung).

Um eine allgemeine transversale Verzerrung zu kompensieren (die mit einem Transversalfilter im Gegensatz zu einer dynamischen Rauschverzerrung repliziert werden könnte), würde ich den Ansatz verwenden, die Wiener Hopf-Gleichungen zu verwenden, um im Idealfall einen Kompensationsfilter unter Verwendung des Least Squared Error-Ansatzes zu erstellen Verwenden einer Trainingssequenz, falls verfügbar, um die gewünschte mit der tatsächlichen Reaktion zu vergleichen und den Equalizer zu trainieren. Eine Anwendung, die dies mit dem verwendeten Quellcode zeigt, finden Sie unter:

Kompensation des Lautsprecherfrequenzgangs in einem Audiosignal

Dan Boschen
quelle