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?
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.
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 Proben mit einer Rate von beginnt um Wo ist die Bandbreite dann die Funktionen
sind nicht voneinander zu unterscheiden, wenn man nur die zeitweise entnommenen Proben verwendet 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 .
In mathematisch korrekterer Sprache der Funktionsraum mit Bandbreite 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.
Scott Seidmann
Flippiger Typ
Scott Seidmann
Flippiger Typ
EinigeEE
Flippiger Typ
AndrejaKo
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“.