Fügen FFT-basierte Filtermethoden einem Echtzeitalgorithmus eine intrinsische Latenz hinzu?

7

In einer aktuellen Audioverarbeitungsanwendung arbeite ich ausschließlich im Zeitbereich mit IIR-Filtern. Auf diese Weise kann ich einen Audiopuffer mit nur 3 oder 4 Samples verwenden und garantieren, dass in diesem Frame eine Audioausgabe erfolgt.

Wenn ich zu FIR-basierten Filtern wechseln würde (um die in dieser Frage beschriebene Filterklingelzeit zu reduzieren ), müsste ich wahrscheinlich eine FFT-basierte Überlappungs-Add-Technik verwenden, um die Verarbeitungseffizienz aufrechtzuerhalten. Aus meiner Sicht müsste ich einen FFT-Frame-Puffer mit Samples füllen, bevor ich die Transformationen durchführen kann. Dies würde dem Algorithmus eine intrinsische Latenz hinzufügen, die proportional zur Anzahl der zur Berechnung der FFT verwendeten Abtastwerte ist. Vermisse ich einen Trick?

lernen
quelle

Antworten:

10

Du hast Recht. Die FFT-basierte Verarbeitung erhöht die Latenz Ihres Systems. Es gibt jedoch Möglichkeiten, dies zu optimieren.

Nehmen wir an, Sie haben einen FIR-Filter der Länge "N". Dies kann FFT-basiert unter Verwendung der Standardmethode zum Hinzufügen oder Speichern von Überlappungen implementiert werden, wobei die FFT-Länge 2 * N betragen würde. Die Gesamtsystemlatenz beträgt ebenfalls ungefähr 2 * N: Sie müssen einen Frame mit N Samples akkumulieren und dann, während Sie den nächsten Eingaberahmen akkumulieren, die Berechnung für den aktuellen Frame durchführen. Wenn der zweite Frame akkumuliert wurde (Zeitversatz 2 * N), ist der erste Frame zum Ausgehen bereit. Wenn Sie eine schnelle CPU haben, können Sie dies etwas beschleunigen, indem Sie unterschiedliche Ausrichtungen für Eingabe- und Ausgaberahmen verwenden, aber das ist normalerweise mehr Mühe als es wert ist.

Sie können den Filter auch in K kleinere Blöcke der Länge M aufteilen, dh N = K * M. Die FFT muss nur über M Eingangsabtastungen durchgeführt werden, und die Verzögerung und Akkumulation über die mehreren Filterabschnitte erfolgt im Frequenzbereich. Bill Gardner hat hier einige Varianten davon beschrieben: http://www.cs.ust.hk/mjg_lib/bibs/DPSu/DPSu.Files/Ga95.PDF Es wird oft als "Block Convolver" bezeichnet.

Dies ermöglicht es, die Latenz im Grunde gegen die Effizienz abzuwägen, und bietet ein Kontinuum zwischen der direkten FIR und der Überlappungsadditionsmethode in voller Größe. Ein netter Nebeneffekt des Block Convolver ist, dass die Gesamtfilterlänge nicht eine Potenz von 2 sein muss. Beispielsweise können Sie einen Filter mit 768 Registerkarten als 6 Blöcke mit 128 Blöcken ohne signifikanten Effizienzverlust implementieren.

Hilmar
quelle
Netter Tipp zum Block Convolver! Danke
Learnvst