Ingat bahwa kolom dapat dianggap sebagai vektor "basis" (atau elemen kamus - blok penyusun sinyal apa pun) dan elemen di setiap kolom dalam memberikan bobot yang sesuai (yang bervariasi dari waktu ke waktu). Ini memungkinkan kita untuk menguraikan spektrogram berdasarkan tidak hanya komponen frekuensi tetapi juga informasi awal temporal; jadi itu lebih dari apa yang bandpass filter atau filter sisir sederhana akan lakukan.WH
Factisasi matriks non-negatif dari spektogram tidak akan secara ajaib memisahkan piano dan penyanyi bernyanyi dalam nada yang sama. Namun itu memberikan perkiraan yang berguna dalam hal jumlah vektor basis tertimbang yang (mudah-mudahan) dapat dibagi menjadi kontribusi dari sumber yang berbeda karena tidak mungkin bagi setiap sumber untuk menempati persis tempat frekuensi yang sama pada saat yang bersamaan.
Lebih konkret, mari menjadi , menjadi dan menjadi . Jadi kami memiliki tempat frekuensi , sampel waktu dan komponen teruraiJika adalah kolom dari dan adalah baris dari kita dapat menulis:
VM×NWM×KHK×NMNKwiWhiH
V≈∑i=1KwihTi.
Jika kita tahu hanya ada dua sumber dalam rekaman (piano dan penyanyi) kita dapat mencoba untuk membagi kontribusi mereka dengan memilih himpunan bagian dari kolom dan subset yang sesuai dari baris . Jadi, jika maka bagian yang disumbangkan oleh piano dapat dilambangkan dengan:
dan bagian yang dikontribusikan oleh penyanyi adalah:
WHS⊂{1,…,K}Vpiano=∑i∈SwihTi
Vsinger=∑i∈{1,…,K}∖SwihTi
Pada kenyataannya, kita mungkin akan berakhir dengan dekomposisi yang tidak pernah mencapai pemisahan ini dengan tepat. Artinya, akan ada yang memiliki kontribusi dari penyanyi dan piano sehingga sulit untuk memisahkan keduanya.wi
Berikut ini adalah notebook Python yang menunjukkan prosedur ini untuk campuran drum dan gitar: http://nbviewer.jupyter.org/gist/ingle/93de575aac6a4c7fe9ee5f3d5adab98f (Atau jika itu tidak berhasil, di sini: https://gist.github.com / ingle / 93de575aac6a4c7fe9ee5f3d5adab98f )
Perhatikan bahwa algoritma NMF hanya menghasilkan dekomposisi. Itu tidak dapat memilih himpunan bagian dari sesuai dengan masing-masing sumber. Dalam contoh Python, ada langkah manual untuk mencari tahu yang mana paling mirip dengan gitar v / s drum. Orang mungkin dapat mengotomatiskan langkah ini dengan mencatat bahwa vektor drum memiliki lebih banyak barang dalam frekuensi yang lebih rendah.{wi}wiwi
Menganalisis setiap kolom (bingkai) spektogram menggunakan bank filter bandpass adalah cara lain untuk menguraikan spektogram tersebut. Namun, perhatikan bahwa dekomposisi yang dihasilkan oleh NMF adalah peringkat rendah yaitu pelit. Dalam contoh Python, itu jauh lebih mudah untuk secara manual memilih himpunan bagian dari 16 kolom sesuai dengan dua sumber. Dengan setumpuk bandpass filter, kami harus memutar lebih banyak tombol (# filter, lokasi pass-band untuk setiap frame) dan jumlah kombinasi parameter dapat tumbuh dengan sangat cepat.W
Referensi:
https://ccrma.stanford.edu/~njb/teaching/sstutorial/part2.pdf
http://musicinformationretrieval.com/nmf.html