Filtern von Audio-Streaming

9

Bei etwa 103 Datenpunkten ( ) gibt eine DFT 103 Frequenzwerte zurück. Um dann so etwas wie das Filtern der hohen Frequenzen zu tun, müssen die Hochfrequenzwerte von der DFT auf Null gesetzt und die inverse DFT ausgeführt werden, um 103 Datenpunkte zurückzugewinnen, die das ursprüngliche Signal ohne die hohen Frequenzen darstellen.N=103

Dies ist für mich bei allen 103 Datenpunkten gleichzeitig sinnvoll. Aber was ist mit dem Streaming einer ziemlich großen Audio-WAV-Datei (z. B. )? Wenn man die hohen Frequenzen filtern wollte, dann ist der Ansatz, den ich gerade für die gesamten Daten von Punkten beschrieben habe, logisch sinnvoll. Dies ist jedoch nicht sinnvoll, wenn eine WAV-Datei zur Wiedergabe gestreamt wird. Was wird getan, um eine Streaming-Wiedergabe einer Audiodatei hochfrequent zu filtern?10 5N=105105

user782220
quelle

Antworten:

12

FFT -> Nullungskoeffizienten -> IFFT ist nicht die richtige Art der Filterung - das tatsächlich realisierte Filter weist schlechte Eigenschaften auf.

Die richtige Methode zum Filtern von Signalen besteht darin, die Koeffizienten eines digitalen Filters zu berechnen , ein Prozess, der als Filterdesign bezeichnet wird und für den eine Vielzahl von Softwaretools / Dokumentationen verfügbar ist, und ihn auf Ihre Eingabesequenz anzuwenden. Kurz gesagt besteht dies darin, für jede Probe eine lineare Kombination der vergangenen Eingangsabtastwerte und der vergangenen Ausgangsabtastwerte auszuwerten. Abhängig von den Anforderungen Ihres Filters in Bezug auf Stoppbandunterdrückung / Welligkeit sind möglicherweise nur wenige Koeffizienten erforderlich, wodurch er wesentlich effizienter als FFT ist. Da die einzigen Informationen, die zum Berechnen eines Ausgabe-Samples erforderlich sind, die wenigen früheren Input / Output-Samples sind, ist es kein Problem, sie auf das Streaming von Audio anzuwenden.

Sie müssen FFT nur verwenden, wenn Sie sich für FIR-Filter entscheiden und wenn Ihre Filteranforderungen dazu führen, dass diese eine wahnsinnig große Anzahl von Koeffizienten aufweisen. In diesem speziellen Fall ist es effizient, den Filter über FFT und Overlap-Add auf aufeinanderfolgende Blöcke Ihrer Eingabedaten anzuwenden .

Pichenettes
quelle
8

Der beste Weg, um die Frequenzbereichsfilterung für Signalströme anzuwenden, ist das Hinzufügen von Überlappungen (oder verwandte Geschmacksrichtungen zum Speichern von Überlappungen oder Blockieren von Konvolvern usw.).

Sie nehmen grundsätzlich jeweils einen Frame auf (z. B. 1024 Samples). Null-Pad auf die doppelte Länge (2048), eine FFT durchführen, mit der (ebenfalls null-gepolsterten) Übertragungsfunktion des Filters multiplizieren, eine inverse FFT durchführen. Speichern Sie die letzten 1024 Samples als Überlappung für das nächste Bild, fügen Sie die Überlappung des vorherigen Frames zu den ersten 1024 Samples hinzu und dies ist Ihre Ausgabe. Für jeweils 1024 Input-Samples erhalten Sie 1024 Output-Samples und wiederholen dies einfach für die nächsten Frames, bis der Stream fertig ist.

Das gesamte Geschäft ohne Auffüllen und Überlappen ist erforderlich, da die Multiplikation im Frequenzbereich eine zirkuläre Faltung implementiert und Sie in den meisten Anwendungen wirklich eine lineare Faltung wünschen.

Es gibt Varianten dieser Methoden, die unterschiedliche Fensterfunktionen und Überlappungen verwenden, aber es ist alles das gleiche Prinzip: Schneiden Sie sie in kleine Blöcke und verarbeiten Sie jeweils einen Block.

Hilmar
quelle
Gibt es ein Buch, das die Details dazu behandelt?
user782220
@ user782220: dsp.stackexchange.com/questions/427/…
Martin Thompson