Verlustfreie FFT auf Audiodaten

Ich habe eine Anwendung, bei der ich einen Audiostream, ähnlich wie bei der Verwendung von Kopfhörern, in meinen Prozessor empfange. Ich möchte FFT und verschiedene DSP-Algorithmen auf dem abgetasteten Audio ausführen und das Audio dann wieder ausspucken, als ob das Gerät nicht da wäre. Im Grunde mache ich DSP in Echtzeit zwischen den Samples, denke ich. Der Prozessor, den ich verwende, ist der MKL26Z128xxx4, montiert auf dem Entwicklungsboard FRDM-KL26Z. Es hat einen einzelnen ARM Cortex M0+ Kern und ist in C/C++ programmiert und kann den THUMB Assembly Befehlssatz verwenden.

Wie würde ich dies tun, ohne das gestreamte Audio zu verlieren?

Mit einem Cortex M4, der multiplizieren und einen Takt addieren kann, hätten Sie es leichter
Danke! Im Moment befindet sich das gerade im Entwicklungsprozess, also denke ich, sagen wir, ich hatte das gerade nicht.
Ich würde antworten, indem ich den STM32F4 Discovery für 15 US-Dollar und fast keine Änderung Ihrer Toolchain empfehle. Sie sagen nicht, welchen DSP Sie machen möchten, aber es wird auf einem DSP einfacher sein als auf einem M0
Hmm okay. Ich möchte hauptsächlich eine FFT durchführen, idealerweise an so vielen Samples wie möglich ohne Verlust der Datenintegrität. Ich denke, ich mache mir mehr Sorgen um das Konzept, dies auf einem Single-Core-Controller zu tun. Multicore ist einfach, da Sie nur Daten erhalten, sie auf einen anderen Kern kopieren und die Ausgabe verzögern, während der andere Kern die Verarbeitungsalgorithmen ausführt
Ist das Audiosignal roh oder vorverarbeitet?
Das Audiosignal ist roh. Rein analoge Signale
@Shannon Strutz I would like to run FFT and various DSP algorithms on the sampled audio and then spit the audio back out as if the device wasn't there.Das ist unmöglich. Das abgetastete Signal muss quantisiert werden, und dies führt zu einem unwiederbringlichen Verlust. Der ADC ist 16-Bit, was für gut klingendes Audio ausreichen sollte, aber er ist alles andere als verlustfrei. Auch der DAC ist 12-Bit, also wird er noch mehr Verzerrung am Ausgang einführen. Der 12-Bit-DAC reicht für gut klingendes Audio aus, ist aber weit entfernt von dem Niveau „als ob das Gerät nicht da wäre“.

Antworten (3)

FFT muss mindestens die doppelte Frequenz Ihres Signals abtasten und sollte keine Verluste verursachen. Verluste werden bei der Komprimierung oder Codierung eingeführt. Ihre Ein- und Ausgänge sollten in der Lage sein, die Frequenz, Amplitude und Frequenzen des Signals, das Sie abtasten, anzupassen.

Ihre größte Herausforderung besteht darin, die DSP-Algorithmen in Echtzeit zu verarbeiten, was davon abhängt, welche Algorithmen Sie verwenden, wie viele und wie Ihr Prozessor mit minimaler Verzögerung damit Schritt halten kann. Wie Sekundenbruchteile, um mit allem anderen synchron zu bleiben (Video, anderes Audio oder Live-Instrumente).

Sie müssen einige Berechnungen darüber anstellen, was Sie benötigen, indem Sie Tests durchführen, bevor Sie herausfinden können, ob Ihre Plattform gut genug ist oder wo Sie überdenken oder Abstriche machen müssen.

Danke! Meinst du, du könntest mir die richtige Richtung für diese Berechnungen weisen? Ich bin mir nicht sicher, welche ich abschließen müsste.
Versuchen Sie zuerst, Ihre Verarbeitung offline zu demonstrieren, indem Sie Matlab oder eine der kostenlosen Alternativen verwenden. Finden Sie dann heraus, wie viel Energie Sie benötigen, um dasselbe in Echtzeit zu tun.

Leider müssen Sie Verluste in Ihrem Signal hinnehmen, wenn Sie versuchen, diese aus den Samples zu rekonstruieren. Wenn Sie nicht bestimmte starke Annahmen über das Audiosignal treffen, hilft das Nyquist-Shannon-Abtasttheorem nicht. Ein allgemeines rohes Audiosignal wird diese Bedingungen nicht erfüllen.

Wenn du nimmst K Proben mit einer Rate von 1 2 B beginnt um 1 / 2 B Wo B ist die Bandbreite dann die Funktionen

Sünde ( 2 π T B ) 2 T B
Und
Sünde ( 2 π T B 2 ( K + 1 ) π ) 2 T B 2 ( K + 1 )

sind nicht voneinander zu unterscheiden, wenn man nur die zeitweise entnommenen Proben verwendet 1 2 B , 2 2 B , . . . , K 2 B da beide Funktionen an diesen Punkten zu Null ausgewertet werden. Die exakte Wiedergabe eines Signals nach dem Nyquist-Shannon-Abtasttheorem setzt eine unendliche Anzahl von Abtastpunkten voraus.

Die Dinge werden etwas schlimmer, sobald FFT involviert ist. FFT reproduziert das Signal als endliche Summe, indem es einen endlichen Satz von Frequenzen verwendet, der durch Ihre Abtastrate bestimmt wird. Wenn Sie ein rohes Audiosignal haben, haben Sie einen möglicherweise unendlichen Satz von Frequenzen, die trotz Begrenzung durch empfangen werden B .

In mathematisch korrekterer Sprache der Funktionsraum mit Bandbreite B ist ein unendlichdimensionaler Vektorraum. Sobald Sie eine Abtastrate festgelegt haben, ist der Vektorraum von Funktionen, die über FFT konstruiert wurden, endlichdimensional und daher können nicht alle Signale exakt über FFT wiederhergestellt werden.

Jede digitale Abtastung beinhaltet Tiefpassfilterung (und/oder potenzielles Aliasing) und Quantisierung. Jeder ADC oder DAC im Pfad fügt eine Verzögerung hinzu, sowohl aufgrund von Pufferung, potenzieller Verarbeitung (Rauschfilterung oder sukzessiver Approximation) als auch physikalischer und elektrischer Zeitkonstanten. Daher müssen Sie einige endliche Schwellenwerte für Bandbreite, Grundrauschen und Verzögerung angeben, die Ihren "No Loss"-Kriterien entsprechen, oder Sie haben eine Unmöglichkeit, einen beliebigen Prozessorchip zu verwenden.

Ob Sie zur Analyse eine FFT durchführen oder nicht, spielt keine Rolle, wenn Sie Ihre Daten direkt an den Ausgang streamen und an die FFT senden.

Eine FFT ist ein blockbasierter Prozess, daher wird sie nicht "zwischen Samples" durchgeführt, sondern an ganzen Blöcken, Puffern oder Arrays von Samples, wodurch jede FFT-Analyse verzögert wird (z. B. warten, bis ein ausreichend großer Puffer vor dem Start gefüllt ist). .

Eine FFT der Länge N muss mit Prozessorarithmetik (Akkumulationsregister) durchgeführt werden, die mindestens log2(N) Bits größer ist als die Bitgröße Ihrer Samples, oder die FFT selbst führt (zusätzliche) Abschneide-, Rundungs- oder Clipping-Fehler ein.