Rekonstrukcja sygnału audio z Spectrogram

19

Mam zestaw piosenek, dla których wyodrębniłem spektrogram wielkości za pomocą okna Hamminga z 50% nakładką. Po wyodrębnieniu spektrogramu dokonałem pewnej redukcji wymiarowości za pomocą analizy głównych składników (PCA). Po zmniejszeniu go do niższej wymiarowości zrekonstruowałem spektrogramy z niższych wymiarów. Zatem teraz wystąpiłby błąd między oryginalnym spektrogramem a zrekonstruowanym spektrogramem. Chciałbym przekonwertować ten spektrogram z powrotem na sygnał audio i odtworzyć go, aby móc dowiedzieć się, jak po odtworzeniu z niższych wymiarów, jak brzmi dźwięk.

Czy jest jakaś funkcja dostępna w powiedzmy Matlab. przekonwertować spektrogram wielkości na sygnał audio?

użytkownik76170
źródło
2
Naprawdę chcesz STFT i odwrotnego STFT. „Spektrogram” to tylko nazwa mapy cieplnej wielkości STFT, a sama wielkość nie wystarcza do odtworzenia sygnału. Spójrz na mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/… ?
endolith
4
Aby rozwinąć komentarz @ endolith, podczas przejścia ze STFT do spectorgram brakuje informacji o fazie, istotnego elementu reprezentacji sygnału częstotliwości w dziedzinie częstotliwości.
Bjorn Roche,
to znaczy, że jeśli chcę zrekonstruować oryginalny sygnał audio, potrzebuję zarówno amplitudy, jak i fazy STFT? Ale ogólnie, aby zbudować funkcje audio, | S | używana jest amplituda kompleksu no, a informacja o fazie jest odrzucana. I przeprowadzono PCA na spektrogramie mel której obliczana jako M jest Mel filtrów mnożenie macierzy. tak jak można odtworzyć sygnał audio podany X , zbliżanie do X dostał po PCA? X=log(M|S|)X^
user76170,
@endolith: Próbowałem użyć linku, który podałeś mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/... Użyłem zarówno informacji o fazie, jak i amplitudzie (tj. kompleks jako dane wejściowe do powyższej funkcji). używając tego spróbowałem odtworzyć sygnał i brzmiał on niepewnie. Dlaczego to się dzieje ? Następnie obliczyłem normę między sygnałem oryginalnym a sygnałem uzyskanym z odwrotnej procedury STFT, jak wyżej, i wykazałem ogromną wartość 3,46 * 10 ^ 3. Każdy pomysł, dlaczego tak się dzieje? S
user76170,
@ user76170: niepewny jest, ponieważ STFT dzieli sygnał na klatki, czasami nakładając się, i musisz zdekonstruować je w taki sam sposób, w jaki zostały zbudowane, lub będą nieciągłości na każdym z nich. Czy korzystałeś z funkcji STFT i ISTFT z tego łącza? Spójrz na przebieg wzburzonego sygnału, aby zobaczyć, na czym polega problem.
endolith,

Odpowiedzi:

15

Jeśli spektrogram został obliczony jako wielkość krótkotrwałych transformacji czterokrotnych z nakładających się okien, wówczas spektrogram zawiera domyślnie pewne informacje dotyczące fazy.

Następujące iteracje wykonują zadanie:

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

Sstftisft

Edouard
źródło
ix0xnnnthx
1
1
3

Trudno mi było zrozumieć odpowiedź @edouard, która robi właściwą rzecz. Porównaj z /signals//a/3410/9031 , którego użyłem do realizacji mojej rekonstrukcji.

ixnnthx0

PR
źródło
2

Możesz użyć zrekonstruowanego spektrogramu w porównaniu do oryginalnego spektrogramu, aby zaprojektować filtr, którego odpowiedź wielkościowa przekształca jeden spektrogram w drugi. Następnie możesz zastosować ten filtr do oryginalnych danych w dziedzinie czasu lub do oryginalnych FFT w celu nakładania się dodawania / zapisywania szybkiego filtrowania splotowego.

hotpaw2
źródło
|S||S||S^|
2
Macierz spektrogramu jest stratna, więc nie można jej użyć do rekonstrukcji. Ale jeśli potrafisz odtworzyć transformację, aby uzyskać pożądany spektrogram, możesz zastosować ją do oryginalnych danych w dziedzinie czasu bez strat lub ewentualnie do oryginalnego złożonego wyniku FFT.
hotpaw2
S|S||S|
1
@ user76170 Krótko mówiąc, potrzebujesz złożonego STFT, zanim będziesz mógł zrekonstruować swój sygnał. Jeśli masz po prostu wielkość STFT, to nie wystarczy. Istnieją wyjątki od tej reguły, ale generalnie potrzebujesz złożonego STFT, nie tylko wielkości.
Tarin Ziyaee
|S||S^|
-1

Użyj algorytmu Griffin-Lim, aby odwrócić sygnał audio ze spektrogramu, jeśli nie martwisz się złożonością obliczeń.

Jitendra Dhiman
źródło
Czy możesz trochę rozszerzyć swoją odpowiedź? Być może dodanie reprezentatywnej pracy lub linku do algorytmu i krótkie wyjaśnienie, w jaki sposób jest ono istotne dla tego pytania (?)
A_A
Jeśli dobrze rozumiem twoje pytanie, w skrócie, chcesz zrekonstruować sygnał audio ze spektrogramu bez korzystania z oryginalnej informacji o fazie. Algorytm Griffin-Lim wymaga wejściowej macierzy spektrogramu i iteracyjnej rekonstrukcji fazy. Możesz odnieść się do artykułu ieeexplore.ieee.org/document/1164317
Jitendra Dhiman
Dziękuję za informację. Aby wyjaśnić ten punkt. Ta odpowiedź pojawiła się w mojej kolejce recenzji jako „niska jakość”. Opcje, które mam pod względem „przeglądu”, obejmują komentarze do „ulepszenia”. Aby ta odpowiedź była zgodna z odpowiedziami często spotykanymi w DSP.SE, musiałaby nieco przejść do algorytmu Griffin Lim, aby pokazać, w jaki sposób ma on znaczenie dla pytania OP. Wszelkie przyszłe zmiany możesz zastosować bezpośrednio do swojej odpowiedzi. Chodzi o to, aby nie zadowolić w szczególności „mnie”, ale mieć sensowny zestaw pouczających odpowiedzi na pytanie
A_A,
Najlepsza odpowiedź jest tutaj (za pomocą Griffin-Lim) na wypadek, gdybyś nie posiadał oryginalnych informacji o FFT. timsainb.github.io/…
Artemi Krymski