Ich versuche, die Beziehung zwischen einem FIR-Filter, der aus "ersten Prinzipien" unter Verwendung eines Filterkerns mit Faltung entwickelt wurde, und einem Filter, der auf zwei Arten unter Verwendung von FFT entwickelt wurde (siehe unten), zu verstehen.
Soweit ich weiß, entspricht die Impulsantwort eines FIR-Filters dem Faltungskern des Filters. (Korrigieren Sie mich, wenn ich falsch liege.)
Nach meinem Verständnis ist die Komponentenfrequenz (dh Fourier-Transformation) der Impulsantwort eines FIR-Filters die gleiche wie die Frequenzantwort des Filters. Und deshalb gibt mir die inverse Fourier-Transformation die Impulsantwort zurück. (Korrigieren Sie mich erneut, wenn ich falsch liege.)
Dies führt mich zu zwei Schlussfolgerungen (Ignorieren der Phasenantwort oder Annahme einer linearen Phasenantwort):
Ich sollte in der Lage sein, ein FIR-Filter mit einem beliebigen Frequenzgang zu entwerfen, indem ich meinen gewünschten Frequenzgang "zeichne", eine IFFT nehme, um die Impulsantwort zu erhalten, und das als meinen Faltungskern verwende.
Alternativ sollte es mir möglich sein, ein Filter zu erstellen, indem ich die FFT des Eingangssignals nehme, mit meinem gewünschten willkürlichen Frequenzgang im Frequenzbereich multipliziere und eine IFFT des Ergebnisses nehme, um das Ausgangssignal zu erzeugen.
Intuitiv fühlt es sich so an, als wären 1 & 2 gleichwertig, aber ich bin mir nicht sicher, ob ich das beweisen könnte.
Es scheint, als würden Leute (und DSP-Literatur) große Anstrengungen unternehmen, um FIR-Kernel mit vordefinierten Antworten zu entwerfen, wobei sie komplizierte (für mich) Algorithmen wie Chebyshev oder Remez verwenden (ich werfe einige Namen aus, die ich gelesen habe, ohne sie wirklich zu verstehen) .
- Warum auf diese Längen gehen, wenn für jeden möglichen FIR-Kernel eine FFT / IFFT-Transformation existiert?
- Zeichnen Sie einfach den gewünschten Frequenzgang, nehmen Sie eine IFFT und schon haben Sie Ihren FIR-Kernel (Methode 1 oben).
quelle
Antworten:
Ein Grund dafür, dass Leute FIR-Filter entwerfen, anstatt einen direkten Ansatz (wie 1 und 2) zu wählen, ist, dass der direkte Ansatz in der Regel die Periodizität im Frequenzbereich und die Tatsache, dass die Faltung mithilfe einer FFT implementiert wird, nicht berücksichtigt kreisförmige Konvolution .
Was bedeutet das?
Angenommen, Sie haben ein Signal und eine Filterimpulsantwort (Faltungskern; Sie haben Recht, sie sind gleich). .h = [ 1 , 1 ]x = [ 1 , 2 , 3 , 4 ] h = [ 1 , 1 ]
Die Faltung ist , ein Vektor mit 5 Längen. Wenn Sie die FFT (mit der falschen Länge 4) verwenden, erhalten Sie die Antwort . Der Grund für den Unterschied ist, dass das Ergebnis der linearen Faltung dieser beiden Längen 5 ist, das Ergebnis der kreisförmigen Faltung jedoch unabhängig von der FFT-Länge ist.[ 1 , 3 , 5 , 7 , 4 ] [ 3 , 5 , 7 , 5 ]y= x ∗ h [ 1 , 3 , 5 , 7 , 4 ] [ 3 , 5 , 7 , 5 ]
Wenn die FFT-Länge größer oder gleich der Länge des Ergebnisses der linearen Faltung ist, sind die beiden gleich. Ansonsten sind die beiden nicht gleich (es sei denn, die Daten verschwören sich irgendwie, um dies zu bewirken, z. B. wenn ein Signal Null war).
quelle
Ein Problem ist der Umgang mit Transformationen mit unendlicher Länge, die sich bei Verwendung einer FFT mit endlicher Länge umlaufen. Die Fourier-Transformation einer Frequenzantwort endlicher Länge ist eine Impulsantwort unendlicher Länge oder ein Filterkern. Die meisten Menschen möchten, dass der Filter beendet wird, bevor sie sterben oder der Computerspeicher ausgeht. Sie benötigen also Tricks, um kürzere FIR-Filter zu erstellen. Wenn Sie nur das Ende der unendlichen Impulsantwort auf die FFT legen oder es auf eine generische Länge kürzen, erhalten Sie möglicherweise ein schlechteres FIR-Filter für Ihre gewünschte Frequenzspezifikation im Vergleich zu einem der "klassischen" Filterprototypen.
Ein weiteres Problem ist, dass ein zufälliger "gezeichneter" Frequenzgang sehr oft eine schreckliche Reaktion (wilde Überschwinger) zwischen den gezeichneten Punkten bei einer beliebigen endlichen Auflösung aufweist. Konvertieren Sie in ein FIR-Filter, und es klingelt wie verrückt. Die klassischen Filterprototypen sind so ausgelegt, dass sie Frequenzantwortfunktionen haben, die zwischen den Abtastpunkten glatt sind.
Ihre (2) wird als schnelle Faltung bezeichnet und häufig verwendet, wenn die FFT länger als die Länge des Datenfensters plus des kombinierten Filterkerns ist und das ordnungsgemäße Hinzufügen / Speichern von Überlappungen verwendet wird, um den Start / das Ende jedes Faltungssegments zu regeln oder Fenster (da FFTs normalerweise eine blockartige Länge haben).
quelle
Zu 1): Ja, Sie können ein FIR-Filter entwerfen, indem Sie den Frequenzgang (sowohl in Größe als auch in Phase) "zeichnen". Dies ist jedoch in der Regel sehr ineffizient: Die Länge des Impulsgangs (und die Filterreihenfolge) sind einfach vorgegeben -bestimmt durch Ihre FFT-Länge.Wenn Sie eine 128-Punkt-FFT gewählt haben, erhalten Sie 128 Abgriffe für die Impulsantwort, und wenn Sie eine 4096-Punkt-FFT gewählt haben, erhalten Sie 4096 Filterabgriffe.
Zu 2): Ja, Sie können durch Multiplikation im Frequenzbereich filtern, und dies ist in der Tat die einzige Möglichkeit, um große Impulsantworten effizient auszuführen. Wie jedoch Peter K ausgeführt hat, entspricht die Multiplikation im Frequenzbereich der Kreisfaltung. Die gebräuchlichste Methode zur Implementierung der linearen Faltung sind "Überlappungsadditions" - oder "Überlappungsspeicherungs" -Algorithmen (leicht zu googeln).
quelle
Ich bin nicht sicher, ob ich alles verstehe, was hier gesagt wurde, aber ich möchte die Fourier-Transformationsmethode vertreten.
Erstens ist es eine unglaublich flexible und unkomplizierte Möglichkeit, FIR-Filter zu entwerfen. Wie Sie sagten, müssen lediglich die Größen- und Phasenantworten definiert werden. Sie müssen jedoch, wie gesagt, ein wenig vorsichtig sein, wie Sie die Antwort definieren. Eine willkürliche Antwort kann eine übermäßig große Anzahl von Abgriffen erfordern, um eine schreckliche Zeitbereichsantwort zu implementieren und zu geben. Sei also vorsichtig, wie du es definierst.
Zweitens ist es tatsächlich so, dass die Parks-McClellan-Methode beispielsweise für bestimmte Anforderungen ein besseres Filter als die Fourier-Methode erzeugen kann, es jedoch nicht einfach ist, die Stufenanzahl zu steuern und damit auch die Größe, Phase und Sprungantwort zu definieren Methode.
Angenommen, Sie möchten ein FIR-Filter mit ähnlichen Eigenschaften wie ein 10-poliges IIR-Bessel entwerfen, aber das Übergangsband etwas verkleinern (auf Kosten eines Überschwingens der Sprungantwort). Dann macht die Fourier-Methode dies zu einem leicht zu lösenden Problem mit ungefähr 22 Abgriffen, abhängig davon, wie stark das Übergangsband verengt ist.
Wenn Sie sehen möchten, wozu die Fourier-Methode in der Lage ist, probieren Sie dieses FIR-Programm aus: http://www.iowahills.com/5FIRFiltersPage.html (kostenlos). Es kann zum Beispiel IIR-Entsprechungen zu den Filtern Gauss, Bessel, Butterworth und Inverse Chebyshev entwerfen. Im Allgemeinen können Sie die Reaktion eines Filters auf fast alles einstellen, was die Stärke der Fourier-Methode ist. Andererseits sind die Filter für bestimmte Anforderungen wahrscheinlich nicht optimal.
quelle
AFAIK dies ist ein sogenannter "naiver Filteransatz". Sie können den spektralen Inhalt an bestimmten Punkten im Frequenzraum beeinflussen, tun jedoch nichts Nützliches für den Frequenzinhalt zwischen diesen Punkten. Wenn Sie einen geeigneten FIR-Filter entwerfen, berücksichtigen Sie tatsächlich auch Punkte zwischen diesen Hauptpunkten, und ein solcher Filter ist viel besser als der erste.
Grüße, Bul.
quelle