Metode apa yang dapat digunakan untuk mengidentifikasi dan menghapus gema dari sistem audio?

14

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.

Kellenjb
sumber
1
Pembatalan Echo Akustik adalah bidang studi besar dengan banyak buku dan beberapa dekade makalah penelitian tentang topik ini. Inilah satu T&J SO pada topik: stackoverflow.com/questions/3403152/acoustic-echo-cancellation-in-java
hotpaw2
1
@ hotpaw2 Tidak yakin mengapa pembatalan gema Akustik Anda di tautan Java tidak dapat diklik.
Mark Booth
tolong sarankan saya, saya mencoba untuk membatalkan gema yang ada dalam pidato, masukan ke mikrofon tunggal di auditorium. Saya mencobanya seperti yang Anda sebutkan filter adaptif, untuk itu Anda memberikan sinyal referensi sejauh bicara. tetapi saya tidak punya sinyal referensi di sini. sinyal saya adalah gema dari sinyal asli yang menerima katakanlah 500 ms dengan sinyal speaker ke mikrofon.

Jawaban:

15

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:

masukkan deskripsi gambar di sini

x[n]wnd^[n]d^[n]d[n]e[n]wnw[n]ne[n]wnwnd^[n]d[n]

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.

masukkan deskripsi gambar di sini

x[n]d[n]wnx[n]y[n]d[n]e[n]=d[n]-y[n]

wn

xn=(x[n],x[n-1],...,x[n-N+1])T

Nwnx

wn=(w[0],w[1],...,x[N-1])T

y[n]=xn=wn

y[n]=xnTwn=xnwn

w

wn+1=wn+μxne[n]xnTxn=wn+μxnxnTwn-d[n]xnTxn

μ0μ2

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.

masukkan deskripsi gambar di sini

Ada banyak literatur tentang filter adaptif dan pembatalan gema di luar sana, serta beberapa pustaka sumber terbuka yang dapat Anda manfaatkan.

Phonon
sumber
2
"Pekerjaan filter adaptif adalah ke sinyal"? Anda tidak sengaja berbicara.
endolith
@endolith Terima kasih. Saya tidak bisa memikirkan cara yang bagus untuk memperbaikinya, jadi saya menggunakan alter . Anda dapat mengeditnya dengan sesuatu yang lebih menarik. =)
Telepon
3

Saya tidak yakin bagaimana menentukan apakah penundaan itu dengan semacam pra-kalibrasi

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.

Ada juga masalah seberapa besar skala sinyal dengan sebelum mengurangkannya.

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.

menemukan
sumber
Sidik jari Shazam tidak dapat menghasilkan perkiraan keterlambatan yang akurat. Ini menggunakan banyak proses ekstraksi fitur kompleks untuk membandingkan sampel audio, tidak semuanya berbasis waktu.
Telepon
@Phonon, Shazam mungkin menggunakan algoritma tambahan sekarang, tetapi yang ada di kertas yang tertaut berbasis waktu dan memberikan perkiraan yang baik tentang penundaan tersebut.
finnw
Mungkin sesuatu seperti korelasi silang dari spektogram yang dikirim dan diterima akan memberi tahu Anda penundaannya. Harus tahan terhadap efek penyaringan dan menambahkan noise
endolith