Latar Belakang
Saya merancang sistem yang akan memiliki satu mikrofon kecil dan speaker untuk digunakan dalam pengaturan jenis telepon. Contoh termudah yang bisa saya berikan adalah percakapan Skype di mana Anda menggunakan speaker komputer dan mikrofon desktop.
Saya khawatir tentang audio dari speaker yang diangkat oleh mikrofon dan dikirim kembali ke orang aslinya. Saya pernah mendengar hal ini terjadi setiap saat di awal-awal percakapan VoIP, tetapi hampir tidak mendengarnya lagi.
Asumsi saya adalah bahwa kelompok telah menemukan cara untuk membatalkan gema, tetapi bagaimana mereka melakukannya?
Pendekatan
Pikiran pertama saya adalah dengan hanya mengurangi sinyal yang dikirim ke speaker dari sinyal mikrofon, kecuali dengan metode ini Anda harus khawatir dengan keterlambatan. Saya tidak yakin bagaimana menentukan apakah penundaan itu dengan semacam pra-kalibrasi, yang ingin saya hindari. Ada juga masalah seberapa besar skala sinyal dengan sebelum mengurangkannya.
Saya selanjutnya berpikir tentang melakukan semacam korelasi antara sinyal speaker dan sinyal mic untuk menentukan kemungkinan sinyal mic menjadi gema serta dapat menentukan penundaan yang sebenarnya. Metode ini dapat bekerja dengan baik ketika saya bermain dengan beberapa sinyal yang direkam, tetapi tampaknya ada banyak latensi dalam menghitung korelasi yang berguna dalam sistem waktu nyata. Juga volume yang dapat disesuaikan pada speaker membuatnya sulit untuk menentukan apakah sesuatu benar-benar berkorelasi atau tidak.
Pikiranku berikutnya pasti ada seseorang di internet yang telah melakukan ini sebelumnya dengan sukses, tetapi tidak menemukan contoh yang bagus. Jadi saya datang ke sini untuk melihat metode apa yang dapat digunakan untuk menyelesaikan masalah jenis ini.
Jawaban:
Anda benar. Ada banyak metode pembatalan gema, tetapi tidak ada satupun yang sepele. Metode yang paling umum dan populer adalah pembatalan gema melalui filter adaptif. Dalam satu kalimat, tugas filter adaptif adalah mengubah sinyal yang diputar dengan meminimalkan jumlah informasi yang berasal dari input.
Filter adaptif
Filter adaptif (digital) adalah filter yang mengubah koefisien dan akhirnya menyatu ke beberapa konfigurasi optimal. Mekanisme adaptasi ini berfungsi dengan membandingkan output filter dengan beberapa output yang diinginkan. Di bawah ini adalah diagram dari filter adaptif generik:
Pembatalan gema
Masalah pembatalan gema dapat disajikan dalam hal masalah filter adaptif di mana kami mencoba untuk menghasilkan beberapa output ideal yang diketahui diberi input dengan menemukan filter optimal memenuhi hubungan input-output. Khususnya, ketika Anda mengambil headset dan mengatakan "halo", itu diterima di ujung lain jaringan, diubah oleh respons akustik dari sebuah ruangan (jika diputar ulang dengan keras), dan dimasukkan kembali ke jaringan untuk kembali untuk Anda sebagai gema. Namun, karena sistem tahu seperti apa "halo" awalnya terdengar dan sekarang ia tahu seperti apa "halo" yang ditayangkan dan ditunda, kita dapat mencoba dan menebak seperti apa respons ruangan itu menggunakan filter adaptif. Lalu kita bisa menggunakan estimasi itu, gabungkan semua sinyal yang masuk dengan respons impuls (yang akan memberi kita perkiraan sinyal gema) dan kurangi dari apa yang masuk ke mikrofon orang yang Anda panggil. Diagram di bawah ini menunjukkan pembatalan gema adaptif.
Aplikasi dan tantangan kehidupan nyata
Beberapa hal dapat menimbulkan kesulitan dengan metode pembatalan gema ini. Pertama-tama, seperti yang disebutkan sebelumnya, tidak selalu benar bahwa orang lain diam sementara mereka menerima sinyal "halo" Anda. Dapat ditunjukkan (tetapi berada di luar cakupan balasan ini) bahwa dalam beberapa kasus masih dapat berguna untuk memperkirakan respon impuls sementara ada sejumlah besar input hadir di ujung lain dari garis karena sinyal input dan gema diasumsikan independen secara statistik; oleh karena itu, meminimalkan kesalahan masih akan menjadi prosedur yang valid. Secara umum, sistem yang lebih canggih diperlukan untuk mendeteksi interval waktu yang baik untuk estimasi gema.
Di sisi lain, pikirkan apa yang terjadi ketika Anda mencoba memperkirakan gema ketika sinyal yang diterima kira-kira diam (noise, sebenarnya). Dengan tidak adanya sinyal input yang berarti, algoritma adaptif akan menyimpang dan dengan cepat mulai menghasilkan hasil yang tidak berarti, yang akhirnya memuncak pada derai gema acak. Ini berarti bahwa kita juga perlu mempertimbangkan deteksi ucapan . Pembatalan gema modern lebih mirip dengan gambar di bawah ini, tetapi deskripsi di atas adalah inti dari itu.
Ada banyak literatur tentang filter adaptif dan pembatalan gema di luar sana, serta beberapa pustaka sumber terbuka yang dapat Anda manfaatkan.
sumber
Saya akan mulai dengan memodifikasi algoritma sidik jari akustik seperti yang digunakan oleh Shazam .
Persyaratan Anda mirip dengan Shazam dalam banyak hal (fitur-fiturnya harus selamat dari algoritma kompresi yang dirancang untuk telepon, mereka juga melewati mikrofon berkualitas rendah) sehingga Anda mungkin dapat menggunakan fitur yang sama (daya maksimum lokal dalam ruang waktu / frekuensi) meskipun Anda mungkin ingin meningkatkan resolusi waktu dengan mengorbankan resolusi frekuensi.
Penskalaan seragam hampir pasti tidak akan cukup akurat. Anda perlu melakukan sesuatu seperti memperkirakan respons frekuensi dengan filter FIR kemudian meneruskan sinyal mic Anda (tertunda) melalui filter terbalik sebelum mengurangkannya dari sinyal yang diterima.
sumber