오디오 시스템에서 에코를 식별하고 제거하는 데 어떤 방법을 사용할 수 있습니까?


14

배경

전화 유형 설정에 사용할 단일 소형 마이크 ​​및 스피커가있는 시스템을 설계하고 있습니다. 내가 줄 수있는 가장 쉬운 예는 컴퓨터 스피커와 데스크탑 마이크를 사용하는 Skype 대화입니다.

스피커의 오디오가 마이크에 의해 픽업되어 원래 사람에게 다시 전송되는 것이 걱정됩니다. 나는 VoIP 대화 초기에 항상 이런 일이 발생한다고 들었지만, 더 이상 들리지 않습니다.

내 가정은 그룹이 반향을 제거하는 방법을 생각해 냈지만 어떻게 수행합니까?

구혼

내 첫 번째 생각은 단순히 지연에 관심을 가져야하는이 방법을 제외하고 마이크 신호에서 스피커로 전송되는 신호를 간단히 빼는 것입니다. 사전 캘리브레이션을 사용하지 않고 지연이 무엇인지 확인하는 방법을 잘 모르겠습니다. 신호를 빼기 전에 신호를 얼마나 스케일링해야하는지에 대한 문제도 있습니다.

다음으로 마이크 신호가 에코가 될 가능성을 결정하고 실제 지연을 결정할 수 있도록 스피커 신호와 마이크 신호 사이에 일종의 상관 관계를 수행하는 방법에 대해 생각했습니다. 이 방법은 몇 가지 기록 된 신호로 재생할 때 제대로 작동 할 수 있었지만 실시간 시스템에 유용한 상관 관계를 계산할 때 대기 시간이 너무 길어 보입니다. 또한 스피커의 조절 가능한 볼륨으로 인해 실제로 상호 연관되어 있는지 여부를 판단하기가 어려웠습니다.

내 다음에는 인터넷에서 성공을 거둔 사람이 있어야하지만 좋은 예를 찾지 못했다고 생각했다. 그래서이 유형의 문제를 해결하기 위해 어떤 방법을 사용할 수 있는지 알아 보려고 여기에 왔습니다.


1
음향 반향 제거는 주제에 관한 많은 책과 수십 년의 연구 논문이있는 큰 주제 영역입니다. 여기 주제에 대한 하나의 SO Q & A가 있습니다 : stackoverflow.com/questions/3403152/acoustic-echo-cancellation-in-java
hotpaw2

1
@ hotpaw2 Java 링크 의 음향 반향 제거를 클릭 할 수없는 이유가 확실 하지 않습니다.
Mark Booth

나에게 제안하십시오, 나는 연설에 존재하는 반향을 취소하려고 노력하고 있습니다. 강당의 단일 마이크에 입력되었습니다. 나는 당신이 적응 형 필터를 언급 한 것처럼 그것을 시도하고 있습니다. 하지만 여기에는 참조 신호가 없습니다. 내 신호는 스피커 신호로 마이크에 500ms라고 알려주는 원래 신호의 에코입니다.

답변:


15

당신이 올바른지. 많은 에코 제거 방법이 존재하지만 그중 어느 것도 정확히 사소한 것은 아닙니다. 가장 일반적이고 널리 사용되는 방법은 적응 형 필터를 통한 에코 제거입니다. 한 문장에서, 적응 필터의 역할은 입력에서 나오는 정보의 양을 최소화하여 재생중인 신호를 변경하는 것입니다.

적응 형 필터

적응 형 (디지털) 필터는 계수를 변경하고 결국 최적의 구성으로 수렴하는 필터입니다. 이 적응 메커니즘은 필터의 출력을 원하는 출력과 비교하여 작동합니다. 아래는 일반적인 적응 형 필터의 다이어그램입니다.

여기에 이미지 설명을 입력하십시오

다이어그램에서 알 수 있듯이, 신호 은 출력 신호 을 생성하기 위해 으로 필터링됩니다 ( . 그런 다음 원하는 신호 에서 을 빼서 오류 신호 을 생성합니다 . 참고 계수의 벡터이고, 숫자가 아닌 (따라서 우리는 쓰지 않는다 ). 모든 반복 (모든 샘플)을 변경하기 때문에 이러한 계수의 현재 컬렉션을 첨자 화합니다 . 이 확보 되면 이를 사용하여 을 업데이트합니다.w N 개의 D [ N ] D [ N ] D [ N ] E [ N ] w N w [ N ] N E [ N ] w N w N 개의 D [ N ]x[n]wnd^[n]d^[n]d[n]e[n]wnw[n]ne[n]wn선택한 업데이트 알고리즘으로 (나중에 자세히 설명). 입력과 출력이 시간이 지남에 따라 변하지 않고 잘 설계된 업데이트 알고리즘을 제공하는 선형 관계를 만족하는 경우 은 결국 최적 필터로 수렴하고 은 밀접하게 .wnd^[n]d[n]

에코 캔슬

반향 제거 문제는 입력-출력 관계를 만족시키는 최적의 필터를 찾아서 입력에 대해 알려진 이상적인 출력을 생성하려고하는 적응 형 필터 문제의 관점에서 제시 될 수 있습니다. 특히, 헤드셋을 잡고 "hello"라고 말하면 네트워크의 다른 쪽 끝에서 수신되며 방의 음향 응답에 의해 변경되고 (소리가 크게 재생되는 경우) 네트워크로 피드백되어 되돌아갑니다. 에코로 당신에게. 그러나 시스템은 초기 "hello"소리가 무엇인지 알고 이제 잔향되고 지연된 "hello"소리가 무엇인지 알고 있으므로 해당 룸 응답이 적응 형 필터를 사용하는 것을 시도하고 추측 할 수 있습니다. 그런 다음 그 추정치를 사용할 수 있습니다. 모든 수신 신호를 임펄스 응답으로 에코 (에코 신호의 추정치 제공)하고 전화 한 사람의 마이크에 들어가는 신호에서 빼십시오. 아래 다이어그램은 적응 형 에코 제거기를 보여줍니다.

여기에 이미지 설명을 입력하십시오

이 다이어그램에서 "hello"신호는 입니다. 라우드 스피커에서 재생 된 후 벽에서 튀어 나와 장치의 마이크로폰에 의해 픽업되면 에코 신호 됩니다. 적응 필터 은 취하여 수렴 후 에코 신호 이상적으로 추적해야하는 출력 을 생성합니다 . 따라서 은 결국 회선의 다른 쪽 끝에서 아무도 이야기하지 않는다는 점을 감안할 때 결국 0이되어야합니다. 일반적으로 헤드셋을 들어서 말했을 때입니다. "여보세요". 이것이 항상 사실은 아니며, 비 사례 적 고려 사항은 나중에 논의 될 것이다.d [ n ] w n x [ n ] y [ n ] d [ n ] e [ n ] = d [ n ] y [ n ]x[n]d[n]wnx[n]y[n]d[n]e[n]=d[n]y[n]

수학적으로 NLMS (normalized minimum mean square) 적응 필터는 다음과 같이 구현됩니다. 이전 단계의 오류 신호를 사용하여 모든 단계를 업데이트 합니다. 즉, 보자wn

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

여기서 은 의 탭 (샘플) 수입니다 . 샘플이 역순인지 확인하십시오. 그리고하자w n xNwnx

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

그런 다음 우리 는 및 의 내부 곱 (두 신호가 모두 실제 인 경우 내적)을 찾아 (볼록으로) 을 계산 합니다 .y[n]=xn=wn

y[n]=xnTwn=xnwn

이제 오류를 계산할 수 있으므로 정규화 그라디언트 디센트 방법 을 사용하여 오류 를 최소화하고 있습니다. 대한 다음 업데이트 규칙이 있습니다 .w

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

여기서 는 와 같은 적응 단계 크기 입니다.μ0μ2

실제 응용 프로그램 및 과제

이 에코 제거 방법에는 여러 가지가 있습니다. 우선, 앞에서 언급 한 것처럼 상대방이 "안녕하세요"신호를받는 동안 조용히있는 것은 아닙니다. 입력 신호와 에코가 있기 때문에 라인의 다른 쪽 끝에 상당한 양의 입력이 존재하는 동안 임펄스 응답을 추정하는 것이 여전히 유용 할 수 있음을 알 수 있습니다 (그러나이 회신의 범위를 벗어남). 통계적으로 독립적 인 것으로 가정; 따라서 오류를 최소화하는 것은 여전히 ​​유효한 절차입니다. 일반적으로 에코 추정을위한 적절한 시간 간격을 감지하려면보다 정교한 시스템이 필요합니다.

반면에, 수신 된 신호가 거의 무음 일 때 (실제로) 에코를 추정하려고 할 때 어떤 일이 발생하는지 생각해보십시오. 의미있는 입력 신호가 없으면 적응 형 알고리즘은 의미없는 결과를 만들어 내고 빠르게 시작하여 임의의 에코 패턴으로 끝납니다. 이것은 음성 탐지도 고려해야한다는 것을 의미합니다 . 현대 반향 제거기는 아래 그림과 비슷하지만 위의 설명은 그 핵심입니다.

여기에 이미지 설명을 입력하십시오

적응 형 필터와 반향 제거 및 탭할 수있는 일부 오픈 소스 라이브러리에 대한 많은 문헌이 있습니다.


2
"적응 필터의 역할은 신호에 대한 것"입니까? 당신은 실수로 한마디.
endolith

@endolith 감사합니다. 나는 그것을 고치는 좋은 방법을 생각할 수 없었으므로 alter을 사용했다 . 더 흥미로운 것을 사용하여 편집 할 수 있습니다. =)
Phonon

3

사전 캘리브레이션없이 지연이 무엇인지 확인하는 방법을 잘 모르겠습니다.

Shazam에서 사용하는 것과 같은 음향 지문 알고리즘을 수정하는 것으로 시작하겠습니다 .

요구 사항은 여러면에서 Shazam과 유사합니다 (이 기능은 전화 통신을 위해 설계된 압축 알고리즘을 유지해야하며 품질이 낮은 마이크를 통과해야 함) 동일한 기능 (시간 / 주파수 공간에서 로컬 최대 전력)을 사용할 수 있습니다 주파수 해상도를 희생시키면서 시간 해상도를 높이고 싶을 수도 있습니다.

신호를 빼기 전에 신호의 스케일을 조정하는 문제도 있습니다.

균일 한 스케일링은 거의 확실하지 않습니다. FIR 필터로 주파수 응답을 근사한 다음 수신 된 신호에서 빼기 전에 (지연된) 마이크 신호를 반전 된 필터를 통과시키는 것과 같은 작업을 수행해야합니다.


Shazam 지문은 정확한 지연 근사치를 생성 할 수 없습니다. 오디오 샘플을 비교하기 위해 많은 복잡한 기능 추출 프로세스를 사용하지만 시간 기반이 아닌 것은 아닙니다.
Phonon

@Phonon, Shazam은 현재 추가 알고리즘을 사용하고 있지만 링크 된 논문의 알고리즘은 시간 기반이며 지연에 대한 추정치를 제공합니다.
finnw

송신 및 수신 스펙트로 그램의 상호 상관과 같은 것이 지연을 알려줄 수 있습니다. 필터링 및 추가 노이즈 효과에 대한 내성
endolith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.