Jakie metody można zastosować do identyfikacji i usunięcia echa z systemu audio?


14

tło

Projektuję system, który będzie miał pojedynczy mały mikrofon i głośniki do użytku w ustawieniach typu telefonu. Najłatwiejszym przykładem, jaki mogę podać, jest rozmowa przez Skype, w której używasz głośników komputera i mikrofonu stacjonarnego.

Martwię się, że dźwięk z głośników zostanie odebrany przez mikrofon i odesłany z powrotem do pierwotnej osoby. Słyszałem, że zdarza się to cały czas na początku rozmów VoIP, ale już prawie go nie słyszę.

Zakładam, że grupy wymyśliły sposoby na usunięcie echa, ale jak to robią?

Podejścia

Moją pierwszą myślą było po prostu odjęcie sygnału wysyłanego do głośników od sygnału mikrofonu, z wyjątkiem tej metody, która wymaga zwrócenia uwagi na opóźnienie. Nie jestem pewien, jak określić opóźnienie bez jakiejś wstępnej kalibracji, której chciałbym uniknąć. Istnieje również kwestia tego, o ile przeskalować sygnał przed odjęciem.

Następnie pomyślałem o zrobieniu pewnego rodzaju korelacji między sygnałem głośnika a sygnałem mikrofonu, aby określić prawdopodobieństwo, że sygnał mikrofonu jest echem, a także być w stanie określić rzeczywiste opóźnienie. Ta metoda działała dobrze, kiedy bawiłem się niektórymi nagranymi sygnałami, ale wydawało się, że opóźnienie w obliczaniu korelacji było przydatne w systemie czasu rzeczywistego. Również regulowana głośność głośników utrudniała ustalenie, czy coś było rzeczywiście skorelowane, czy nie.

Moja kolejna myśl, że musi być ktoś w Internecie, który zrobił to wcześniej z sukcesem, ale nie znalazł żadnych wspaniałych przykładów. Przyszedłem tutaj, aby zobaczyć, jakie metody można zastosować, aby rozwiązać ten problem.


1
Acoustic Echo Cancellation to duży obszar tematyczny z wieloma książkami i dziesięcioleciami prac naukowych na ten temat. Oto jedno SO pytania i odpowiedzi na ten temat: stackoverflow.com/questions/3403152/acoustic-echo-cancellation-in-java
hotpaw2

1
@ hotpaw2 Nie wiem, dlaczego anulowanie echa akustycznego w łączu Java nie było możliwe do kliknięcia.
Mark Booth

proszę zasugeruj mi, staram się anulować echo, które jest obecnością w mowie, wejściem do pojedynczego mikrofonu na widowni. Próbuję tego, jak wspomniałeś o filtrze adaptacyjnym, ponieważ dajesz sygnał odniesienia do rozmowy na drugim końcu. ale nie mam tutaj sygnału odniesienia. mój sygnał jest echem oryginalnego sygnału, który odbiera, powiedzmy 500ms z sygnałem głośnika do mikrofonu.

Odpowiedzi:


15

Masz rację. Istnieje wiele metod eliminacji echa, ale żadna z nich nie jest trywialna. Najbardziej ogólną i popularną metodą jest eliminacja echa za pomocą filtra adaptacyjnego. W jednym zdaniu zadaniem filtra adaptacyjnego jest zmiana sygnału odtwarzanego przez zminimalizowanie ilości informacji pochodzących z wejścia.

Filtry adaptacyjne

Filtr adaptacyjny (cyfrowy) to filtr, który zmienia swoje współczynniki i ostatecznie zbiega do optymalnej konfiguracji. Mechanizm tej adaptacji działa poprzez porównanie wydajności filtra z pewną pożądaną wydajnością. Poniżej znajduje się schemat ogólnego filtru adaptacyjnego:

wprowadź opis zdjęcia tutaj

x[n]wnre^[n]re^[n]re[n]mi[n]wnw[n]nmi[n]wnwnre^[n]re[n]

Redukcja szumów

Problem eliminacji echa można przedstawić w postaci problemu z adaptacyjnym filtrem, w którym staramy się uzyskać pewną znaną idealną moc wyjściową na podstawie danych wejściowych poprzez znalezienie optymalnego filtra spełniającego relację między wejściami i wyjściami. W szczególności, gdy złapiesz zestaw słuchawkowy i powiesz „cześć”, zostanie odebrany na drugim końcu sieci, zmieniony przez reakcję akustyczną pokoju (jeśli jest odtwarzany na głos) i przekazany z powrotem do sieci, aby wrócić do ciebie jako echo. Ponieważ jednak system wie, jak brzmiało początkowe „cześć”, a teraz wie, jak brzmi pogłos i opóźnione „cześć”, możemy spróbować zgadnąć, jak ta reakcja pokojowa używa filtra adaptacyjnego. Następnie możemy użyć tej prognozy, zbierz wszystkie przychodzące sygnały z tą odpowiedzią impulsową (co dałoby nam oszacowanie sygnału echa) i odejmij go od tego, co trafia do mikrofonu osoby, do której dzwonisz. Poniższy schemat pokazuje adaptacyjny tłumik echa.

wprowadź opis zdjęcia tutaj

x[n]re[n]wnx[n]y[n]re[n]mi[n]=re[n]-y[n]

wn

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

N.wnx

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

y[n]=xn i =wn:

y[n]=xnT.wn=xnwn

Teraz, gdy możemy obliczyć błąd, do zminimalizowania go używamy znormalizowanej metody spadku gradientu . Otrzymujemy następującą regułę aktualizacji dlaw:

wn+1=wn+μxnmi[n]xnT.xn=wn+μxnxnT.wn-re[n]xnT.xn

gdzie μ to rozmiar kroku adaptacji taki, że 0μ2).

Rzeczywiste zastosowania i wyzwania

Z tą metodą eliminacji echa może wynikać kilka problemów. Po pierwsze, jak wspomniano wcześniej, nie zawsze jest prawdą, że druga osoba milczy, gdy odbiera sygnał „cześć”. Można wykazać (ale wykracza to poza zakres tej odpowiedzi), że w niektórych przypadkach nadal przydatne może być oszacowanie odpowiedzi impulsowej, podczas gdy na drugim końcu linii znajduje się znaczna ilość sygnału wejściowego, ponieważ sygnał wejściowy i echo są zakłada się, że jest statystycznie niezależny; dlatego minimalizacja błędu nadal będzie prawidłową procedurą. Zasadniczo potrzebny jest bardziej wyrafinowany system do wykrywania dobrych odstępów czasu w celu oszacowania echa.

Z drugiej strony pomyśl o tym, co dzieje się, gdy próbujesz oszacować echo, gdy odbierany sygnał to w przybliżeniu cisza (właściwie szum). W przypadku braku znaczącego sygnału wejściowego algorytm adaptacyjny rozchodzi się i szybko zaczyna wytwarzać bezsensowne wyniki, których kulminacją jest ostatecznie przypadkowe tupot echa. Oznacza to, że musimy również wziąć pod uwagę wykrywanie mowy . Współczesne tłumiki echa wyglądają bardziej jak na poniższym rysunku, ale powyższy opis jest jego najjaśniejszy.

wprowadź opis zdjęcia tutaj

Istnieje mnóstwo literatury na temat filtrów adaptacyjnych i eliminacji echa, a także niektórych bibliotek open source, z których można korzystać.


2
„zadaniem filtra adaptacyjnego jest sygnał”? Przypadkowo masz słowo.
endolith

@endolith Thanks. Nie mogłem wymyślić dobrego sposobu na naprawienie tego, więc użyłem alter . Możesz edytować go za pomocą czegoś bardziej interesującego. =)
Phonon

3

Nie jestem pewien, jak ustalić opóźnienie bez jakiejś wstępnej kalibracji

Zacznę od zmodyfikowania algorytmu akustycznego odcisków palców, takiego jak ten używany przez Shazama .

Twoje wymagania są podobne do Shazama pod wieloma względami (funkcje muszą przetrwać algorytm kompresji zaprojektowany dla telefonii, przechodzą także przez mikrofony niskiej jakości), więc prawdopodobnie możesz użyć tych samych funkcji (lokalne maksima mocy w przestrzeni czasu / częstotliwości) możesz zwiększyć rozdzielczość czasową kosztem rozdzielczości częstotliwości.

Istnieje również kwestia tego, o ile przeskalować sygnał przed odjęciem.

Jednolite skalowanie prawie na pewno nie będzie wystarczająco dokładne. Trzeba by zrobić coś w rodzaju aproksymacji odpowiedzi częstotliwościowej z filtrem FIR, a następnie przepuszczenie (opóźnionego) sygnału mikrofonowego przez filtr odwrócony przed odjęciem go od odbieranego sygnału.


Odcisk palca Shazam nie może zapewnić dokładnego przybliżenia opóźnienia. Wykorzystuje wiele złożonych procesów ekstrakcji funkcji do porównywania próbek audio, z których nie wszystkie są oparte na czasie.
Phonon

@Phonon, Shazam może teraz używać dodatkowych algorytmów, ale ten w połączonym dokumencie jest oparty na czasie i daje dobre oszacowanie opóźnienia.
finnw

Może coś takiego jak korelacja krzyżowa wysłanych i odebranych spektrogramów powiedziałoby ci opóźnienie. Powinny być odporne na działanie filtrowania i dodatkowego hałasu
endolith
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.