Bir ses sisteminden yankıyı tanımlamak ve kaldırmak için hangi yöntemler kullanılabilir?


14

Arka fon

Bir telefon tipi ayarında kullanmak için tek bir küçük mikrofona ve hoparlörlere sahip bir sistem tasarlıyorum. Verebileceğim en kolay örnek, bilgisayar hoparlörlerinizi ve bir masaüstü mikrofonunu kullandığınız bir Skype görüşmesidir.

Hoparlörlerden gelen sesin mikrofon tarafından alınmasından ve orijinal kişiye geri gönderilmesinden endişeliyim. Bunun VoIP konuşmalarının ilk günlerinde her zaman olduğunu duyuyordum, ama artık pek duymuyordum.

Benim varsayımım, grupların yankıyı iptal etmenin yollarını buldukları, ancak bunu nasıl yapıyorlar?

Yaklaşımlar

İlk düşüncem, hoparlörlere gönderilen sinyali mikrofon sinyalinden çıkarmaktı, ancak bu yöntemle gecikmeyle ilgilenmeniz gerekiyordu. Kaçınmak istediğim bir tür ön kalibrasyon olmadan gecikmenin ne olduğunu nasıl belirleyeceğimi bilmiyorum. Sinyali çıkarmadan önce ne kadar ölçeklendirileceği de vardır.

Daha sonra, mikrofon sinyalinin bir yankı olma olasılığını ve gerçek gecikmeyi belirleyebilmek için hoparlör sinyali ve mikrofon sinyali arasında bir tür korelasyon yapmayı düşündüm. Bu yöntem, bazı kaydedilmiş sinyallerle oynadığımda iyi çalışabildi, ancak korelasyonun gerçek zamanlı sistemde yararlı olması için hesaplamada çok fazla gecikme olduğu görülüyordu. Ayrıca hoparlörlerdeki ayarlanabilir ses, bir şeyin gerçekten ilişkili olup olmadığını belirlemeyi zorlaştırdı.

Bir sonraki düşüncem, internette bunu daha önce başarıyla yapmış, ancak harika örnekler bulamayan biri olması gerektiğini düşündü. Bu nedenle, bu tür bir sorunu çözmek için hangi yöntemlerin kullanılabileceğini görmek için geldim.


1
Akustik Yankı İptali, konuyla ilgili birçok kitap ve onlarca yıllık araştırma makalelerinin bulunduğu geniş bir konu alanıdır. İşte konuyla ilgili bir SO Q&A: stackoverflow.com/questions/3403152/acoustic-echo-cancellation-in-java
hotpaw2

1
@ hotpaw2 Java bağlantısında Akustik yankı iptalinizin neden tıklanabilir olmadığından emin değilim.
Mark Booth

lütfen bana öner, ben bir konuşmada varlığını yankı iptal etmeye çalışıyorum, bir oditoryum tek bir mikrofon girişi. ben adaptif filtre söylediğim gibi deniyorum, çünkü uzak konuşma gibi referans sinyal veriyoruz. ama burada referans sinyali yok. sinyalim orijinal sinyalin yankısıdır ve hoparlör sinyali ile bir mikrofona 500ms diyelim.

Yanıtlar:


15

Haklısın. Birçok yankı iptali yöntemi vardır, ancak bunların hiçbiri tam anlamıyla önemsiz değildir. En genel ve popüler yöntem, uyarlanabilir bir filtre aracılığıyla eko iptali. Bir cümleyle, uyarlanabilir filtrenin işi, girdiden gelen bilgi miktarını en aza indirerek oynatılan sinyali değiştirmektir.

Uyarlanabilir filtreler

Uyarlanabilir (dijital) filtre, katsayılarını değiştiren ve sonunda en uygun yapılandırmaya dönüşen bir filtredir. Bu adaptasyonun mekanizması, filtrenin çıktısını istenen bazı çıktılarla karşılaştırarak çalışır. Aşağıda genel bir uyarlanabilir filtrenin şeması bulunmaktadır:

resim açıklamasını buraya girin

Diyagramdan da görebileceğiniz gibi, sinyali ile çıkış sinyali üretmek için filtrelenir . Daha sonra çıkarma ile ilgili arzu edilen bir sinyal üretmek için hata sinyali . Not bu katsayılarının bir vektördür, bir sayı (dolayısıyla yazmak değil ). Her yinelemeyi değiştirdiği için (her örnek), bu katsayıların mevcut koleksiyonunu ile abone ediyoruz . elde edildikten sonra güncellemek için kullanırızx[n]wnd^[n]d^[n]d[n]e[n]wnw[n]ne[n]wnseçim güncelleme algoritması ile (daha sonra daha fazla). Giriş ve çıkış zaman içinde değişmeyen ve iyi tasarlanmış bir güncelleme algoritması verilen doğrusal bir ilişkiyi , en sonunda en uygun filtreye yakınlaşacak ve yakından takip edecek .wnd^[n]d[n]

Yankı giderme

Yankı iptal etme sorunu, girdi-çıktı ilişkisini tatmin eden en uygun filtreyi bularak girdi verilen bilinen bazı ideal çıktıları üretmeye çalıştığımız uyarlanabilir bir filtre sorunu açısından sunulabilir. Özellikle, kulaklığınızı alıp "merhaba" dediğinizde, bir odanın akustik tepkisi (yüksek sesle çalınıyorsa) ile değiştirilir ve geri dönmek için ağa geri beslenir. yankı olarak sana. Ancak, sistem ilk "merhaba" nın neye benzediğini bildiği ve şimdi yankılanan ve gecikmiş "merhaba" seslerinin nasıl bildiğini bildiğinden, bu oda yanıtının uyarlanabilir bir filtre kullandığını tahmin edebiliriz. O zaman bu tahmini kullanabiliriz, Gelen tüm sinyalleri bu dürtü tepkisiyle (bu bize yankı sinyalinin tahminini verir) dönüştürün ve aradığınız kişinin mikrofonuna girenlerden çıkartın. Aşağıdaki şemada bir uyarlamalı yankı giderici gösterilmektedir.

resim açıklamasını buraya girin

Bu şemada, “merhaba” sinyaliniz . Bir hoparlörden çalındıktan sonra, duvarlardan sekerek ve cihazın mikrofonu tarafından alındıktan sonra yankılanmış bir sinyal olur . Uyarlanabilen filtre alır ve çıkış üreten yakınsama sonra ideal sinyal yankılandı izleme gereken . Bu nedenle, , kimsenin hattın diğer ucunda konuşmadığı göz önüne alındığında, sıfıra gitmelidir, bu genellikle kulaklığı yeni aldığınız ve "Merhaba". Bu her zaman doğru değildir ve bazı ideal olmayan vaka değerlendirmeleri daha sonra tartışılacaktır.x[n]d[n]wnx[n]y[n]d[n]e[n]=d[n]y[n]

Matematiksel olarak, NLMS (normalleştirilmiş en küçük ortalama kare) uyarlanabilir filtre aşağıdaki gibi uygulanır. Her adımda değerini önceki adımın hata sinyalini kullanarak güncelliyoruz . Yani, hadiwn

xn=(x[n],x[n1],,x[nN+1])T

burada içindeki musluk (örnek) sayısıdır . Hangi örneklerinin ters sırada olduğuna dikkat edin . Ve bırakNwnx

wn=(w[0],w[1],,x[N1])T

Daha sonra ve iç çarpımını (her iki sinyal de gerçekse nokta çarpımını) bularak değerini hesaplıyoruz (kıvrım yoluyla) :y[n]=xn=wn

y[n]=xnTwn=xnwn

Şimdi hatayı hesaplayabildiğimize göre, en aza indirmek için normalleştirilmiş bir degrade iniş yöntemi kullanıyoruz . için aşağıdaki güncelleme kuralını alıyoruz :w

wn+1=wn+μxne[n]xnTxn=wn+μxnxnTwnd[n]xnTxn

burada , şekilde adaptasyon adımı boyutudur .0 μ 2μ0μ2

Gerçek hayattaki uygulamalar ve zorluklar

Bu yankı iptali yöntemiyle birçok şey zorluk yaşayabilir. Her şeyden önce, daha önce de belirtildiği gibi, “merhaba” sinyalinizi alırken diğer kişinin sessiz olduğu her zaman doğru değildir. Bazı durumlarda, giriş sinyali ve yankı olduğu için hattın diğer ucunda önemli miktarda girdi varken, dürtü yanıtını tahmin etmenin faydalı olabileceği gösterilebilir (ancak bu cevabın kapsamı dışındadır). istatistiksel olarak bağımsız olduğu varsayılır; bu nedenle, hatayı en aza indirmek geçerli bir prosedür olacaktır. Genel olarak, yankı tahmini için iyi zaman aralıklarını tespit etmek için daha karmaşık bir sisteme ihtiyaç vardır.

Öte yandan, alınan sinyal yaklaşık olarak sessiz olduğunda (aslında gürültü) yankıyı tahmin etmeye çalıştığınızda ne olacağını düşünün. Anlamlı bir giriş sinyalinin yokluğunda, uyarlamalı algoritma ayrılır ve hızlı bir şekilde anlamsız sonuçlar üretmeye başlar ve sonunda rastgele bir eko patteriyle sonuçlanır. Bu, konuşma algılamayı da dikkate almamız gerektiği anlamına gelir . Modern yankı iptalcileri daha çok aşağıdaki şekle benziyor, ancak yukarıdaki açıklama onun jistidir.

resim açıklamasını buraya girin

Hem uyarlanabilir filtreler hem de yankı iptali ile birlikte kullanabileceğiniz bazı açık kaynak kütüphaneleri hakkında çok sayıda literatür var.


2
"uyarlanabilir filtrenin işi sinyale" mi? Yanlışlıkla bir kelime.
Endolit

@endolith Teşekkürler. Bunu düzeltmenin güzel bir yolunu düşünemedim, bu yüzden değiştirdim . Daha ilginç bir şeyle düzenleyebilirsiniz. =)
Phonon

3

Bir çeşit ön kalibrasyon olmadan gecikmenin ne olduğunu nasıl belirleyeceğimi bilmiyorum

Shazam'ın kullandığı gibi akustik bir parmak izi algoritmasını değiştirerek başlardım .

Gereksinimleriniz birçok yönden Shazam'ınkine benzer (özellikler telefon için tasarlanmış bir sıkıştırma algoritmasından sağ kalmalı, aynı zamanda düşük kaliteli mikrofonlardan da geçmelidir), böylece muhtemelen aynı özellikleri (zaman / frekans alanında yerel maksimum güç) kullanabilirsiniz. frekans çözünürlüğü pahasına zaman çözünürlüğünü artırmak isteyebilirsiniz.

Sinyali çıkarmadan önce ne kadar ölçeklendirileceği de vardır.

Düzgün ölçekleme neredeyse kesinlikle yeterince doğru olmayacaktır. Bir FIR filtresiyle frekans cevabına yaklaşmak, sonra (gecikmeli) mikrofon sinyalinizi alınan filtreden çıkarmadan önce ters filtreden geçirmek gibi bir şey yapmanız gerekir.


Shazam parmak izi doğru gecikme yaklaşımı üretemez. Tümü zamana dayalı olmayan ses örneklerini karşılaştırmak için birçok karmaşık özellik çıkarma işlemi kullanır.
Phonon

@Phonon, Shazam şimdi ek algoritmalar kullanıyor olabilir, ancak bağlantılı kağıttaki zamana dayalıdır ve gecikme hakkında iyi bir tahmin verir.
finnw

Belki gönderilen ve alınan spektrogramların çapraz korelasyonu gibi bir şey size gecikmeyi söyleyebilir. Filtreleme ve ilave gürültü etkilerine karşı dayanıklı olmalıdır
16'da endolit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.