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.
filters
fft
filter-design
Jim Clay
quelle
quelle
Antworten:
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])
Dabei ist D die Differenzierungsverzögerung, M die Dezimierungsrate und N die Filterreihenfolge (Anzahl der kaskadierten Filter). Die Umkehrung kann angegeben werden als
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.
[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"
quelle
M=8
undN=9
es schafft die gleichen Plots als Referenz 1. ich die verwendete Nomenklatur näher Referenz 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.
quelle
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
quelle