Mengubah spektrogram menjadi spektrogram

8

Saya memiliki satu set lagu yang saya ekstrak STFT (Short-Time Fourier Transform) dan menggunakan spektrum magnitudountuk menghitung mel spektrogram dengan menggunakan mel filterbank matrix , jadi . Saya ingin tahu apakah ada metode untuk membalikkan proses ini, yaitu mengkonversi dari mel spektrogram kembali ke spektrogram. Saya melakukan beberapa pengurangan dimensi pada spektogram mel, dan merekonstruksi spektogram mel dari dimensi yang lebih rendah. Sekarang saya ingin membuat kembali sinyal audio dari spektogram mel yang direkonstruksi, jadi saya kira pertama merekonstruksi spektrogram dan kemudian sinyal audio.|S|MX=log(M×|S|)

Masalahnya adalah bahwa matriks bank filter mel bukan matriks kuadrat, karena kita mengurangi no dari frekuensi bins, jadi kebalikan dari tidak dapat digunakan seperti ini: . Jadi apakah ada cara untuk menghasilkan pemetaan invers, seperti beberapa fungsi transfer terbalik yang dapat dikonversi dari X ke S ?MS^=M1exp(X)XS

pengguna76170
sumber
Ini sama sekali tidak mungkin kecuali jika Anda memiliki model sebelumnya yang sangat kuat tentang sumber suara Anda. Tanpa informasi sebelumnya tentang sumber Anda, memang ada banyak spektrum berbeda yang dapat "diciutkan" ke dalam set koefisien frekuensi mel yang sama.
pichenettes
@pichenettes: Lalu bagaimana cara merekonstruksi lagu asli, saya harap Anda mengerti masalahnya. Saya memiliki mel-spectrogram, dan versi yang direkonstruksi dari dimensi yang lebih rendah. Alih-alih melaporkan bahwa "kesalahannya adalah" dalam hal angka numerik, jika ada cara saya bisa "mendengar" mel-spectrogram yang direkonstruksi, maka saya dapat mengatakan bahwa setelah pengurangan dimensi, dengan mempertahankan lebih sedikit komponen dan merekonstruksi -program, ini adalah bagaimana audio terdengar.
user76170
2
Sama sekali tidak mungkin dalam kasus umum. Ini seperti memiliki 5 angka dan bertanya bagaimana "merekonstruksi" angka-angka dari jumlah mereka.
pichenettes
Kami ingin membuat sistem kontrol suara pada matlab tetapi kami tidak tahu bagaimana kami bisa melakukan ini. Kami memiliki data suara tetapi bagaimana kami dapat memasukkan data ini ke Matlab. mis. file (eight1.mel .... eight.mel). Kami ingin pengenalan nomor audio Inggris ini di matlab. 1-Haruskah saya mengonversi file ".mel-waw"? 2-Mana yang bisa saya gunakan kode? Jika Anda membantu kami, kami akan menghargai Terima kasih Salam

Jawaban:

5

Keduanya menggunakan spektogram magnitudo dan bank filter Mel adalah proses yang merugi. Informasi penting yang diperlukan untuk merekonstruksi dokumen asli akan hilang. Dengan demikian, Anda perlu kembali dan menggunakan sampel audio asli untuk melakukan rekonstruksi dengan menentukan filter domain waktu atau frekuensi yang setara dengan pengurangan dimensi Anda.

Anda dapat membuat asumsi tentang informasi yang hilang, tetapi asumsi itu sendiri biasanya terdengar tidak akurat, palsu, dan / atau robot. Atau Anda hanya dapat menggunakan input yang disintesis khusus, di mana asumsi akan benar dengan desain input itu.

hotpaw2
sumber
Apakah ada transformasi balik setara untuk Mel fiter bank? Saya mengerti bahwa ini adalah proses yang merugi. dan kami tidak dapat menemukan karena M tidak persegi. Namun, apakah mungkin untuk melewati langkah itu, dan langsung melakukan PCA pada spektogram magnitudo | M | ? Juga menyimpan informasi fase. Kemudian merekonstruksi | M |, menggabungkan informasi fase, dan mendapatkan kembali audio asli? M1
user76170
1

Seperti yang telah disebutkan, secara umum tidak mungkin untuk melakukan dengan tepat. Seperti jika Anda memiliki representasi 2d adegan 3d, mantan sisi mobil, Anda pada prinsipnya tidak dapat mengatakan apakah itu kartun yang sangat tipis yang menyerupai mobil atau itu adalah foto dari beberapa mobil sungguhan tetapi jika Anda menganggap bahwa tidak ada yang mencoba menipu Anda, Anda dapat membuat beberapa asumsi tentang data nyata, memang begitulah cara kerja model generatif pembelajaran mesin.

Mengenai transformasi terbalik, karena sebagian besar filter bersifat ortogonal (produk dalamnya nol), Anda dapat menggunakan transposisi bank filter sebagai perkiraan transformasi terbalik, namun penskalaan data akan salah karena Anda dapat dengan mudah memverifikasi. Anda dapat menggunakan beberapa statistik tentang STFT asli yang diekstrak dari beberapa dataset besar per saluran (frekuensi) dan menormalkan untuk memiliki skala 'benar'. Ketika membuat spektogram penuh hanya dari sinyal magnitudo, Anda dapat menggunakan algoritma Griffin-Lin untuk melakukan perkiraan. Anda dapat menggunakan sesuatu seperti WaveNet atau Parallel Wavenet untuk melakukannya dengan lebih kuat, karena telah diverifikasi berfungsi dengan baik dengan sinyal suara dan sinyal audio lainnya.MTMx

Marek G.
sumber
1

Saat ini hal termudah adalah menggunakan librosauntuk tugas ini. Ini memiliki fungsi mel_to_stft yang melakukan persis apa yang Anda inginkan.

Seperti yang telah disebutkan orang lain, rekonstruksi ini bersifat lossy dan hanya solusi yang dapat ditemukan. Dalam librosa itu dilakukan dengan menggunakan algoritma Lease Squares Non-negatif .

Suatu hal yang perlu diingat: jika Anda telah mengekstrak energi mel menggunakan algoritma Anda sendiri, Anda harus memastikan bahwa frekuensi warping serupa, jika tidak, Anda akan berakhir dengan audio yang terdengar tidak harmonis (dengan asumsi bahwa nanti Anda ingin mensintesis bentuk gelombang dari STFT). Di librosa ada dua fungsi melengkung, Anda bisa menggunakan yang kedua dengan menentukan htk=True.

jojek
sumber