Rekonstruktion des Audiosignals aus dem Spektrogramm


19

Ich habe eine Reihe von Songs, für die ich das Magnitudenspektrogramm mithilfe eines Hamming-Fensters mit 50% Überlappung extrahiert habe. Nach dem Extrahieren des Spektrogramms führte ich eine Dimensionsreduktion mit der Hauptkomponentenanalyse (PCA) durch. Nachdem ich es auf niedrigere Dimensionen reduziert hatte, rekonstruierte ich die Spektrogramme aus niedrigeren Dimensionen. Es würde also jetzt ein Fehler zwischen dem ursprünglichen Spektrogramm und dem rekonstruierten Spektrogramm auftreten. Ich möchte dieses Spektrogramm wieder in das Audiosignal umwandeln und es wiedergeben, damit ich wissen kann, wie das Audiosignal klingt, wenn es aus niedrigeren Dimensionen rekonstruiert wird.

Gibt es irgendeine Funktion in Matlab? kann man ein Betragsspektrogramm in ein Audiosignal umwandeln ??


2
Sie wollen wirklich die STFT und inverse STFT. "Spektrogramm" ist nur ein Name für eine Wärmekarte der Größe der STFT, und die Größe allein reicht nicht aus, um ein Signal zu rekonstruieren. Schauen Sie sich mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/... ?
Endolith

4
Um den Kommentar von @ endolith zu erweitern, fehlen Ihnen beim Übergang von STFT zu Spectorgram die Phaseninformationen, eine wichtige Komponente der Frequenzdomänendarstellung Ihres Signals.
Björn Roche

Wenn ich also das ursprüngliche Audiosignal rekonstruieren möchte, benötige ich sowohl die Amplitude als auch die Phase der STFT? Aber generell, um Audio-Features zu erstellen, ist das | S | Die Amplitude des komplexen Nein wird verwendet und die Phaseninformation wird verworfen. Ich habe PCA mit dem Mel-Spektrogramm durchgeführt, das ich als M berechnet habe , ist die Multiplikationsmatrix der Mel-Filterbank. Also, wie rekonstruiert man das Audiosignal, wenn man , die Annäherung an X nach PCA hat? XX=lOG(M|S|)X^
user76170

@endolith: I versucht , die Verbindung , die Sie gaben mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/... I die Phase und Amplitude verwendet , Informationen sowohl dh (Komplex als Eingabe in die Funktion oben). damit habe ich versucht das signal abzuspielen und es klang abgehackt. Warum passiert das ? Ich habe dann die Norm zwischen dem ursprünglichen Signal und dem durch die inverse STFT-Prozedur erhaltenen Signal wie oben berechnet und es ergab sich ein enormer Wert von 3,46 * 10 ^ 3. Irgendeine Idee, warum das passiert? S
user76170

@ user76170: abgehackt, da die STFT das Signal in Frames aufteilt, die sich manchmal überlappen, und Sie sie auf dieselbe Weise dekonstruieren müssen, wie sie konstruiert wurden. Andernfalls treten bei jedem Frame Diskontinuitäten auf. Haben Sie die STFT- und ISTFT-Funktionen über diesen Link verwendet? Schauen Sie sich die Wellenform des abgehackten Signals an, damit Sie das Problem erkennen können.
Endolith

Antworten:


15

Wenn das Spektrogramm als die Größe von Fourier-Transformationen kurzer Zeit aus überlappenden Fenstern berechnet wurde , enthält das Spektrogramm implizit einige Phaseninformationen.

Die folgenden Iterationen erledigen den Job:

xn+1=istft(Sexp(ichWinkel(stft(xn))))

STFT ISFTS ist das Spektrogramm, ist die vorwärtskurzzeitige Fouriertransformation, ist die Fouriertransformation.stftisft


Ich möchte mich direkt zu @edouard äußern, aber ich habe nicht genug Ansehen. Weiß jemand, was in seiner Antwort ist? Auch wie würde ich initialisieren ? Einfach zufällig? Ist das vollständig rekonstruierte Signal bei Iteration oder nur der Koeffizient von ? Vielen Dank. x 0 x n n n th xichx0xnnnthx
PR

1
@PR Dies ist die imaginäre Einheitenzahl, . -1
Peter K.

3

Es fiel mir schwer, die Antwort von @edouard zu verstehen, die das Richtige tut. Vergleichen Sie mit /signals//a/3410/9031 , mit dem ich meine Rekonstruktion implementiert habe.

Beachten Sie, dass die imaginäre Zahl und das rekonstruierte Signal bei der Iteration . Beginnen Sie damit, dass ein zufälliger Vektor der Länge des Audiosignals ist. Für mich waren ein paar Iterationen ausreichend, um ein Ergebnis zu erzielen, das in Ordnung klang. Der absolute Fehler zum Originalsignal war dennoch recht hoch. Auch das aus dem rekonstruierten Signal erzeugte Spektrogramm I hatte, obwohl es im Allgemeinen die gleichen Strukturen aufwies, ganz unterschiedliche Größen.x n n th x 0ixnnthx0


2

Sie können das rekonstruierte Spektrogramm gegenüber dem ursprünglichen Spektrogramm verwenden, um einen Filter zu entwerfen, dessen Magnitudenantwort ein Spektrogramm in das andere transformiert. Sie können diesen Filter dann auf die ursprünglichen Zeitbereichsdaten oder auf die ursprünglichen FFTs anwenden, um eine schnelle Faltungsfilterung für das Hinzufügen / Speichern von Überlappungen zu erzielen.


@ hotpaw2: Ich habe deine Antwort nicht verstanden, warum sollte ich ein Spektrogramm in das andere konvertieren wollen? Ich möchte das Audiosignal gegeben eine Spektrogramm Matrix rekonstruieren. Was ist die Anforderung an den Entwurf eines Filters, der von einem Spektrogramm in ein anderes transformiert, und an die Überlappungs-Additions- / Save-Fast-Convolution-Filterung? Ich möchte das Audio aus rekonstruieren damit ich sehen kann, wie effektiv PCA ist. Angenommen, ich kann zwei Clips abspielen, einen Original-Audiosignal und einen aus niedrigeren Dimensionen rekonstruierten | S | | S ||S||S||S^|
user76170

2
Eine Spektrogrammmatrix ist verlustbehaftet und kann daher nicht für die Rekonstruktion verwendet werden. Wenn Sie jedoch eine Transformation rückentwickeln können, um das gewünschte Spektrogramm zu erstellen, können Sie es auf die ursprünglichen verlustfreien Zeitbereichsdaten oder möglicherweise auf die ursprüngliche komplexe Ergebnis-FFT anwenden.
hotpaw2

ok, Sie wollen also sagen, dass ich das Audiosignal aus dem komplexen Ergebnis rekonstruieren kann, aber nicht nur anhand der Größe von. Weil ichfür meine weitere verarbeitung und dimesnionalitätsreduktion ist dann wohl keine rekonstruktion des ursprünglichen signals möglich. | S | | S |S|S||S|
user76170

1
@ user76170 Das Wichtigste ist, dass Sie die komplexe STFT benötigen, bevor Sie Ihr Signal rekonstruieren können. Wenn Sie nur die Stärke STFT haben, ist das nicht genug. Es gibt Ausnahmen von dieser Regel, aber im Allgemeinen benötigen Sie die komplexe STFT, nicht nur die Größe.
Tarin Ziyaee

@ hotpaw2: Ist dies möglich, speichere ich die Phaseninformation (Imaginärteil der komplexen FFT) und nehme dann das Betragsspektrum, dann Dimensionsreduktion anwenden und dann aus niedrigeren Dimensionen rekonstruieren, um , die Phaseninformation zu addieren und eine inverse FFT durchzuführen, um das Audiosignal zu erhalten? | S ||S||S^|
user76170

-1

Verwenden Sie den Griffin-Lim-Algorithmus, um das Audiosignal aus dem Spektrogramm zu invertieren, wenn Sie sich keine Gedanken über die Komplexität der Berechnung machen.


Können Sie bitte Ihre Antwort ein wenig erweitern? Vielleicht ein repräsentatives Papier oder einen Link zum Algorithmus und eine kurze Erklärung, wie es für diese Frage relevant ist (?)
A_A

Wenn ich Ihre Frage richtig verstehe, möchten Sie das Audiosignal aus einem Spektrogramm rekonstruieren, ohne die ursprünglichen Phaseninformationen zu verwenden. Der Griffin-Lim-Algorithmus benötigt eine Spektrogrammmatrix als Eingabe und rekonstruiert die Phase iterativ. Sie können das Papier ieeexplore.ieee.org/document/1164317
Jitendra Dhiman

Danke, dass Sie mich informiert haben. Nur um diesen Punkt zu verdeutlichen. Diese Antwort tauchte in meiner Überprüfungswarteschlange als "niedrige Qualität" auf. Zu den Optionen, die ich im Hinblick auf eine "Überprüfung" habe, gehört das Bereitstellen von Kommentaren zur "Verbesserung". Damit diese Antwort mit der Art von Antworten übereinstimmt, die in DSP.SE häufig zu finden sind, müsste ein wenig in den Griffin Lim-Algorithmus eingegangen werden, um zu zeigen, wie wichtig die Frage des OP ist. Alle zukünftigen Änderungen können Sie direkt auf Ihre Antwort anwenden. Es geht nicht darum, "mich" zu befriedigen, sondern darum, aussagekräftige und
aufschlussreiche

Die beste Antwort ist hier (mit Griffin-Lim), falls Sie keine originalen FFT-Informationen haben. timsainb.github.io/…
Artemi Krymski
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.