Gagal memisahkan sinyal suara oleh FastICA pada perekaman dunia nyata

12

Saya telah menulis sebuah program untuk melakukan FastICA pada file WAV stereo menggunakan kode pada Contoh FastICA Python MDP

Dengan contoh audio saya mendapatkan hasil yang sangat baik.

Kemudian saya mencoba melakukan rekaman dunia nyata menggunakan dua komputer mono mikrofon yang terhubung ke mikrofon stereo di pc saya dengan menghubungkan mic 1 ke saluran L dan mic 2 ke saluran R. Saya menguji dengan memainkan beberapa musik di latar belakang saat saya berbicara di ruangan yang sunyi.

Namun, menjalankan FastICA tidak memisahkan sinyal sama sekali. Mungkinkah kualitas mikrofon terlalu buruk? Apakah saya perlu melakukan apa saja pada file WAV yang direkam (16 bit, PCM yang ditandatangani, 44100Hz) sebelum menjalankan FastICA?

Anda dapat mengunduh rekaman di sini .

Jeremy
sumber

Jawaban:

11

ICA dalam bentuk mentah hanya cocok untuk digunakan dengan campuran pengamatan fase tersinkronisasi. Menggunakan mikrofon seperti yang telah Anda jelaskan akan menyebabkan penundaan fase seperti yang ditunjukkan oleh poster lain. Namun fase delay ini dapat digunakan dengan sangat baik. Algoritma yang paling terkenal yang menangani pemisahan stereo dengan adanya penundaan adalah DUET. Tautan rusak tetapi referensi yang Anda cari ada di sini> http://eleceng.ucd.ie/~srickard/bss.html.

Ini adalah makalah yang harus Anda cari>
A. Jourjine, S. Rickard, dan O. Yilmaz, Pemisahan Buta dari Sinyal Orthogonal Terpisah: Membubuhkan N Sumber dari 2 Campuran, Konferensi IEEE tentang Akustik, Bicara, dan Pemrosesan Sinyal (ICASSP2000), Volume 5, Halaman 2985-2988, Istanbul, Turki, Juni 2000

Dan Barry
sumber
2
Sebuah pertanyaan - jika campuran berasal dari lebih dari satu mic yang terpisah secara spasial ... lalu bagaimana kita bisa memiliki fase sinkronisitas? ... Dalam semua teks saya melihat contoh beberapa mic ini digunakan di mana-mana, tetapi jika fase sinkronisistas Apakah masalah seperti itu mengapa tidak disebutkan? Saya hanya mencoba untuk mengerti di sini, saya baru ke adegan ICA.
Spacey
@Mohammad: Saya menduga fase sinkronisitas hadir di aplikasi lain, dan mereka hanya menggunakan aplikasi audio untuk membuatnya lebih akrab bagi pembaca.
endolith
1
@Mohammad dimungkinkan dengan mikrofon spasi untuk memiliki fase sychronicity untuk satu sumber. Bayangkan sebuah sumber ditangkap dengan 2 mikrofon ditempatkan dengan jarak yang sama di kedua sisi sumber. Panjang jalur dari sumber ke mikrofon adalah sama di setiap kasus dan sinyal akan diterima dalam fase di kedua mikrofon, tetapi hanya untuk sumber itu. Anda dapat menambahkan lebih banyak mikrofon secara seimbang di sepanjang dimensi spasial yang berbeda untuk lebih jauh menolak sinyal yang tidak diinginkan. Beberapa teknik analisis EEG memanfaatkan ini. Anda juga harus mencatat bahwa penundaan fase antara setiap mik akan menjadi fungsi frekuensi (karena panjang gelombang)
Dan Barry
@DanBarry Terima kasih Dan - poin menarik tentang EEG. Biarkan saya hanya mengklarifikasi - Saya tentu saja tahu bahwa jika sensor sama dari sumber kita mendapatkan penundaan yang sama ... :-) Apa yang saya coba dapatkan adalah untuk aplikasi di mana hal-hal seperti itu tidak dapat dikontrol, (speaker dalam ruangan dengan sejumlah sensor), ICA dikatakan bekerja dalam kasus seperti itu - tetapi 99% dari waktu kita tidak akan memiliki fase sinkronisitas - jika ini disebut-sebut sebagai algoritma yang berfungsi dalam kasus ini - namun sensitif terhadap masalah fase tersebut - maka apa yang hilang di sini? ... Terima kasih!
Spacey
1
@endolith ya itu solusi yang bagus dan berhasil! Saya juga memikirkan solusi serupa pada tahun 2003 dan kecewa menemukan sesuatu yang serupa tetapi milik saya cukup berbeda sehingga saya berhasil mematenkannya. Untungnya saya bisa menjadi orang pertama yang mengembangkan algoritma pemisahan sumber waktu-nyata pada tahun 2004. Demo yang asli di sini> audioresearchgroup.com/main.php?page=Demos dan yang baru diperbaiki dapat terlihat beraksi dalam demo video di sini> riffstation.com
Dan Barry
6

Seperti yang saya katakan lebih jauh ke bawah halaman:

ternyata ICA tidak benar-benar berfungsi dengan baik ketika sinyal terjadi pada penundaan yang berbeda di saluran sensor yang berbeda; itu mengasumsikan pencampuran instan (bahwa sinyal dalam sinkronisasi sempurna satu sama lain dalam semua rekaman yang berbeda). Keterlambatan akan terjadi dalam situasi kehidupan nyata dengan pemain dan mikrofon, karena setiap sumber berbeda jarak dari masing-masing mikrofon.

Saya kira penundaan antar saluran ini adalah alasannya. Jika Anda memperhatikan kedua gelombang dengan seksama, Anda mungkin akan melihat bahwa beberapa suara terjadi lebih cepat di satu saluran daripada yang lain, dan sebaliknya.

Untuk membuktikan bahwa itu bukan kualitas mikrofon, Anda dapat mencoba merekam dua sinyal berbeda menggunakan satu mikrofon pada waktu yang berbeda, dan kemudian mencampurnya sehingga beberapa dari setiap sinyal berada di setiap saluran, dan lihat apakah ICA berfungsi dalam kasus itu. .

endolit
sumber
Saya sudah mencoba. Seharusnya masalah keterlambatan seperti yang Anda sarankan. Dengan menggabungkan rekaman terpisah, FastICA menghasilkan hasil yang hampir sempurna. Saya perlu menemukan beberapa cara untuk mengatasi penundaan ....
Jeremy
@ Jeremy: Saya pikir Anda akan membutuhkan algoritma yang berbeda, kalau begitu.
endolith
Anda tahu ada bss algo yang bisa mengatasi keterlambatan?
Jeremy
sebenarnya ketika saya merekam dan bertepuk tangan untuk menghasilkan suara keras yang keras, saya tidak dapat melihat adanya keterlambatan dalam keberanian.
Jeremy
1
@ endolith Anda mungkin benar - beberapa informasi baru - saya memeriksa catatan kaki, dan tampaknya penulis buku saya mengatakan bahwa ia menganggap semua sinyal tidak tertunda relatif satu sama lain. : - / Dengan kata lain matriks pencampuran hanyalah salah satu yang mengubah amplitudo. Eh. Sekarang bahkan lebih membingungkan. :-)
Spacey
0

Ada algoritma lain yang menggunakan statistik urutan kedua: AMUSE.

Di sini Anda dapat menemukan implementasi dalam Python.

Bruno Rodrigues de Oliveira
sumber