FIR-Filterkompensator bei Verwendung eines CIC-Dezimationsfilters


Antworten:


3

Es gibt keine einheitliche Antwort auf Ihre Frage: Wie bei jedem Problem mit dem Filterdesign hängt es von Ihren Anforderungen ab. Wie auf der Wikipedia-Seite ziemlich gut beschrieben , bestehen CIC-Filter (Cascaded-Integrator-Comb) aus einer Reihe von Paaren von Integrator- und Kammstufen (daher der Name). Jede Integrator-Kamm-Stufe hat eine aggregierte Impulsantwort, die einem Boxcar-Filter entspricht (dh eine mit einem rechteckigen Frequenzgang). Der Frequenzgang (Größe) eines Güterwagens hat eine Form, die einer Sinc-Funktion ähnelt, so dass die gesamte CIC-Struktur einen Magnitudengang aufweist, der wie eine Sinc-Funktion aussieht, die auf eine bestimmte Leistung , wobei die Anzahl der Integrator-Kamm-Stufen ist.N.NN

Es gibt jedoch nicht viele Regler, die Sie basierend auf anwendungsspezifischen Anforderungen anpassen können. Sie können das Dezimierungs- / Interpolationsverhältnis der CIC-Struktur, die Kammverzögerung und die Anzahl der Stufen anpassen, aber Sie bleiben bei dem aufrichtigen Frequenzgang, der nicht besonders ideal ist, da er nicht flach ist Hauptlappen und hat relativ hohe Nebenkeulen. Daher ist es typisch, dass auf einen CIC ein weiterer Filter folgt, der die Gesamtantwort "bereinigt".

Das Problem: Was Sie von einem Kompensationsfilter benötigen, den Sie nach dem CIC einsetzen, wird von Ihrer Anwendung definiert. Was wirklich wichtig ist, ist die Reaktion der gesamten Kaskade, die Sie basierend auf den Anforderungen Ihrer Anwendung einschränken würden. Es gibt keinen speziellen Filter, der "am besten geeignet" ist.


Wo Sie schreibt „ein mit einem rechteckigen Frequenzgang“, nicht wahr bedeuten „ein mit einem rechteckigen Impulsantwort?
nibot

Ja, du hast Recht. Vielen Dank, dass Sie auf den Fehler hingewiesen haben.
Jason R

4

Es gab eine ähnliche Frage, /signals//a/1551/306 , und das Folgende ist eine Teilmenge der Antwort aus dem anderen Beitrag.

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 2

H(ω)=|sin(ωD/2)sin(ω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(ω)=|sin(ωM/2)sin(ω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.

importiere numpy als np von numpy importiere sin, abs, pi importiere 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')

Siehe, Altera, " Grundlegendes CIC Kompensationsfilter" , für andere Ansätze und Annäherung 1 .sinc1

1 Altera, "CIC-Kompensationsfilter verstehen"

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


Sie zeigen den gewünschten Frequenzgang im Kompensationsfilter an ... aber wie erhalten Sie Filterkoeffizienten, die einen Filter erzeugen, der sich diesem Frequenzgang annähert? Ich denke, das ist es, was die Frage stellt.
Nibot

0

ISOP (Interpolated Second Order Polynomial) werden häufig zur Kompensation des CIC-Durchlassbereichsabfalls verwendet.

Die Matlab-Antwort dieses Filters kann wie folgt angezeigt werden:

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

Die Auswahl des Alphas für Ihre Anforderungen ist der schwierige Teil. Im schlimmsten Fall werden Brute-Force-Simulationen durchgeführt, bei denen in Schritten von 0,001 eine Schleife über 0 bis 0,5 durchgeführt wird, um das Alpha zu ermitteln, das die beste Statikkompensation ergibt. Definieren der besten Statikkompensation als minimaler Fehler am Rand Ihres Durchlassbereichs.

Aus Effizienzgründen wird dieser Filter normalerweise mit der niedrigeren Datenrate vor dem CIC zur Interpolation und nach dem CIC zur Dezimierung platziert.


Eine weitere Interpretation / Erläuterung dieses Vergütungsansatzes finden Sie unter Siehe dsp.stackexchange.com/questions/19584/… .
Dan Boschen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.