Rekonstruksi sinyal audio dari Spectrogram

19

Saya memiliki satu set lagu yang saya ekstrak spektogram besarnya menggunakan Jendela Hamming dengan tumpang tindih 50%. Setelah mengekstraksi spektrogram, saya melakukan pengurangan dimensionalitas menggunakan Principal Components Analysis (PCA). Setelah menguranginya menjadi dimensi yang lebih rendah, saya merekonstruksi spektrogram dari dimensi yang lebih rendah. Jadi sekarang, akan ada beberapa kesalahan antara spektrogram asli dan spektrogram yang direkonstruksi. Saya ingin mengubah spektrogram ini kembali ke sinyal audio dan memutarnya, sehingga saya dapat mengetahui kapan direkonstruksi dari dimensi yang lebih rendah, bagaimana suara audionya.

Apakah ada fungsi yang tersedia di katakanlah Matlab. untuk mengubah Spectrogram besarnya menjadi sinyal audio ??

pengguna76170
sumber
2
Anda benar-benar menginginkan STFT dan STFT terbalik. "Spectrogram" hanyalah nama untuk peta panas dari besarnya STFT, dan besarnya saja tidak cukup untuk merekonstruksi sinyal. Lihatlah mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/… ?
endolith
4
Untuk memperluas komentar @ endolith, apa yang Anda lewatkan ketika Anda beralih dari STFT ke spectorgram adalah informasi fase, komponen vital dari representasi domain frekuensi dari sinyal Anda.
Bjorn Roche
jadi itu berarti jika saya ingin merekonstruksi sinyal audio asli, saya memerlukan kedua amplitudo serta fase STFT? Namun secara umum untuk membangun fitur audio, | S | amplitudo no kompleks adalah apa yang digunakan dan informasi fase dibuang. Saya telah melakukan PCA pada mel spektrogram yang saya hitung sebagai M, adalah mel filterbank yang mengalikan matriks. jadi bagaimana Anda merekonstruksi sinyal audio yang diberikan , perkiraan X didapat setelah PCA? XX=log(M|S|)X^
user76170
@endolith: Saya mencoba menggunakan tautan yang Anda berikan mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/... Saya menggunakan informasi fase dan amplitudo yaitu (kompleks sebagai input ke fungsi di atas). menggunakan ini saya mencoba memutar sinyal dan kedengarannya berombak. Mengapa ini terjadi? Saya kemudian menghitung norma antara sinyal asli dan yang didapat dari prosedur STFT terbalik seperti di atas dan itu menunjukkan nilai besar 3,46 * 10 ^ 3. Adakah yang tahu mengapa ini terjadi ?? S
user76170
@ user76170: choppy adalah karena STFT memotong sinyal menjadi bingkai, kadang-kadang tumpang tindih, dan Anda harus mendekonstruksi mereka dengan cara yang sama mereka dibangun atau akan ada diskontinuitas di masing-masing. Apakah Anda menggunakan fungsi STFT dan ISTFT dari tautan itu? Lihatlah bentuk gelombang dari sinyal choppy sehingga Anda dapat melihat apa masalahnya.
endolith

Jawaban:

15

Jika spektogram dihitung sebagai besarnya transformasi fourrier waktu singkat dari jendela yang tumpang tindih , maka spektrogram tersebut berisi beberapa informasi fase secara implisit.

Iterasi berikut melakukan pekerjaan:

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

STFT isftS adalah spektrogram, adalah transformasi Fourier-maju waktu singkat, adalah invers-short-time transformasi Fourier.stftisft

Edouard
sumber
Saya ingin berkomentar langsung di @edouard, tetapi saya tidak memiliki reputasi yang cukup. Adakah yang tahu apa dalam jawabannya? Juga bagaimana saya menginisialisasi ? Hanya acak? Apakah sinyal direkonstruksi lengkap pada iterasi atau hanya koefisien dari ? Terima kasih. x 0 x n n n th xix0xnnnthx
PR
1
@PR Ini adalah nomor imajiner unit, . 1
Peter K.
3

Saya mengalami sedikit kesulitan untuk memahami jawaban @edouard, yang melakukan hal yang benar. Bandingkan dengan /signals//a/3410/9031 , yang saya gunakan untuk mengimplementasikan rekonstruksi saya.

Perhatikan bahwa adalah angka imajiner, dan adalah sinyal yang direkonstruksi pada iterasi . Mulai dengan menjadi vektor acak dengan panjang sinyal audio. Bagi saya beberapa iterasi sudah cukup untuk mendapatkan hasil yang terdengar baik-baik saja. Namun kesalahan absolut terhadap sinyal asli cukup tinggi. Juga spektogram yang dihasilkan I dihasilkan dari sinyal yang direkonstruksi, walaupun menunjukkan struktur yang sama secara umum, memiliki magnitudo yang sangat berbeda.x n n th x 0ixnnthx0

PR
sumber
2

Anda dapat menggunakan spektogram yang direkonstruksi versus spektrogram asli untuk mendesain filter yang respons magnitude-nya mengubah satu spektogram ke yang lainnya. Anda kemudian dapat menerapkan filter ini ke data domain waktu asli, atau ke FFT asli untuk tumpang tindih menambah / menyimpan penyaringan konvolusi cepat.

hotpaw2
sumber
@ hotpaw2: Saya tidak mengerti respons Anda, mengapa saya ingin mengubah satu spektogram menjadi yang lain? Saya ingin merekonstruksi sinyal audio yang diberi matriks spektrogram. Apa persyaratan mendesain filter yang berubah dari satu spektogram ke spektogram lainnya, dan tumpang tindih menambah / menyimpan penyaringan konvolusi cepat? Saya ingin merekonstruksi audio darisehingga saya bisa melihat seberapa efektif PCA. Jadi katakan saya dapat memutar dua klip, satu sinyal audio asli, dan yang lainnya direkonstruksi dari dimensi yang lebih rendah| S | | S ||S||S||S^|
user76170
2
Matriks spektrogram bersifat lossy, jadi tidak dapat digunakan untuk rekonstruksi. Tetapi jika Anda dapat merekayasa balik transformasi untuk menghasilkan spektogram yang Anda inginkan, Anda dapat menerapkannya pada data domain waktu non-lossy asli atau mungkin ke FFT hasil asli yang kompleks.
hotpaw2
ok jadi apa yang ingin Anda katakan adalah bahwa saya dapat merekonstruksi sinyal audio dari hasil kompleks tetapi tidak hanya menggunakan besarnya. Karena saya telah menggunakanuntuk pemrosesan lebih lanjut dan pengurangan dimesnionalitas, maka rekonstruksi sinyal asli tidak mungkin dilakukan, saya kira. | S | | S |S|S||S|
user76170
1
@ user76170 Panjang dan pendeknya adalah Anda memerlukan STFT yang rumit sebelum Anda dapat merekonstruksi sinyal Anda. Jika Anda hanya memiliki STFT besarnya, itu tidak cukup. Ada pengecualian untuk aturan ini, tetapi secara umum, Anda membutuhkan STFT yang kompleks, bukan hanya besarnya.
Tarin Ziyaee
|S||S^|
-1

Gunakan algoritma Griffin-Lim untuk membalikkan sinyal audio dari spektrogram, jika Anda tidak khawatir tentang kompleksitas komputasi.

Jitendra Dhiman
sumber
Bisakah Anda memperluas sedikit jawaban Anda? Mungkin menambahkan makalah representatif atau tautan ke algoritme dan penjelasan singkat tentang bagaimana relevansinya dengan pertanyaan ini (?)
A_A
Jika saya memahami pertanyaan Anda dengan benar, secara singkat, Anda ingin merekonstruksi sinyal audio dari spektrogram tanpa menggunakan informasi fase asli. Algoritma Griffin-Lim membutuhkan matriks spektrogram sebagai fase input dan rekonstruksi berulang. Anda dapat merujuk makalah ieeexplore.ieee.org/document/1164317
Jitendra Dhiman
Terima kasih telah memberitahu saya. Hanya untuk memperjelas hal ini. Respons ini muncul di antrian ulasan saya sebagai "kualitas rendah". Opsi yang saya miliki dalam hal "tinjauan" termasuk memberikan komentar untuk "peningkatan". Agar jawaban ini sejalan dengan jenis jawaban yang biasa dijumpai di DSP.SE, itu harus masuk sedikit ke dalam algoritma Griffin Lim untuk menunjukkan bagaimana itu relevan dengan apa yang diminta OP. Setiap pengeditan di masa mendatang, Anda dapat menerapkan langsung ke jawaban Anda. Maksud dari ini bukan untuk memuaskan "aku" secara khusus, itu adalah untuk memiliki satu set jawaban menerangi yang bermakna untuk sebuah pertanyaan
A_A
Jawaban terbaik ada di sini (menggunakan Griffin-Lim) jika Anda tidak memiliki informasi FFT asli. timsainb.github.io/…
Artemi Krymski