KR20010033951A - 통신 시스템에서 에코 억제 제어를 위한 방법 및 장치 - Google Patents

통신 시스템에서 에코 억제 제어를 위한 방법 및 장치 Download PDF

Info

Publication number
KR20010033951A
KR20010033951A KR1020007007535A KR20007007535A KR20010033951A KR 20010033951 A KR20010033951 A KR 20010033951A KR 1020007007535 A KR1020007007535 A KR 1020007007535A KR 20007007535 A KR20007007535 A KR 20007007535A KR 20010033951 A KR20010033951 A KR 20010033951A
Authority
KR
South Korea
Prior art keywords
echo
suppressor
echo suppressor
noise
speech
Prior art date
Application number
KR1020007007535A
Other languages
English (en)
Other versions
KR100519001B1 (ko
Inventor
에릭 더글라스 로메스버그
Original Assignee
도날드 디. 먼둘
에릭슨 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 도날드 디. 먼둘, 에릭슨 인크. filed Critical 도날드 디. 먼둘
Publication of KR20010033951A publication Critical patent/KR20010033951A/ko
Application granted granted Critical
Publication of KR100519001B1 publication Critical patent/KR100519001B1/ko

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M9/00Arrangements for interconnection not involving centralised switching
    • H04M9/08Two-way loud-speaking telephone systems with means for conditioning the signal, e.g. for suppressing echoes for one or both directions of traffic
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M9/00Arrangements for interconnection not involving centralised switching
    • H04M9/08Two-way loud-speaking telephone systems with means for conditioning the signal, e.g. for suppressing echoes for one or both directions of traffic
    • H04M9/082Two-way loud-speaking telephone systems with means for conditioning the signal, e.g. for suppressing echoes for one or both directions of traffic using echo cancellers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04BTRANSMISSION
    • H04B3/00Line transmission systems
    • H04B3/02Details
    • H04B3/20Reducing echo effects or singing; Opening or closing transmitting path; Conditioning for transmission in one direction or the other

Landscapes

  • Engineering & Computer Science (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Cable Transmission Systems, Equalization Of Radio And Reduction Of Echo (AREA)
  • Telephone Function (AREA)
  • Interconnected Communication Systems, Intercoms, And Interphones (AREA)

Abstract

에코 억제기를 제어하기 위한 방법 및 장치는 감지된 신호의 질을 여러가지 조건 하에서 최적화 할 때 우수한 에코 감쇠 효과를 제공한다. 설명된 기술은 에코 억제기가 필요이상으로 감쇠를 생성하여 신호의 왜곡을 증가시킬 가능성을 최소화하도록 원하는 만큼의 에코 감쇠효과를 제공한다. 제1실시예에서, 음성 검출기가 멀리 떨어진 통신 신호에 음성 성분이 포함되어 있지 않다고 지시하면 음향 에코 억제기는 비활성화된다. 제2 실시예에서, 활성 음향 에코 소거기의 감쇠 계수는 음성 검출기가 가까운 통신 신호에 가까운 음성 성분이 있다고 지시하면 이에 기초하여 조절된다. 제3 실시예에서, 음향 에코 소거기에 의해 제공된 감쇠 레벨은 측정된 오디오 입력에서 음향 에코 소거기로의 음성 대 노이즈 비율에 기초하여 조절된다.

Description

통신 시스템에서 에코 억제 제어를 위한 방법 및 장치{METHODS AND APPARATUS FOR CONTROLLING ECHO SUPPRESSION IN COMMUNICATIONS SYSTEMS}
지상통신선(landline)이나 무선 전화 시스템과 같은 여러 통신 시스템에서, 두 시스템 사용자들 사이의 음성 신호(voice signal)는 보통 쌍방향 통신 링크(bi-directional communication link)를 통해 전달된다. 이러한 시스템에서, 근단(near-end) 사용자의 음성(speech)는 일반적으로 한쪽 끝의 근단 마이크로폰(microphone)으로 검출되어 링크를 통해 원단(far-end) 확성기(loudspeaker)로 전달되어 재생(reproduction)되고 원단 사용자에게 주어진다. 역으로는, 원단 사용자의 음성이 원단 마이크로폰에 의해 검출되어 근단 확성기에서 재생되어 근단 사용자에게 주어진다. 통신 링크의 각 말단에서, 확성기의 출력은 근접한 마이크로폰에 의해 검출되어 원하지 않지만(inadvertently) 통신 링크로 되돌려져, 사용자에게 수용가능하지 않을 정도로 방해를 초래하는 피드백(feedback) 또는 에코를 발생시킨다.
그러므로 이러한 바람직하지 않은 에코 신호의 전달을 막기 위해, 마이크로폰 음향 입력은 가능한한 확성기로부터 분리되어 잇어야 한다. 종래의 전화 핸드셋(handset)에서는 핸드셋 스피커(확성기)는 사용자 귀를 충분히 커버(cover)하고, 핸드셋 마이크로폰은 사용자 입과 가깝게 위치되어 있기 때문에 확성기와 마이크로폰이 충분히 분리될 수 있었다. 하지만, 휴대용 전화의 물리적인 크기가 줄어들고, 핸즈프리(hands-free) 스피커폰이 널리 퍼짐에 다라, 제조업체들은 디자인을 수정하여 확성기에서 마이크로폰으로의 음향 경로가 사용자의 머리나 몸에 의해 막히지 않도록 디자인하였다. 그 결과로, 좀 더 발달된 에코 억제 테크닉이 요즘 시스템에서 매우 중요하게 되었다.
자동차용 핸즈프리 전화의 경우, 자동차 내는 닫힌 공간이기 때문에 확성기 신호가 여러번 반사되어 감지율이 높은(high-gain) 핸즈프리 마이크로폰으로 다시 전달되어 버리기 때문에 이러한 태크닉에 대한 요구가 특히 크다. 창문을 열고 닫는다든지, 사용자가 운전하면서 머리를 움직인다든지 하는, 자동차 안에서의 사용자의 움직임이나 방향 전환 및 에코 신호의 변화는 자동차 내 환경에서의 에코 억제 작업을 더 복잡하게 만든다. 또한, 좀 더 최근에 개발된 디지털 전화는 음성 인코더(encoder)를 통해 음성 신호를 처리하는데, 이 인코더는 막대한 신호 지연(signal delay)를 초래하고 비선형적 신호 왜곡을 만들어낸다. 이러한 지연은 사용자 입젱에서 보면 신호 에코 문제를 더 확대시키는 경향이 있고, 부가적인 비선형 왜곡으로 인해 네트워크 장비에서의 에코 억제가 더 어려워진다.
이러한 문제들에 대처하기 위해, 전화 제조업체들이 여러가지의 에코 억제 메카니즘(mechanism)을 개발했다. 예로서의 에코 억제 시스템(100)이 도 1a에 도시되어 있다. 도시된 바와 같이, 예로서의 시스템(100)은 마이크로폰(110), 확성기(120) 및 에코 억제기(130)를 가지고 있다. 마이크로폰(110)의 오디오 출력(115)은 에코 억제기(130)의 입력으로 연결되어 있고, 에코 억제기(130)의 오디오 출력(135)은 전화기(도시되지 않음)로의 근단 오디오 입력으로 사용된다. 또한, 전화기로부터의 원단 오디오 출력(125)은 확성기(120)로의 오디오 입력 및 에코 억제기(130)으로의 참조 입력으로 연결되어 있다.
동작을 살펴보면, 에코 억제기(130)이 마이크로폰 신호(115)를 처리하여 원단 전화 사용자로의 오디오 출력 신호(135)를 제공한다. 보다 더 상세히 말하면, 에코 억제자(130)가 원단 오디오 신호 (125)에 따라 마이크로폰 신호(115)를 감쇠하기 때문에, 확성기(120)에서 나와 마이크로폰(110)으로 들어가는 음향 에코가 원단 전화 사용자에게 다시 전달되지 않는다.
일반적으로, 에코 억제기(130)은 비선형이거나, 클립핑형(clipping type)이거나, 선형이거나 스케일링형(scaling type)이다. 클립핑형 억제기는 일반적으로 특정 범위 내의 값을 가지는(즉, 특정 클립핑 윈도우(clipping window) 내의) 신호의 일부분을 버림으로서 마이크로폰 출력 신호(115)를 감쇠한다. 스케일링형 억제기는, 반면에, 신호에 적절한 스케일링 계수(scale factor)를 곱함으로써 마이크로폰 출력 신호(115)를 감쇠한다. 최근에 개발된 하이브리드형(hybrid) 억제기는 예를 들어, 특정 감쇠 윈도우 내의 값을 가지는 마이크로폰 신호의 일부분을 스케일 하는 방식으로, 클립핑형의 측면과 스케일링형의 측면을 결합한다. 어떤 경우든, 감쇠 레벨(level of attenuation)(즉, 클립핑 윈도우의 범위 및/또는 스케일링 계수의 크기)은 원단 오디오 신호(125)의 진폭(amplitude)에 따라 직접 혹은 간접적인 방법으로 조절되어, 마이크로폰 출력(115)이 원단 사용자의 음성 범위내로만(only to the extent the far-end user is speaking) 감쇠된다.
중앙 클립퍼(center clipper)라는 기술로 알려진 종래의 클립핑형 억제기는, 예를 들어, Rasmusson 등에 의해 1995년 12월 12일에 출원된 미국 특허번호 5,475,731, 제목 "에코 측정을 통한 에러 신호 수정을 이용한 에코-소거 시스템 및 방법(Echo-Canceling System and Method Using Echo Estimate to Modify Error Signal)" 에 설명되어 있다. 또 다른 클립핑형 억제기로는 1996년 12월 31일에 출원된 미국 특허출원번호(patent application number) 08/775,797, 제목 "통신 시스템에서 잡음 및 에코 억제를 위한 AC-중앙 클립퍼(AC-center clipper for Noise and Echo Suppression in a Communications Systems)" 가 있다. 전형적인 스케일링형 억제기로는 Genter로 1994년 2월 1일 출원된 미국 특허번호 5,283,784, 제목 "에코 소거 처리 테크닉 및 처리(Echo Canceller Processing Techniques and Processing)"가 있다. 좀 더 발달된 형태의 하이브리드형 억제기로 본 문서에서는 AC-중앙 감쇠기(AC-center Attenuator)라고 명명되는, 미국 특허 출원 번호 09/005,149, 제목 "통신 시스템에서 진보된 에코 억제를 위한 방법 및 장치(Methods and Apparatus for Improved Echo Suppression in Communications Systems"가 있는데 filed on even date herewith. 위의 특허와 특허출원(patent application) 전체를 참고로 첨부하였다.
도 1a의 억제기(130)는 선형 에코 소거기(canceler) 및/또는 듣기편한(comport) 잡음 생성장치와 결합될 수 있는데, 이를 통해 좀 더 세련된 방식의 에코 억제 시스템을 제공할 수 있다. 도 1b는 도 1a의 마이크로폰(110), 확성기(120) 및 에코 억제기(130)와 음성 에코 소거기(140) 및 듣기편한 잡음 합산 장치(150)를 포함하는 예로서의 시스템(101)을 도시한다. 도시한 바와 같이, 마이크로폰의 출력(115)은 음향 에코 소거기의 오디오 입력으로 연결되고, 음향 에코 소거기(140)의 오디오 출력(145)는 에코 억제기(130)의 오디오 입력으로 연결된다. 억제기의 오디오 출력(135) 및 듣기편한 잡음 신호는 각각 합산 장치(150)의 첫번째와 두번째 입력으로 연결되고, 합계장치(150)의 오디오 출력(155)은 전화기(도시되지 않음)의 근단 오디오 입력으로 들어간다. 전화기에서 나오는 원단 오디오 출력(125)은 확성기의 오디오 입력, 음향 에코 소거기(140) 및 에코 억제기(130)의 참조 입력(reference input)으로 연결된다.
동작을 보면, 음향 에코 소거기(140)는 확성기(120)에서 마이크로폰(110)으로의 음향 경로(acoustic path)를 동적으로 모델링하여 확성기(120)에서 나와 마이크로폰(110)에 잡히는 소리에 대한 소거를 시도한다. 음향 에코 경로를 모델링하는 일반적인 알고리즘에는 잘 알려진 최소 제곱 평균(LMS, Least Mean Squares) 알고리즘과 그 변형인 정규 최소 제곱 평균(NLMS, Normalized Least Mean Squares) 알고리즘이 있다. 최소 제곱 평균알고리즘에 기초한 전형적인 예가 위에서 언급한 Rasmusson 등에게 출원된 미국 특허번호 5,475,731에 나와 있다. 또한, 진보된 정규 최소 제곱 합 알고리즘에 기초한 소거기가 본 문서에 참고로 첨부되어 있는데, 199년 5월 7일에 file된 미국 특허출원번호 08/852,729, 제목 "통신 시스템에서의 진보된 에코 소거기"에 설명되어 있다.
도 1b의 시스템(101)에서, 에코 억제기(130)가 에코 소거기(140)을 보충하여 필요할 때 부가적인 에코 감쇠를 제공한다. 예를 들어, 에코 억제기(130)은 음향 에코 소거기(140)에 의한 에코 소거의 순간적인 레벨(level)의 측정값에 기초하여 동적으로 조절되어, 잔류 에코를 미리 정해진 정도의 레벨까지 감쇠한다. 동적으로 에코 소거기에 의한 에코 소거정도를 측정하는 진보된 방법이, 예를 들어, 위에서 언급한 미국 특허출원번호 09/005,149(제목: "통신 시스템에서의 에코 억제를 위한 진보된 방법 및 장치", filed on even date herewith)에 설명되어 있다.
도 1a의 시스템(100)에서, 에코 억제기(130)은 클립핑형 억제기(clipping suppressor), 스케일링 억제기(scaling suppressor) 및 하이브리형 억제기(hybrid suppressor)가 될 수 있다. 또한, 에코 억제기(130)는, 에코 소거기(140) 다음에 나올 때는, 적절한 시간동안(예를 들어, 음성 검출기가 마이크로폰 신호(115)에 음성요소가 없다고 판정한 기간동안)에 오디오 출력 신호(135)를 선택적으로 잘라버리거나(cut out) 폐쇄(mute)시키는 단순한 단투(single-throw) 스위치가 될 수도 있다. 어떤 경우든, 에코 억제기(130)는 에코를 억제하는 것과 함께, 전체 오디오 신호를 감쇠하고, 현존하는 배경 잡음 및/또는 근단 음성을 왜곡한다. 사실, 배경 잡음은 에코 억제기(130)가 활성화 되어 있을 때에, 원단 사용자가 전화가 끊긴 것으로 잘못 생각할 수 있을 정도까지 억제될 수 있다.
그러므로, 원단 사용자의 통화의 질을 높이기 위해, 요즘의 시스템들은 종종 에코 억제기(130)이 활성화 되어 있는 동안에는 전화 오디오 신호(135)에 듣기편한(comfort) 잡음을 추가한다. 도 1b의 시스템에서, 듣기편한 잡음이 합계창치(150)을 통해 억제기 출력 신호(135)에 추가된다. 또 다른 방법으로, 합산 장치(150)을 스위치로 대체하여, 억제기 출력 신호(135)와 듣기편한 잡음 신호 중 하나만이 선택적으로 원단 사용자에게 전달되게 할 수도 있다. 듣기편한 잡음을 생성하고 사용하기 위한 진보된 방법이, 예를 들어, 본 문서에 참고로 전체 첨부된 미국 특허출원번호 09/005,145, 제목 "통신 시스템에서 듣기편한 잡음을 제공하기 위한 방법 및 장치(Methods and Apparatus for Providing Comfort Noise in Communications Systems)", filed on even date herewith가 있다.
위에서 기술된 시스템은 세련된 방식의 에코 억제를 제공하는 반면, 이러한 시스템을 제어하기 위한 알려진 방법들은 몇가지 측면에서 부적절하다. 예를 들어, 에코 억제기(130)을 활성화하기 위한 알려진 방법들은, 원단 사용자로 하여금 근단 음성이 받아들여질 수 없을 정도로 왜곡되어 전달되는 결과를 초래한다. 다른 발로 설명하면, 알려진 제어 방법들은 종종 에코 억제기(130)가 활성화되지 말아야 할 때(가령 근단사용자의 음성만 존재할 때, near-end single talk)도 활성화된다. 그리고/또는, 쌍방 음성 동안에(double talk) 에코 억제기(130)가 근단 신호를 필요한 또는 양호한 레벨보다 더 많이 감쇠한다. 또한, 잔류하는 에코 억제기(가령, 근단 음성이 있느냐 없느냐에 따라 전단(front-end)의 에코 소거기에 따라 나오는 단투 스위치를 닫거나 열거나 한다.)에 대한 특정 알려진 방법들은 종종 부적절한 에코 억제를 초래한다. 그러므로, 에코 억제기를 제어하기 위한 개선된 방법 및 장치가 필요하다.
본 발명은 통신 시스템에 관한 것으로 보다 더 상세히 말하면 쌍방향 통신 링크(bi-directional communication link)에서의 에코 억제(echo suppression)에 관한 것이다.
도 1a은 본 발명의 지침이 구현될 수 있는 전형적인 에코 억제 시스템에 대한 도시.
도 1b는 볼 발명의 지침이 구현될 수 있는 전형적인 에코 억제 시스템에 대한 또 다른 실시예에 대한 도시.
도 2는 본 발명에 따른 에코 억제 시스템의 또 다른 방법의 시스템으로, 음향 에코 억제기로의 입력을 제어하도록 구성된 음성 검출기를 포함하는 시스템에 대한 도시.
도 3은 본 발명에 따른 에코 억제 시스템의 도 다른 방법의 시스템으로, 음향 에코 억제기의 감쇠 성분을 조절하도록 구성된 이득 제어 프로세서(gain control processor)를 포함하는 시스템에 대한 도시.
도 4는 에코 억제기를 제어하기 위한 본 발명에 따른 전형적인 단계에 대한 도시.
본 발명은 에코 억제기가 더 많은 감쇠를 생성할 가능성(likelihood)을 최소화하면서 적절한 레벨의 에코 감쇠를 제공하기 위한 에코 억제기를 제어하는 방법 및 장치를 제공하여 위에서 설명한 요구조건과 함께, 다른 요구조건들도 만족시킨다. 양호하게도, 본 발명의 방법 및 장치는 여러 조건 하에서 수신된 신호의 질을 최적화하면서 우수한 에코 억제를 제공하는 통신 시스템을 만들수 있도록 한다.
첫번째 보여진 실시예에서, 본 발명에 따른 에코 억제 장치는 제1 통신 신호(즉, 근단 오디오 신호)를 감쇠하도록 구성된 에코 억제기를 포함한다. 보다 더 상세히 말하면, 에코 억제기는 제1 통신 신호의 에코 성분을 억제하기 위해 제1 통신 신호를 감쇠한다. 여기서, 에코 성분은 제2 통신 신호(즉, 원단 오디오 신호)의 반사(reflection)로부터 기인한다. 예로서의 에코 억제기는 또한, 제2 통신 신호에 음성 성분이 포함되었는지를 지시하도록 조절된 음성 검출기를 포함하는데, 에코 어게장치는 음성 검출기가 제2 통신 신호에 에코를 유발하는 음성 성분이 포함되어 있지 않다고 지시하면 비활성화된다. 그 결과로, 에코 억제기는 필요할 때만 활성화되어 제1 통신 신호에 왜곡을 가한다.
두번째 보여진 실시예에서, 본 발명에 따른 에코 억제기는, 에코 성분 - 여기서 이 에코 성분은 제2 통신 신호의 반사로 인해 생기는 에코 성분임 - 을 억제하기 위해 제1 통신 신호의 일부분에 감쇠 성분을 곱하도록 구성된 에코 억제기를 포함한다, 보여진 에코 억제기는 또한 통신 신호에서 지배적인 조건을 검출하여 억제기의 감쇠 성분을 조절하도록 구성된 이득 제어 프로세서(gain control processor)를 포함한다. 예를 들어, 이득 제어 프로세서는 억제기의 감쇠 성분을 제1 통신 신호에 근단 음성 성분이 포함되어 있느냐에 따라 두 값중 하나의 값으로 맞출 수 있다. 그 결과, 보여진 에코 억제기는 신호의 왜곡을 최소화하면서 적절한 레벨의 에코 감쇠를 제공할 수 있다.
세번째 보여진 실시예에서, 본 발명에 따른 에코 억제기는 에코 성분 - 여기서 이 에코성분은 제2 통신 신호의 반사에 의해 생기는 에코 성분임 - 을 억제하기 위해 제1 통신 신호를 감쇠하도록 구성된 에코 억제기를 포함한다. 에코 억제기는 또한 제1 통신 신호의 음성 대 잡음 비율을 검출하여, 이 검출된 비율에 기초하여 에코 억제기에 의해 제공된 감쇠 레벨을 조절하도록 구성된 이득 제어 프로세서를 포함한다. 예를 들어, 이득 제어 프로세서는 이 비율이 미리 정의된 임계치거나 그보다 작으면 비활성화된다. 다른 방법으로, 이득 제어 프로세서는 에코 억제기의 감쇠 성분을 조절하여 에코 억제기 출력의 에코 대 잡음 비율이 미리 정의된 임계치 아래의 값을 가지도록 할 수도 있다. 그 결과, 보여진 에코 억제기는 신호의 왜곡을 최소화하면서, 전반적인 에코 감쇠의 적절한 레벨을 제공할 수 있다.
본 발명의 위에서 기술된 특징 및 다른 특징들을 이하로 첨부된 도면과 함레 설명된 실시예들과 함께 더 상세히 설명하도록 한다. 본 기술에 숙련된 자라면 기술된 실시예가 설명 및 이해를 위해 제공된 것이라는 것을 알 수 있고 여러 동일한 실시예를 예상할 수 있을 것이다.
도 2는 본 발명의 첫번째 측면에 따라 구성된 에코 억제 시스템(200)을 도시한다. 도시한 바와 같이, 보여진 시스템(200)은 도 1a와 도 1b의 마이크로폰(110), 확성기(120), 및 에코 억제기(echo suppression system)(130)와 확성기 음성 검출기(loudspeaker voice activity detector)(210)를 포함한다. 마이크로폰(110)의 오디오 출력(115)은 에코 억제기(130)의 오디오 입력으로 연결되고, 에코 억제기(130)의 오디오 출력(135)은 전화(도시되지 않음)로의 근단(near-end) 오디오 입력으로 들어간다. 전화로부터 나오는 원단 오디오 출력(125)은 확성기(120)의 오디오 입력 및 에코 억제기(130)와 음향 활동 검출장치(210)로의 참조 입력으로 연결된다. 음성 검출기(210)의 이진 출력(215)은 에코 억제기(130)의 제어 입력으로 연결된다.
일반적으로, 도 2의 시스템(200)은 도 1a의 시스템(100)의 시스템과 유사하다. 바꿔 말하면, 에코 억제시스템(130)은 원단 오디오 신호(125)에 따라 마이크로폰(115)를 감쇠하여, 확성기(120)로부터 마이크로폰(110)으로의 음향 에코가 원단 전화 사용자에게로 다시 전달되지 않는다. 하지만, 도 2의 시스템에서, 에코 억제기(130)의 작동은 음성 검출기(215)의 이진 출력(215)에 의존한다. 보다 더 상세히 말하면, 에코 억제기(130)은 음성 검출기(210)이 원단 신호(125)에 음성 성분이 포함되어 있다고 나타낼 때(즉, 검출장치 출력(215)이 1일때만)만 활성화된다.
에코 검출장체 출력(215)에 따라 에코 억제기(130)의 동작을 결정함으로, 도 2의 시스템(200)은 필요하지 않을 때는 마이크로폰 신호(115)에 필요치않은 왜곡을 가하지 않는다. 다른 말로 말하면, 원단 사용자가 말하고 있지 않은 동안에는 원단 에코가 있을 수 없으므로, 원단 에코 억제기(130)는 활성화 될 필요가 없다. 그러므로, 음성 검출기(210)이 원단 음성이 없다고 나태낼 때 에코 억제기(130)을 비활성화함으로써, 도 2의 시스템(200)은 원단 에코 억제가 불필요한 동안에 에코 억제기(130)가 근단 음성 및 잡음을 감쇠하여 왜곡할 가능성을 줄인다.
그러나, 활성기 음성 활종 검출장치(210)이 종종 잘못 판단할 수 있기 때문에, 원단 사용자가 말하고 있지 않을 때 행상 에코 억제기(130)가 활성화 되지 않는 것을 보장할 수는 없다. 그럼에도 불구하고, 억제기의 동작에 아무런 조건을 걸지 않는 종래 기술의 시스템과 비교하면, 도 2의 시스템(200)은 양질의 원단 신호를 제공한다. 더 나아가, 도 2의 시스템은 마이크로폰 음성 검출기에 기초하여 억제기의 동작을 결정하는 종래 기술의 시스템과 비교하여 에코 억제기(130)에 의한 불필요한 감쇠를 우수하게 방지하는 효과를 가져온다. 확성기 신호는 일반적으로 마이크로폰 신호(가령, 자동차 핸즈프리 장치로부터의 신호)보다 1/4가량의 배경신호를 가지고 있기 때문에, 확성기 음성 검출기(210)가 마이크로폰 음성 검출기보다 일반적으로 더 믿을만하다. 다른 말로 말하면, 잡음이 많은 배경의 마이크로폰 신호에서 낮은 레벨의 음성요소를 검출해 내는 것 보다, 조용한 배경의 확성기 신호로부터 적은 양의 음성성분(lack of speech)을 검출해 내는 것이 더 쉽다.
위에서 이야기한 것들은 근단과 원단 사용자간의 네트워크 장치가 왕복 이득(round-trip gain)(즉, 원단 사용자에게서 발생된 신호 이득이 네트워크를 통과하여 원단 사용자에게로 되돌아가는것)이 단일단위보다 클 때의 주파수에서 생기는 하울링(howling)을 방지할 정도로 충분한 경우를 가정한다. 다른 말로 말하면, 만일 에코 억제기(130)가 원단 음성이 없음에 기초하여 완전치 비활성화된다면, 다른 무언가(가령 네트워크 에코 소거기)가 하울링을 방지하기 위해 사용되어야 한다. 또 다른 방법으로는, 원단 음성이 없는 경우 에코 억제기(130)를 완전치 비활성화시키는 대신, 에코 억제기(130)가 활성화된 채로 남아 하울링을 방지할 정도로만 충분한 일반적인 감쇠 레벨(-6~10dB)을 제공하도록 맞춰지는 것이다(클립핑형, 스케일링형, 및 하이브리형 억제기의 경우).
본 발명의 기술분야에 숙련된 자라면 확성기 음성 검출기(210)를 구현하기 위한 방법을 이해할 수 있을 것이다. 예를 들어, 유럽 전화통신 표준기구(European Telecommunications Standards Institute, ETSI)문서 GSM-06.82에 본 발명의 목표에 부합하는 구현방법이 설명되어 있다. 이러한 음성 검출기는 현재 많은 통신 시스템에서 잡음 억제 및/또는 불연속적인 전송(discontinuous transmission, DTX)을 목적으로 사용되고 있다. 일반적으로, 이러한 음성 검출기는 음성쪽으로 편향(bias)되어 있다. 다른 말로 말하면, 이 검출장치는 종종 음성이 존재하지 않을 때 존재한다고 지시한다. 그러나, 음성이 존재할 때 존재하지 않는다고 지시하는 경우는 거의 없다. 본 발명의 확성기 음성 검출기(210)는 도 2의 전형적인 시스템(200)에서 사용되는 음성 검출기와 같은 타입과 유사한 요구조건을 가진다(즉, 원단 사용자에게 재전달되는 에코를 허용하는 것 보다는, 존재하지 않는 에코를 감쇠시키려는 경향을 가진다).
도 1a 및 1b에 대한 위의 설명에서 이야기 한 것 처럼, 도 2의 에코 억제기(130)는 클립핑형 억제기이거나 스케일링 억제기 또는 하이브리형 억제기, 또는 전단 에코 소거기(140)이 포함되는 경우의 절단 스위치일 수 있다. 그러므로, 억제기가 어떤 타입이냐에 따라, 원단 음성이 없는 주기동안에 에코 억제기(130)을 비활성화하는 데에 다양한 방법이 구현될 수 있다. 예를 들어, 억제기를 전반적으로 못쓰게 하기 위한 바이패스 스위치(bypass switch)를 사용함으로서 모든 타입의 억제기를 효과적으로 비활성화 할 수 있다. 또 다른 방법으로, 절단 스위치 억제기는 단순히 스위치를 닫음으로 비활성화 할 수 있다. 클립핑형 억제기는 클립핑 윈도우 사이즈를 0으로 만듦으로써 비활성화하거나 전달모드(pass-through mode)로 될 수 있다. 스케일링 억제기의 경우는 반면에, 감쇠 성분을 단위값으로 맞춤으로써 전달모드로 될 수 있다. 또한, 하이브리형 억제기는 감쇠 윈도우를 0으로 맞추고/또는 감쇠 성분을 단위값으로 맞춤으로서 전달모드로 될 수 있다.
도2의 실시예는 특히, 도 1b의 전단 에코 소거기(140)가 포함될 경우 잘 작동한다. 에코 소거기(140)가 음성 검출기(210)가 확성기 신호(125)에 음성성분이 존재하지 않는다고 잘못 지시하는 주기동안에는 에코 억제기(130)의 도움 없이 일반적으로 충분한 에코 억제를 제공한다는 결과로부터 기인한다. 다른 말로 하면, 확성기 신호(125)가 비교적 잡음이 많고(그리고 원단 음성이 잡음으로 어느정도 덮여 있고(masked)), 원단 사용자가 처음에 잡음으로 덮인 에코에 덜 민감할 때, 음성 검출기(210)가 이러한 잘못을 범할 가능성이 크다. 에코 소거기(140)이 포함되든 아니든, 하지만, 도2의 시스템(200)은 고품질의 근단 신호를 제공한다.
도3은 본 발명의 또 다른 측면에 따라 구성된 에코 억제 시스템(300)을 도시한다. 도시한 바와 같이, 전형적인 시스템(300)에는 도1a와 1b의 마이크로폰(110), 확성기(120), 에코 억제기(130), 에코 소거기(140) 및 합산 장치(150) 및, 이득 제어 프로세서(310)과 음량 이득 블록(320)을 포함한다. 마이크로폰 출력(115)은 음향 에코 소거기(140)의 입력과 이득 제어 프로세서(310)의 첫번째 참조 입력으로 연결되어 있다. 음향 에코 소거기(140)의 오디오 출력(145)은 에코 억제기(130)의 오디오 입력과 이득 제어 프로세서(310)의 두번째 참조 입력으로 연결되어 있다. 억제기의 오디오 출력(135)과 듣기편한 잡음 신호는 합산 장치(150)의 첫번째 및 두번째 입력으로 각각 연결되어 있다. 그리고 함계 장치(150)의 오디오 출력(155)는 전화기(도시되지 않음)로 들어가는 근단 오디오 입력으로 사용된다.
전화기에서 나오는 원단 오디오 출력(125)는 음량 이득 블록(320)의 오디오 입력으로 연결되어 있고, 음량 이득 블록(320)에서 나오는 오디오 풀력(325)은 확성기(120)의 오디오 입력 및 에코 억제기(130)와 음향 에코 소거기(140)의 참조 입력으로 연결되어 있다. 음량 이득 블록(320)에서 나오는 오디오 출력(325)은 이득 제어 프로세서(310)의 세번째 참조 입력으로 연결되어 있고, 이득 제어 프로세서(310)의 제어 출력(315)은 에코 억제기(130)의 제어 입력으로 연결된다.
일반적으로, 도3의 시스템(300)의 동적은 도1b의 시스템(101)의 동작과 유사하다. 다른 말로 하면, 음향 에코 소거기(140)는 확성기(120)에서 나와 마이크로폰(110)으로 들어가는 음향 경로를 동적으로 모델링하고, 마이크로폰(110)에 의해 모아진 확성기 소리는 소거하려고 한다. 에코 억제기(130)은 그리고 나서 필요하다면 부가적인 에코 감쇠를 제공하고, 에코 억제기(130)에 의해 감쇠된 근단 잡음을 보충하기 위해 합산 장치(150)을 통해 듣기편한 잡음을 추가한다(이것은 선택적이다). 도3의 시스템(300)에서는 그러나, 이득 제어 프로세서(310)은 본 발명에 따라 에코 억제기(130)에 의해 제공된 감쇠의 레벨을 제어한다.
음량 이득 블록(320)은 도3의 시스템(300)에 포함되어 이득 제어 프로세서(310)의 작동을 더 잘 설명한다. 일반적으로, 음량 이득 블록(320)은 음량 제어 신호(324)에 따라 전화 오디오 신호(125)를 감쇠하고, 감쇠된 오디오 신호(325)를 확성기(120)로 전달한다. 음량 제어 신호(324)는 예를 들어, 근단 사용자에게로 맞추어 질 수 있다.
본 발명의 일면에 따라, 에코 억제기(130)는 스케일링 억제기이거나 하이브리형 억제기라고 가정하는데 이는 오디오 신호(145)에 감쇠 성분 α를 곱한다. 이 경우, 이득 제어 프로세서(310)은 음량 제어 신호(324)와 마이크로폰 신호(115), 황성기 신호(125) 및/또는 소거기 출력 신호(145)를 사용하여 감쇠 성분 α를 제공하는데 이는 제어 프로세서 출력 신호(315)를 통해 전달된다.
구체적으로 말하면, 이득 제어 프로세서(310)은 참조 신호(115), (145), (324), (325)를 사용하여 루프나 왕복, 에코 이득등을 동적으로 측정하는데 각각을 교대로 사용하여 억제기 감쇠 성분 α를 계산한다. 루프 이득은 전화 오디오 신호(125)가 확성기(120)에서부터 마이크로폰(110)의 음향 경로를 통과하고 에코 소거기(140)을 지나 음량 제어 블록(320)을 통과할 때 어느정도로 갬쇄가 되는지를 지시한다. 그러므로 루프 이득을 이용하여 에코 억제기(130)의 부가적인 감쇠의 양을 계산한다. 이 루프 이득은 이를 통해 근단 오디오 신호(135)의 에코값이 특정 목표 레벨까지 감쇠되는 것을 보장해야 한다.
음량 이득 블록(320)에 의해 제공된 감쇠의 레벨은 음량 제어 신호(324)를 통해 알 수 있다. 그러나, 음향 경로에서 제공되는 감쇠의 레벨(채널 이득이라고 불림) 및 에코 소거기(140)에 의해 제공되는 감쇠의 레벨(소거기 이득이라 불림)은 마이크로폰 신호(115), 확성기 신호(325) 및 소거기 출력 신호(145)에 기초하여 계산된다. 개채널 이득과 소거기 이득을 계산하기 위한 개선된 방법이, 예를 들어, 위애서 언급한 미합중국 특허 출원, 번호 09/005,149(제목: "통신 시스템에서 에코 억제를 위한 개선된 방법 및 장치(Methods and Apparatus for Imprved Echo Suppression in Communications Systems")인, 동시에 출원된 특허에 설명되어 있다. 채널 이득 및 소거기 이득을 계산하는 구체적인 방법을 언급하는 것은 본 발명을 이해하는 데에 그리 중요한 것이 아니므로 간략히 하기 위해 계산과정에 대한 자세한 설명은 생략한다.
위에서 설명한 대로, 이득 제어 프로세서(310)은, 음량 제어 블록(320)의 입력에서 에코 소거기(140)(또는 에코 소거기(140)이 포함되어 있지 않은 경우 마이크로폰(115))의 출력으로의 이득값이 주어지면, 억제기 감쇠 성분 α를 계산하여 근단 오디오 신호(155)에서의 에코가 특정 목표 레벨까지 억제되도록 한다. 그러나, 종래 기술의 시스템에서 이 목표레벨이 고정되어 있는 것에 반해, 도3의 시스템(300)의 이득 제어 프로세서(310)은 전반적인 조건에 기초하여 이 목표 레벨을 조절함으로써, 에코 억제기(130)이 근단 오디오 신호(155)에 가하는 왜곡을 최소화한다.
다른 말로 하면, 종래 기술의 시스템은 일반적으로 목표 레벨을 강제적인 고정된 값(즉, 근단 배경 잡음이 없이 원단 단일 음성의 경우와 같은 단일 최악 경우에서 정해진 값)으로 정하여 강제적인 목표 레벨이 필요치 않는 경우 필요 이상으로(즉, 최악의 경우가 아닌 경우) 근단 신호(155)를 왜곡하는 반면, 도3의 이득 제어 프로세서(310)는 몇가지 가능한 목표 레벨값 중에 하나를동넉으로 선택하는데, 목표 레벨의 가능한 각 값은 현재 전반적인 조건이 어떠하냐에 따라 가장 적절한 값이다. 예를 들어, 원단 단일 음성의 주기 동안에는, 원단 사용자가 에코에 상당히 민감하기 때문에, 목표 레벨이 상당히 엄격해야 한다 (-45dB이하). 쌍방 통화의 경우는 그러나, 원단 사용자가 에코에 덜 민감하기 때문에 목표 레벨이 어느정도 완화된다(-25dB이하). 양호하게도, 이득 제어 프로세서(310)은 이러한 조건 및 다른 전반적인 조건을 검출할 수 있기 때문에, 이에 따라 목표 레벨을 정한다(이를 통해 억제기 감쇠 성분 α를 정한다). 그 결과로 도3의 시스템(300)은 주어진 시간에 근단 신호(155)에 필요 이상으로 왜곡을 가하지 않는다.
근단 단일 음성인지, 원단 단일 음성인지. 쌍방 통화인지, 근단의 잡음이 많은지 등등을 검출하기 위해, 이득 제어 프로세서(310)은 마이크로폰 신호(115), 황성기 신호(325) 및/또는 소거기 출력 신호(145)를 사용한다. 예를 들어, 원단 음성을 검출하기 위해서, 이득 제어 프로세서(310)는 도2와 함께 위에서 설명된 확성기 음성 검출기(210)을 포함시킬 수 있다. 또한, 이득 제어 프로세서(310)은 마이크로폰 음성 검출기를 포함함으로, 마이크로폰 신호(115) 및/또는 소거기 출력 신호(145)에 기초하여 근단 음성을 검출할 수 있다.
본 기술에 숙달된 자라면 마이크로폰 신호(115)에만 기초한 마이크로폰 음성 검출기를 구현하는 방법을 이해할 수 있을 것이다. 또한, 에코 소거기의 입출력에 기초하여(즉, 마이크로폰 신호(115)와 소거기 출력(145)에 기초하여) 근단 음성을 검출하는 개선된 방법은 아래에서 유사코드(pseudo-code)로 설명한다. 근단 음성 검출에 관한 구체적인 설명은 본 발명을 이해하는 데 중요한 것이 아니므로 이러한 자세한 설명은 여기서는 생략한다.
위에서 설명한 목표 레벨 선택 프로세스가 에코 억제기(130)이 활동하고 있어 음향 신호(145)를 어느정도 레벨까지 감쇠하는 데(즉, 에코 억제기(130)이 그냥 통과시키거나 아래에서 설명될 통과 모드에 놓이지 않는것)에 응용할 수 있다는 것을 아는 것은 중요하다. 그러므로, 본 발명은 근단 음성이 검출될 때(즉, 쌍방 통화동안에) 에코 억제기(130)을 완전히 비활성화 하여 근단 신호에 대한 왜곡을 방지하는 시스템과 구분된다. 이러한 시스템은 에코 억제기(130)가 비활성화 될 경우 에코 소거기(140)에만 의존하여 에코 억제를 제공하기 때문에, 이러한 시스템은 요즘의 전화 표준(즉, IS-55A에서 추천하는 표준으로, 원단 단일음성에서는 -45dB의 에코 감쇠, 쌍방 통화에서는 025dB의 에코 감쇠)을 만족시키지 못한다.
반대로, 본 발명은 에코 억제기(130)이 쌍방 통화의 경우에도 활성화상태로 있는 것을 허용하여 모든 시간에 이 요구조건을 만족시킨다. 원단 단일 음성 및 쌍방 통화에서 각각 요구되는 조건인 -56dB과 025dB의 에코 억제 목표를 사용할 때, 에코 억제를 최대로 하고 근단 신호 왜곡을 최소로 하는 상충되는 요구조건 사이의 밸런스를 잘 맞춘다는 실험결과가 있다. 본 기술에 숙련된 자라면 두가지 일반적인 상황에(원단 단일 음성 및 쌍방 통화)에 따르는 목표 레벨이 제공되더라, 다른 일반적인 상황(근단 및 원단 잡음 레벨이이 높거나 낮은 경우)도 고려하여 부가적인 목표 레벨을 제공하는 것을 생각해야 한다는 것을 알 수 있다.
볼 발명의 다른 측면에 따라, 도3의 이득 제어 프로세서(310)는 억제기 입력 신호(145) 내의 에코 대 잡음 비율에 대한 측정값에 기초하여 에코 억제기(130)을 통제한다. 구체적으로 말하면, 이득 제어 프로세서(310)은 억제기 입력(145)의 에코 대 잡음 비율을 동적으로 측정하여, 프로세서 출력 신호(315)를 통해 적절한 제어 신호를 에코 억제기(130)에 제공한다.
실시예에서, 이득 제어 프로세서(310)은, 측정된 에코 대 잡음 비율이 미리 정해진 임계치보다 작으면 에코 억제기(130)을 비활성화한다. 다른 말로 하면, 에코가 효과적으로 감춰졌을 때 또는 배경 잡음에 의해 덮혔을 때, 원단 사용자는 에코를 감지할 수 없으므로 에코 억제기(130)은 에코를 더 억제하기 위해 근단 신호에 왜곡을 가할 필요가 없는 것이다. 그러므로, 에코 억제기(130)은 비활성화되거나 하울링을 방지할 정도로만 충분한 일반적인 감쇠 레벨을 제공하면 되는 것이다.
실험에서, -10dB또는 그 이하의 에코 대 잡음 비율은 원단 사용자의 입장에서는 잡음을 충분히 가릴 수 있다는 것을 알 수 있다. 그러나, 에코 소거기(130)을 비활성화하기 위한 잡음 덮음 임계치(echo masking threshold)는 -10dB보다 낮게 정해질 수 있다. 이는 실제 응용에서 에코 대 잡음 비율 계산의 오차로 인해 들릴 수 있을 정도의 에코를 전달해 버리는 것을 막기 위해서이다. 실험적으로, 이러한 목적을 위해서는 이 임계치를 -18dB로 잡는 것이 효과적이라는 것을 보였다.
위에서 설명된 대로, 에코 억제기(130)는 다양한 방법으로 비활성화 될 수 있다. 예를 들어, 어떤 타입의 에코 억제기(130)이던, 바이패스 스위치(bypass switch)를 사용하여 효과적으로 비활성화 할 수 있고, 절단 스위치(cut-off switch) 억제기는 이 스위치를 닫음으로서 비활성화 할 수 있다. 또한, 클립핑형 억제기는 클립핑 윈도우 사이즈를 줄임으로 비활성화 할 수 있고, 스케일링 억제기는 억제기 감쇠 성분을 단위값으로 세팅함으로서 비활성화 할 수 있다. 하이브리형 억제기는 클립핑 윈도우를 0으로 하고/또는 억제기 감쇠 성분을 단위값으로 맞춤으로서 비활성화 할 수 있다.
에코 억제기(130)는 스케일링 억제기이거나 하이브리형 억제기(즉, 에커 억제자가 억제기 입력 신호의 일부분에 감쇠 성분 α을 곱하는 장치)인 경우, 에코 대 잡음 비율 측정에 위에서 설명한 루프 이득 개념을 결합하여 추가적인 장점을 얻을 수 있다. 예를 들어, 본 발명의 실시예에서, 이득 제어 프로세서(310)는 위에서 설명한 것 처럼 음량 이득 블록(320)의 입력에서부터 에코 억제기(130)의 입력으로의 루프 이득을 계산한다. 그리고 나서, 배경 잡음의 에코를 덮기 위한 억제기 갑쇄 성분 α(즉, 감쇠성분 α으로 오디오 출력 신호(155)가 만들어지는데 이 신호는 에코 대 잡음 비율이 예를 들어 -18dB이다)를 계산한다.에코 억제기(130)가 전체 오디오 신호(145)(에코 및 말, 잡음 포함)를 감쇠하기 때문에, 본 실시예는 에코 억제기(130)에서 제거된 배경 잡음을 보충하기 위해 억제기 출력신호(135)에 듣기편한 잡음을 추정한다.
실시예에 따라, 오디오 입력에서 에코 억제기로의 에코 대 잡음 비율은 오디오 입력에서의 전체 에너지를 측정하고, 오디오 입력의 잡음 에너지를 추정함으로써 계산된다. 구체적으로 말하면, 잡음 에너지 측정값을 전체 에너지 측정값으로부터 빼서, 남은 차이(이것이 에코 에너지를 나타낸다)값을 잡음 에너지 추정값으로 나누어, 에코 대 잡음 비율 추정값을 계산해 낸다. 이 기술에 숙련된 자라면, 신호에서의 에너지 값을 측정하고 신호 내의 잡음 레벨을 측정하는 방법을 잘 알고 있을 것이다. 또한, 잡음 레벨 추정값을 계산하기 위한 개선된 방법이 유사코드로 아래에 나와 있다. 잡음 레벨 측정과 관련된 구체적인 설명은 본 발명을 이해하는 데 중요한 요소는 아니므로 더 자세한 것은 여기서는 생략한다.
양호하게도, 위에서 설명된 본 발명의 모든 측면들은, 단일 에코 억제 시스템 내로 결합되어 좀 더 세련된 에코 억제 제어 및 근단 신호의 적절한 질을 제공한다. 이 점을 설명하기 위해, 도4는 본 발명의 여러 측면을 사용하여 에코 억제기(130)의 감쇠 성분 α가 조절되는 과정에 대한 알고리즘을 도시하고 있다. 알고리즘 (400)은 루프 이득(loop gain)의 개념을 사용하기 때문에, 알고리즘 (400)은 기본적으로 스케일링 억제기와 하이브리형 억제기에 적용될 수 있다. 본 기술에 숙달된 자라면, 알고리즘(400)의 특정 일면이 위에서 설명한 모든 타입의 억제기에 적용될 수 있다는 것을 알 수 있을 것이다.
도시한 바와 같이, 알고리즘(400)은 S10단계에서 시작하여, S20단계에서 확성기 음성 검출기(210)이 원단 음성이 있다고 지시함에 따라 결정이 내려진다. 만일 없다면, 에코 억제기(130)은 통과(pass through)모드로 노여 프로세서가 S60단계에서 종료된다. 그러나, 만일 확성기 음성 검출기(210)가 원단 음성이 있다고 지시할 경우에는, 근단 음성이 있는지에 대한 결정을 S30단계에서 내린다.
만일 근단음성이 검출되지 않는다면, 미리 정의된 원단 단일 음성 목표를 달성하기 위한 값으로 감쇠 성분이 S35단계에서 계산된다. 그러나 만일 근단 음성이 검출되면, 미리 정의된 쌍방 통화 목표를 달성하기 위한 값으로 감쇠성분이 S40단계에서 계산된다. 각 경우에, S45단계에서 미리 정해진 잡음 덮음 목표(noise masking goal)를 달성하기 위한 값으로 감쇠 성분이 계산된다. 그 후에 S60단계에서 잡음 덮음에 대응하는 값(S45단계에서 계산된 값), 음성 검출에 대응하는 값(S40또는 S35에서 계산된 값) 중에서 가장 덜 엄격한(stringent)값으로 정해진다. 그리고 나서 S60단계에서 프로세스가 종료된다.
도4의 알고리즘(400)의 실시예에 다음 유사코드가 제공된다. 유사코드에서는 스케일링 또는 결합 에코 억제기가 감쇠 또는 이득 성분인 echoSuppressorGain을 가지고 동작한다고 가정하고 있다.
if farEndVoiceFlag == 0,
echoSuppressorGain = 1;
else,
if nearEndVoiceFlag == 1,
loopEchoGainGoal = -25dB
else
loopEchoGainGoal = -56dB
end
echoSuppressorGain = ...
max(loopEchoGainGlao / loopEchoGain, ...
echoToNoiseGoal/echoToNoise)
end
도4의 알고리즘을 보면, 잡음 덮음 목표(S45단계에서 계산된다)는 근단 음성이 검출되었는지 아닌지(S30에서)에 따라 계산된다. 그러나, 실제로는 실험적으로, 전단의 에코 소거기(140)이 포함되어 있을 경우에는, 감쇠 성분을 저형적인 쌍방 통화 목표에 기초하여 계산(-25dB)하는 것이, 전형적인 잡음 덮음 목표에 기초하여 계산(-18dB)하는 것 보다 항상 더 좋은 결과를 나타낸 다는 것이 보여졌다. 그러므로, 쌍방 통화가 검출되었을 경우에 잡음 덮음 목표를 위한 계산을 생략함으로써 DSP싸이클이 실제로는 줄여질 수 있다.
도4의 알고리즘(400)은 또한, 억제기의 에코 대 잡음 비율이 이미 잡음 덮음 목표치보다 아래에 있을 경우에는 에코 억제기(130)을 비활성화하지 않는다. 이것은, 실험적으로 스케일링 및 하이브리형 억제기의 경우, 에코 억제기(130)을 활성화 한 채로 두는 것이(여기서 감쇠 성분 α는 잡음 덮음 목표에 따라 계산된 것임) 부정확한 에코 및 잡음 추정치(즉, 에코 대 잡음 비율 자체를 계산하는 데 사용되는 추정치)로 인해 오차(인지할 수 있을 정도의)가 잘못 전달되는 것을 막는 데에 더 낫다는 것이 보여졌다.
컴퓨터 시뮬레이션을 통해, 본 발명의 사상에 입각하여 구성된 에코 억제 시스템이 월등하게 근단 음성의 왜곡을 줄이고 비선형 에코 억제기에 의해 발생하는 뱌경 잡음을 줄인다는 것이 보여졌다. 예를 들어, 확성기 음성 검출기(210)이 원단 음성이 없다고 나타낼 경우에 에코 억제기(130)을 비활성화하는 것은, 완벽한 결과, 즉 근단 음성 및 잡음이 왜곡되지 않고, 원단 단일 음성 환경에서의 잡음이 왜곡되지 않는 완벽한 결과를 보였다. 확성기 신호에 일정한 상수 잡음이 잇을 경우에도 성립한다.
추가로, 근단 음성이 검출되는지에 기초하여 활성 에코 억제기의 에코 억제 목표를 조정하는 것은, 쌍방 통화의 경우 근단 음성 및 잡음의 측면에서 매우 좋은 성과를 보였다(또한, 음량 제어, 음향 에코 경로 및 선형 에코 소거기가 -25dB또는 그보다 더 좋은 경우 - 이는 일반적인 경우이다 - 근단 음성 및 잡음의 측면에서 완벽한 결과를 보였다.) 활성 에코 억제기의 에코 억제 목표치를 조정하는 것은 또한, 근단 단일 음성의 경우, 확성기의 음성 검출기(210)이 음성을 잡음으로 잘못 검출하는 경우, 근단 음성 및 잡음의 측면에서 개선되었다.
더 나아가, 억제기 입력에서 에코 대 잡음 비율 측정치에 기초하여 에코 억제기를 제어하는 것은, 잡음이 많은 차 안의 환경에서, 근단 음성 및 잡음의 측면에서 개선되었다. 예를 들어, 원단 단일 음성의 경우, 근단 배경 잡음의 갑쇄가 줄어들었따. 그 결과로, 원단 사용자를 위한 듣기편한 잡음을 덜 추가해도 되게 되었고, 원단 사용자에게 들리는 배경 잡음의 특성 역시 더 잘 보존되었다. 또한, 쌍방 통화나 근단 단일 음성의 경우에도, 양쪽의 확성기 음성 검출기(210) 및 근단 음성 검출기가 잘못 동작했을 경우라도, 근단 음성나 잡음의 측면에서 개선되었다. 그러므로, 근단 잡음(즉, 자동차 핸즈프리 전화기의 경우에 들리는 길이나 교통 소음등)이 많은 근단 단일 음성의 경우, 본 발명에 의해, 확성기에 상수 잡음이 있음에도 불구하고, 근단 음성 및 잡음의 왜곡을 확실히 줄이는 세가지 방법이 제시되었다.
예를 들어, 도4의 알고리즘(400)에 대한 또다른 실시예(실제 에코 억제 시스템과 결합된 경우)가 아래에 유사코드로 설명되었다. 유사코드를 통해 32비트 디지털 신호 프로세서를 사용하여 구현된 에코 억제 시스템을 시뮬레이트 할 수 있다. 본 기술에 숙달된 자라면, 이러한 코드가 본직적으로 매우 전형적인 것이며, 하드웨어 구성에 따라 여러 방법으로 구현될 수 있음을 알 수 있다. 전형적인 에코 억제 시스템에는 위에서 언급한 미합중국 특허 출원 번호 08/852.729에서 설명된 개선된 에코 소거기의 수정 버전과, 미 합중국 특허 출원번호(_____)(제목:"통신 시스템에서 개선된 에코 억제를 위한 방법 및 장치(Methods and Apparatus for Improved Echo Suppression in Communications Systems)"(filed on even date herewith)에 설명된 AC-중앙 감쇠기의 수정버전이 포함되어 있다.
%AEC 및 ANLP 시뮬레이션을 위한 MATLAB 스크립트
%이 스크립트를 돌리기 전에, 다음 변수의 값들을 세팅하시오
% inFile = 입력파일 이름, left = 원단, right = 근단.
% outFile = 출력파일 이름, left = ANLP 출력, right = AEC 출력
%모든 파일은 DAT-Link의 raw format을 사용한다.
%estnoise.m는 잡음을 추정하기 위한 함수를 포함한다.
%용어
%EC = 에코 소거기(Echo Canceler) = 선형 에코 억제기(linear echo suppresser)
%AEC = 음향-에코 소거기(Acoustic-Echo Canceler) = 확성기-에코 소거기(loudspeaker-echo canceler)
%NLP = 비선형 프로세스(Non-Linear Process) = 잔류-에코 억제기(residual-echo suppressor) = AC-중앙 감쇠기(AC-center attenuator)
%ANLP = 음향 비선형 프로세스(Acoustic Non-Linear Process)
%VAD = 음향-활동 검출장치(Acoustic-Activity Detector)
%최대 양수 값을 분수로 나타낸 값
ONE = 32767/32768;
%원단 및 근단 신호를 담고 있는 파일을 읽는다.
fidIn = fopen(inFile, 'r');
if fidIn == -1
error(['Error opening file' inFile])
end
[LRmatrix, wordCount] = fread(fidIn, [2, inf], 'int16');
fclose(fidIn);
%갱신된 합계(integration)주기에서의 표본의 개수
FRAME_SIZE = 160;
%프레임 사이즈가 클 수록 쌍방(double-speech)-대화 및 근단(near-end) 잡음에 대한 안정성(robustness)이 크다.
%잡음은 그 합이 0으로 수렴하는 경향을 가진다.
%프레임 사이즈가 크면 수렴을 검출하는 능력도 증가된다. 왜냐하면, 비상관 잡음은 프레임 사이즈의 제곱근에 비례해서 커지는 반면 상관(correlated) 갱신(update)은 프레임사이즈와 비례해서 커지기 때문이다.
%프레임 사이즈가 작으면 변화(에코 경로, 단일->쌍방 대화)에 대한 대응시간이 짧아지고, 수렴의 속도를 빠르게 한다.
%프레임 사이즈가 작으면 또한, 모음 소리를 기각하는 능력을 증진시킨다.
%160을 사용한 이유는 프레임당 160개의 표본이 들어가는(160-samples-per-frame) TDMA전화로 포팅(porting)하기 쉽게 하기 위해서이다.
%결과적으로 나오는 10ms 프레임은 음성성분을 정적-신호 세그먼트(stationary-signal segments)로 나눌 때 거의 최적이다.
NFRAMES = floor((wordCound/2)/FRAME_SIZE); %처리할 프레임 개수
clear wordCount
NSAMPLES = NFRAMES*FRAME_SIZE; %디버그(debug)를 위한 표본-기초 벡터(sample-based vector)의 길이
%
%mic(송신) 및 스피커(수신) VAD 출력을 각각의 파일에서 로드한다. 각 파일이 없으면, 근단 및 원단 실행가능 C파일을 돌려, 접두사(prefix)가 같은 파일에 VAD 출력을 저장한다.
%
fidIn = fopen([inFile '_up_vad'], 'r');
if fidIn == -1
disp(['File =
inFile '_up_vad not found -- creating ...'])
fidOut = fopen('vad_in.raw', 'w');
fwrite(fidOut, LRmatrix(2,:), 'int16'); %송신 오디오
fclose(fidOut);
!nrsim -s=f vad_in.raw junk vad_out.bit
!rm vad_in.raw
!rm junk.flt
fidIn = fopen('vad_out.but', 'r');
if fidIn == -1
error('Error opening file = vad_out.bit')
end
micVad = fread(fidIn, NFRAMES, 'int8');
!rm vad_out.bit
fclose(fidIn);
else
micVad = fread(fidIn, NFRAMES, 'int8');
fclose(fidIn);
end
fidIn = fopen([inFile '_down_vad'], 'r');
if fidIn == -1
disp(['File=' inFile '_down_vad not found -- creating ...'])
fidOut = fopen('vad_in.raw', 'w');
fwrite(fidOut, LRmatrix(1, :), 'int16'); %수신 오디오
fclose(fidOut);
!nrsim -s=f vad_in.raw junk vad_out.bit
!rm vad_in.raw
!rm junk.flt
fidIn = fopen('vad_out.bit', 'r');
if fidIn == -1
error('Error opening file = vad_out.bit')
end
speakerVad = fread(fidIn, NFRAMES, 'int8');
!rm vad_out.bit
fclose(fidIn);
fidOut = fopen([iFile '_down_vad'], 'w');
fwrite(fidOut, speakerVad, 'int8');
fclose(fidOut);
else
speakerVd = fread(fidIn, NFRAMES, 'int8');
fclose(fidIn);
end
%입력을 -1에서 1까지로 스케일한다.
LRmatrix = LRmatrix / 22768;
%표본 샘플에 대해 누적된 오른쪽 쉬프트 값으로의 비트의 개수(Number of bits to right shift values accumulated over a frame of samples)
FRAME_BITS = ceil(log2(FRAME_SIZE));
%에너지를 정량화(quantize)하기 위해 요소를 32비트로 스케일한다.(Z8.23 포멧)
w/FRAME_SIZE = 160;
ENERGY_SCALE = 2^(31-FRAME_BITS);
%참조 지연 라인의 taps의 개수
%고-지연 tabs이 대부분 원단 신호와 비상관되고 근단 에너지만을 포함하기에 충분하게 길어야 한다.
AEC_REF_TAPS = 512;
%FIR 에코-추정 필터의 taps의 개수
AEC_COEF_TAPS = 256;
%근단 에너지 특정을 위한 갱신 벡터의 고-지연 섹션(section)의 taps의 개수
AEC_NEAR_TAPS = 128;
%자동차 잡음 표본 벡터의 길이
COMFORT_NOISE_SIZE = 128;
%최대 갱신 이득(gain)을 결정하기 위해 갱신 벡터의 최고-대-바닥(peak-to-baseline)비율의 임계치를 계산한다. [-1,-]사이에서 고르게 분포하는(uniform) 잡음의 경우, 갱신 크기(update magnitude)의 최고치의 기대값은 g*FRAME_SIZE/3이다. 그리고, 비상관 taps의 갱신 벡터의 RMS의 기대값은 g*squr(FRAME_SIZE)/3이다. 이 때, g는 에코 경로 이득값이다. 그러므로 최대 갱신 벡터의 최고-대-바닥 비율은 sqrt(FRAME_SIZE)이다.
%그러나, 음성은 잡음처럼 일정한 포락선(envelope)을 가지지 않는다. FRAME_SIZE가 갱신 벡터의 길이보다 훨씬 작기 때문에, 순간적인(burst) 음성은 종종, 최고치를 측정은 할 수 있으나 그 값이 측정된 바닥값의 범위 안에 있지 않은 갱신 벡터의 범위 안에 들어갈 수 있다. 그러므로, 실제 최고-대-바닥값 비율은 매우 클 수 있다.(>300).
#임계치를 너무 낮게 잡으면, 잡음이 있거나 쌍방 대화의 상황에서의 저 에너지 원단 신호에 대해서도 고-이득(high-gain) 갱신으로 인해 불안정한 상태를 유발할 수 있다.
%임계치를 너무 높게 잡으면, 에코-경로가 크게 변한 후의 고 에너지 원단 신호에 대해서만 갱신이 일어나므로, 적응(adaptation)이 매우 느려진다.
%실제 상황에서는 이 임계치는 양쪽을 타협해서 실험적으로 결정된다.
AEC_MAX_GAIN_THRESH = 16;
%잡음의 최고-대-RMS값은 프레임 사이즈와 무관하다. 근단 음성/잡음 및 원단의 주기적 신호를 기각하는 임계치는 실험적으로 구했다.
AEC_BASELINE_THRESH = 5.5;
%상태 게이지(status gauge)에 대한 승수(multiplier)로 사용되는 미리 계산된 상수
AEC_STATUS_GAUGE_SCALER = floor(32768/AEC_MAX_GAIN_THRESH-AEC_BASELINE_THRESH))/32769;
%FIR 계수(coefficient)를 위한 이득 프로파일(gain profile)을 생성한다.
%이 프로파일은 대략 자동차의 계수 범위의 기대치와 같다.
%이에 따라, 주기적 성분(모음)을 포함하는 갱신은 강제적으로, 적절한 지수감소(exponential decay) 특성을 따르도록 되고, 발산(divergence)을 최소화한다. 고-지연 taps의 저 이득(lower gain) 역시 계수에 대한 갱신된 잡음의 영향을 줄인다.
%프로파일의 전반적인 영향으로 인해, 불안한 상태를 초래하지 않고 고 갱신 이득을 가능하게 한다.
%모든 계수는 동적인 범위 내의 16비트의 숫자이므로, 고0지연 taps는 역시 이 프로파일의 결과로서 더 잘 정량화된다. 프로파일은 우 쉬프트 간에서의(with a right shift in between)시간에서 FIR 64 taps를 계산함으로서 구현할 수 있다.
profile = ones(AEC_COEF)TAPS, 1);
for k=2:(AEC_COEF_TAPS/64),
profile((k*64-63):(k*64))=ones(64,1)*2^(1-k);
end
%실행을 빠르게 하기 위해 디버그 벡터에 메모리를 할당한다.
aecUpdateFactor = zeros(1,NFRAMES);
aecChangeGainHist = zeros(1,NFRAMES);
aecSpeedHist = zeros(1,NFRAMES);
aecVoiceGainHist = zeros(1,NFRAMES);
aecVoiceGainBaseHist = zeros(1,NFRAMES);
aecNearRatioHist= zeros(1,NFRAMES);
aecNearGainHist = zeros(1,NFRAMES);
aecEchoGainHist = zeros(1,NFRAMES);
aecInNoiseHist = zeros(1,NFRAMES);
aecInEchoNoiseHist = zeros(1,NFRAMES);
aecInVoiceHist = zeros(1,NFRAMES);
aecInEchoVoiceHist = zeros(1,NFRAMES);
anlpInVoiceHist = zeros(1,NFRAMES);
anlpInNoiseHist = zeros(1,NFRAMES);
anlpDeltaHist = zeros(1,NFRAMES);
anlpGainHist = zeros(1,NFRAMES);
%변수 초기화
aecRef = zeros(1,AEC_REF_TAPS); %마지막에 사용함
values:
aecCoef = zeros(AEC_COEF_TAPS,1); %주석처리하시오
this
aecInNoise = FRAME_SIZE; %주석처리하시오
this
aecInEchoNoise = aecInNoise; %주석처리하시오
this
anlpInNoise = aecInNoise; %주석처리하시오
this
aecChanGain = ONE; %주석처리하시오
this
aecVoiceGain = ONE; %주석처리하시오
this
aecVoiceGainBase = aecVoiceGain; %주석처리하시오
this
aecNearGain = aecVoiceGain; %주석처리하시오
this
aecEchoGain = aecVoiceGain; %주석처리하시오
this
anlpComfortNoiseInOld = 0; %주석처리하시오
this
anlpComfortNoiseOutOld = 0; %주석처리하시오
this
anlpComfortNoise = zeros(1,COMFORT_NOISE_SIZE); %주석처리하시오
this
anlpArCoef = 0.75; %단지 기록을 위한 목적
this
aecInNoiseStateVars = [aecInNoise 0 0];
aecInEchoNoiseStateVars = [aecInEchoNoise 0 0];
anlpInNoiseStateVars = [anlpInNoise 0 0];
anlpSpeed = 1;
anlpArGain = 1-anlpArCoef;
anlpRefEnvelope = 0;
anlpOutLast = 0;
anlpNearSpeechCount = 0;
anlpNearSpeechFlag = 0;
%disp(['aecCoef(1) = ' dec2hex(aecCoef(1)*32768+(aecCoef(1)<0)*65536)])
%disp(['aecCoef(2) = ' dec2hex(aecCoef(2)*32768+(aecCoef(2)<0)*65536)])
%disp(['aecInNoise = ' dec2hex(aecInNoise*2^31)])
%disp(['anlpInNoise = ' dec2hex(anlpInNoise*2^31)])
%disp(['aecChanGain = ' dec2hex(aecChanGain*32768)])
%disp(['aecChanGain = ' dec2hex(aecChanGain*32768)])
%disp(['aecVoiceGain = ' dec2hex(aecVoiceGain*32768)])
%disp(['aecVoiceGainBase = ' dec2hex(aecVoiceGainBase*32768)])
%disp(['aecEchoGain = ' dec2hex(aecEchoGain*32768)])
%disp(['anlpComfortNoiseOutOld = ' dec2hex(anlpComfortNoiseOutOld*32768)])
%disp(['anlpArCoef = ' dec2hex(anlpInNoise*2^31)])
%disp(['anlpArGain = ' dec2hex(anlpArGain*32768)])
fidOut = fopen(outFile, 'w');
for frame=1:NFRAMES,
frame %진행상황 지시를 위해 프래임 번호를 출력한다
%
%AEC 전-프레임(pre-frame) 섹션
%
%FIR 계수 갱신을 위한 참조벡터의 taps와 근단 에너지의 계수에 사용되는 참조벡터 사이에는 차이가 있기 때문에, 참조 벡터의 매 tap마다 갱신벡터를 계산할 필요는 없다. 그러므로, 갱신 벡터는 두 목적을 위해 특별히 서브 벡터의 형새로 표현된다.
%프레임에 따라 누적되는 서브벡터를 초기화함(clear)
aecUpdate = zeros(AEC_COEF_TAPS, 1); %FIR 계수 갱신에 사용됨
aecUpdateNear = zeros(AEC_NEAR_TAPS, 1); %근단 측정을 위해 사용됨
%다른 어큐뮬레이터(accumulator)를 초기화함
aecEchoEstEnergy = 0;
%블록-소수점(block-floating-point)변수를 리셋(reset)
aecShiftPending = 0;
aecErrorShift = 0;
%송신 및 수신 PCM 오디오 표본을 받아 버퍼에 넣는다.
downlinkAudio = LRmatrix(1, (frame-1)*FRAME_SIZE+1:frame*FRAME_SIZE);
uplinkAudio = LRmatrix(2, (frame-1)*FRAME_SIZE+1:frame*FRAME_SIZE);
%AEC 근단입력 에너지를 프레임에 따라 누적한다.
aecInEnergy = sum(uplinkAudio .^2);
%에너지를 32비트로 정량화한다.
aecInEnergy = floor(aecInEnergy*ENERGY_SCALE)/ENERGY_SCALE;
%
%AEC 표본 섹션
%
for k=1:FRAME_SIZE;
%원단(확성기)표본을 참조 지연 라인으로 쉬프트시키고
%FIR 출력을 계산한다.
%DSP에서, 양쪽 작동은 한 명령으로 이루어진다.
aecRef = [downlinkAudio(k) aecRef(1:AEC_REF_TAPS-1)];
%테스트 코드 시작
%다음 코드는 주석처리된, 비트-정확 코드(bit-accurate code)를 빠르게 추정한다.
aecEchoEst = aecRef(1:AEC_COEF_TAPS)*(aecCoef.*profile);
aecEchoEst = max(min(round(aecEchoEst*32768)/32768,ONE),-1);
%테스트 코드 끝
% aecEchoEst = 0;
% for m=(AEC_COEF_TAPS/64):-1:2,
% aecEchoEst = aecEchoEst + aecRef(m*64-63:m*64)*aecCoef(m*64-63:m*64);
% aecEchoEst = max(min(aecEchoEst,ONE),-1)/2;
% % S.31포멧으로 정량화한다
% aecEchoEst = aecEchoEst+aecRef(1:64)*aecCoef(1:64);
% end
% aecEchoEst = aecEchoEst+aecRef(1:64)*aecCoef(1:64);
% aecEchoEst = max(min(aecEchoEst,ONE),-1);
% % S.15포멧으로 정량화한다.
% % 0.5에서 음수의 소수부분을 반올림할 때, 1의 보수 소수점이 2의 보수와 같이 동작하도록 하기 위해 2^(-17)을 더한다.
% aecEchoEst = round(aecEchoEst*32768+2^(-17))/32768;
% aecEchoEst = max(min(aecEchoEst, ONE),-1);
%프레임에 따라 에코-추정 에너지를 누적한다.
%작은 신호에 대한 성능을 높이고, 다른 에너지 누적 방법과 같은 방법으로 측정하기 위해, 전(full) 40비트 어큐뮬레이터(accumulator)가 루프를 돌면서 저장된다.
aecEchoEstEnergy = aecEchoEstEnergy + aecEchoEst^2;
%AEC출력값을 다음과 같이 계산한다. AEC output = enar-end(microphone)input - echo estimate.
uplinkAudio(k) = max(min(uplinkAudio(k)-aecEchoEst,ONE),-1);
%계수 갱신을 누적한다. 이 때, coef update = correlation of error(uplinkAudio(k)) and reference.
%블록 소수점 표현법을 사용한다. 이 때 aecErrorShirt는 지수로 들어가고, aecUpdate/aecUpdateNear()는 가수로 들어간다.
T = uplinkAudio(k)*2^aecErrorShift;
if aecShiftPending,
ASM = -1;
aecErrorShift = aecErrorShift - 1;
aecShiftPending = 0;
else
ASM = 0;
end
%FIR계수 갱신에 사용되는 영역을 계산한다.
aecUpdate = aecUpdate + T*aecRef(1:AEC_COEF_TAPS)';
%근단 에너지 측정에 사용되는 영역을 계산한다.
aecUpdateNear = aecUpdateNear + T*aecRef(AEC_REF_TAPS-AEC_NEAR_TAPS+1:AEC_REF_TAPS)';
%S.15포멧으로 정량화한다.
%0.5에서 음수의 소수부분을 반올림할 때, 1의 보수 소수점이 2의 보수와 같이 동작하도록 하기 위해 2^(-17)을 더한다.
aecUpdate = round(aecUpdate*32768+2^(-17))/32768;
aecUpdateNear = round(aecUpdateNear*32768+2^(-17))/32768;
aecUpdate = max(min(aecUpdate, ONE),-1);
aecUpdateNear = max(min(aecUpdateNear, ONE),-1);
aecUpdate = aecUpdate*2^ASM;
aecUpdateNear = aecUpdateNear*2^ASM;
%가능한 우쉬프트(right shift)후에 S.15포멧으로 정량화한다.
aecUpdate = floor(aecUpdate*32768)/32768;
aecUpdateNear = floor(aecUpdateNear*32768)/32768;
%갱신 벡터의 최고 제곱값을 찾는다 (첫 128 taps에서 가정한다)
%목표는 최고 절대값을 구하는 것이다. 하지만, 최고 제곱값이 DSP에서는, 프레임의 마지막에서의 제곱값을 가지고도, 더 적은 싸이클을 취한다.
aecUpdatePeak2 = max(aecUpdate(1:128).^2);
%다음 루프에서 갱신값을 2로 나눠야 할 필요가 잇을 때는 지시자를 플래그 해 둔다(flag indicates).
aecShiftPending = aecUpdatePeak2 > 0.25; %0.26 = 0.5^2
end
%에너지를 32비트로 정량화한다
aecEchoEstEnergy = floor(aecEchoEstEnergy*ENERGY_SCALE)/ENERGY_SCALE;
%
% AEC 후-프레임(post-frame) 섹션
%
aecOut = uplinkAudio; %디버그를 위해 출력을 파일로 저장한다.
%AEC-출력 에너지를 프레임에 따라 누적한다.
aecOutEnergy = sum(uplinkAudio.^2);
%에너지를 32비트로 정량화한다
aecEchoEstEnergy = floor(aecEchoEstEnergy*ENERGY_SCALE)/ENERGY_SCALE;
%실제 참조 에너지값은 갱신 벡터의 각 요소(element)마다 다르다. aecUpdate(1)은 aecRef(1)로부터의 에너지값을 사용할 것이고, aecUpdate(2)는 aecRef(2)로부터의 에너지를 사용할 것이고,.. 등이다. 복잡도를 줄이기 위해, 참조 에너지를 표현하기 위해 하나의 번호만을 사용한다.
%너무 작은 값을 사용하여, 적응 속도를 결정하거나 갱신값을 정규화(NLMS)하기 위해, 채널 에코 이득을 측정하는 데에 참조 에너지를 사용할 경우, 불안한 상태를 유발할 수 있다.
%여기서 구현된 적절한 해결책은 profile=1에서 말단점(endpoints)의 최대값을 사용하는 것이다.
aecRefEnergy - max(sum(aecRef(1:FRAME_SIZE).^2), sum(aecRef(64:FRAME_SIZE+63).^2));
%Z8.7포멧으로 정량화한다.
aecRefEnergy = floor(aecRefEnergy*128)/128;
%오차아 원단 신호 사이의 상관(correlation)이 0이라고 기대될 때, 갱신 바닥값을 고-지연 요소의 RMS로서 측정한다.
%aecUpdateBase값이 aecPeakToBase보다 크도록 보장하기 위해 결과에 1 LSB를 더한다. 이렇게 하면 고 에코 상관의 영향을 없앨 수 있다.
%내림 연산 후에 1 LSB를 더함으로서 모든 잘려나간 비트가 0인 경우만 제외하고(이 경우는 매우 드물다) 올림 연산과 같은 결과를 얻는다.
aecUpdateBase = floor(aecUpdateBase*2^31)/2^31;
aecUpdateBase = sqrt(aecUpdateBase);
%Z.15포멧으로 정량화한다
aecUpdateBase = floor(aecUpdateBase*32768+1)/32768;
%갱신 벡터의 최고 크기를 찾는다.
aecUpdatePeak = sqrt(aecUpdatePeak2);
%갱신된 최고-대-바닥 비율을 계산한다.
aecPeakToBase = aecUpdatePeak/aecUpdateBase;
%4자리 소수 비트로 충분하므로 Z11.4포멧으로 정량화한다.
aecPeakToBase = floor(aecPeakToBase*16)/16;
%상태 게이지(범위=[0,ONE])를 갱신 최고-대-바닥 비율로부터 계산한다.
%이 게이지는, 수신스트림 프로세싱에 사용되는 것으로, 프레임 사이즈와 바닥 임계치가 변하여 최고-때-바닥 비율이 변하더라고 같게 유지된다.
%근단 음성/잡음 또는 원단 주기적 신호(모음)에 대해 게이지<0.1
% 예를 들어, 주파수가 941Hz 와 1209Hz일 때, DTMF 톤의 첫 프레임을 찾아 aecPeakToBase=3.5를 생성하고, 이로 인해 aecStatusGauge=0이 된다.
%쌍방 통화의 경우, 게이티<0.4;
%원단에서 단일 음성의 경우
% gauge=ONE, 잡음에 상관없이 소거기가 모두 포함되지 않았을 때.
% 만일 근단이 조용하면, 거의 수렴할 때 까지 gauge=ONE
% 소거기가 수렴하면, 에너지가 근단 잡음 레벨보다 큰 잔류 에코만이 gauge=ONE이도록 한다.
% 그러므로, 근단 잡음은 갱신을 조금만 일으키고, 갱신 이득은 줄이지 않는다.
aecStatusGauge = (aecPeakToBase-AEC_BASELINE_THRESH)*AEC_STATUS_GAUGE_SCALER;
aecStatusGauge = max(min(aecStatusGauge,ONE),0);
%Z.15포멧으로 정량화한다.
aecStatusGauge = floor(aecStatusGauge*32768)/32768;
%AEC입력에서 잡음 프레임 에너지를 추정한다.
[confirmedNoVoiceFlag, aecInNoiseStateVars] = estnoise(aecInEnergy, (micVad(frame)==0)&(aecStatusGauge==0),aecInNoiseStateVars);
aecInNoise=aecIOnNoiseStateVars(1);
aecInNoise %상태를 보기 위해 출력한다.
aecInNoiseHist(frame)=aecInNoise; %디버그를 위해 저장해둔다.
%AEC 입력(체널 이득)에서 에코 이득을 추정한다.
%원단 단일 음성의 경우만 추정치를 갱신한다
%(speakerVad(frame)==1) & (aecStatusGauge>0.3), AEC 입력 추정값에는 음성(aecInVoice>aecInNoise*8)만 들어있는 반면 참조 추정값에는 음성과 잡음이 들어있더라도 참조값 추정이 정확한 경우, 또한, 참조 에너지가 정량화에 의해 크게 영향을 받지 않은 경우(aecRefEnergy>=10/128)
%순간적인 이득 측정값은 매우 정확하지는 않은데, 이는 시간이 잘못 배열되잇거나(misalignment) 스펙트럼이 변화하기 때문이다.
%그러므로, 평균을 내는 프로세스가 필요하다.
%에코 소거기 필터 계수의 norm은 체널 이득에 대한 훌륭한 장기(long-term) 추정값이다. 그러나, 이것은 에코 경로의 변화를 추분히 빨리 따라가지는 못한다. 또한, 체널 이득 추정값에 따라 선형 에코 소거기의 속도가 조절되기 때문에, 추정값이 선형 에코 소거기로부터 독립적일수록 안정성이 증가된다. 그러므로 다음과 같은 스킴(scheme)이 사용된다.
%순간 추정치(aecChanGainTrial)이 추정치(aecChanGain)보다 작으면, 추정치를 지수적으로 감소시킨다.
%적응속도를 빨리 하기 위해, 오차가 50%보다 크면 추정치는 순간 추정치로 직접적으로 정해지고, 오차가 12.5%보다 크면 추정치는 비율적으로 낮춰진다. 즉,
%(aecChanGain-aecChanGainTrial)/4>aecChanGain/32 for (aecChanGain-aecChanGainTrial>aecChanGain/8=aecChanGain*0.125.
%순간 추정치가 추정치보다 크면, 추정치가 근단 음성에 의해 명확히 지배되지 않는 경우(aecChanGainTrial<2)에만, 추정치를 지수적으로 증가시킨다.
%(aecChanGainTrial<2*aecChanGain)과 같은 상대적 비교를 사용하는 것은 효과가 없다. 왜냐하면, 실제 체널 이득이 빨리 증가할 때(jump)는 갱신이 일어나지 않기 때문이다.
%증가시킬때의 시간 상수(pump-up time contant)를 감소시킬때의 시간상수(jump-down constant)의 1/8로 하는 것은 순간 추정치에서의 근단 음성을 허용(tolerate)하는 데 도움을 준다.
%근단 음성와 체널 에코 이득이 악화댈 때 사이를 구분하는 것은 어려운 일이다.
%여기서는 증가시킬 때의 시간 상수에 따라 추적 비율(tracking rate)를 결정한다. 그리고, 이것은 실험적으로 결정된 것이다.
aecInVoice = max(0, aecInEnergy-aecInNoise);
aecInVoiceHist(frame) = aeInVoice;
if(speakerVad(frame)==1) & (aecStatusGauge>0.3) & ...
(aecInVoice>aecInNoise*8) & (aecRefEnergy>=10/128),
%aecInVoice을 4Z8.20포멧으로 정량화하여 제수(devidend)가 몫(quotient)에 대한 원하는 스케이을 얻을 수 있도록 한다.
aecChanGainTrial = floor(aecInVoice*2^20)/2^20/aecRefEnergy;
%한계 몫을 Z2.13포멧으로 정량화한다.
aecChanGainTrial = min(4*ONE, floor(aecChanGainTrial *2^13)/2^13);
%몫의 제곱근을 계산한다.
aecChanGainTrial = sqrt(aecChanGainTrial);
%제곱근을 Z1.14포멧으로 정량화한다.
aecChanGainTrial = floor(aecChanGainTrial *2^14)/2^14;
if(aecChanGainTrial<aecChanGain/2),
aecChanGain = aecChanGainTrial;
elseif (aecChanGain>aecChanGainTrial),
aecChanGain = aecChanGain - max((aecChanGain-aecChanGainTrial)/4, aecChanGain/32);
elseif(aecChanGainTrial<2*ONE)
aecChanGain = min(ONE, aecChanGain+max(aecChanGain/256, 2^(-11)));
end
%Z.15포멧으로 정량화한다.
aecChanGain = floor(aecChanGain*32768)/32768;
%디버그를 위해 저장해 둔다.
aecChanGainHist(frame) = aecChanGainTrial;
else
aecChanGainHist(frame) = ONE;
end
aecChanGain %상태를 보이기 위해 출력한다.
aecSpeedHist(frame) = aecChanGain %디버그를 위해 저장해 둔다
%갱신 이득을 결정한다
%이득이 ONE보다 작거나 같은 한, 적응 속도 상수(원단 신호 진폭에 독립적임)를 만들기 위해 NLMS를 사용한다.
%max함수를 사용하면 분모에 1을 더하는 것 보다 수렴속도가 빠른데, 이는 결과 이득값이 더 크기 때문이다.
%근단 잡음 및/또는 음성이 있을 때는, AEC 참조값 및 근단입력 에너지를 사용하는 것은, 이득을 정규화하는데 제약을 가한다.
%AEC근단 입력 에너지 값을 사용하는 대신 AEC출력 에너지 값을 사용하지 않는데, 이는 수렴 후에는 더 높은 이득이 필요치 않으며, AEC 갱신 이득값을 제어하기 위헤 AEC출력에 기초한 다른 파라미터(parameter)를 사용하지 않는 것이 안정성을 제공하기 때문이다.
%마이크로폰에 오버로드(overload)가 걸리는 것을 피하기 위해, aecInEnergy는 근단 음성 또는 잡음과 함께 aecRefEnergy보다 작아야 한다.(왜냐하면 마이크로폰 이득은 제일 큰 근단 음성 레벨에 따라 결정되기 때문이다.)
%근단의 작은 잡음과 함께 원단에서 단일 음성이 있다고 확신할 수 있으면 에너지에 곱하는 값은 8로 결정한다. (aecInEnergy/16>=aecOutEnergy)
%그렇지 안으면, 16으로 결정된다. 그러므로 적응은 자동차 안이 조용할 때 더 빠르다.
%에너지에 곱하는 값이 너무 작으면 안정성이 떨어져서, 적응이 잘못된 방향으로 진행되고 에코 소거기 출력값에 스파이크(spike)가 생기게 된다.
%적응이 잘못된 방향으로 진행되면, 에코 경로가 변화할 때의 원단 단일 음성와 근단 음성 사이의 차이가 생기는 것을 방해한다.
%에너지에 곱하는 값이 너무 크면, 진동(perturbation) 바로 후에 에코 이득이 증가한다.
%분자(numerator)에서는, 조건에 따라 이득이 달라지게 하는 게이지를 사용한다. 또한 채널로의 적응 속도를 최적화하기 위해 채널 에코 이득을 곱한는 값으로 사용한다.
%이 곱하는 값(multiplier)없이는 고 채널 이득의 경우 적응이 원하는 것보다 느려지거나 저 체널 이득의 경우 불안정해지게 된다.
%에너지 값에 기초한 체널 이득을 사용하는 대신 늑응 필터 계수의 norm값을 사용하면, 장기간적인 관점에서는 더 정확하고 일정한 추정을 할 수 있으나, 단기적인 관점에서는 에코 경로가 변화한 후에 속도와 안정성에 대한 타협을 봐야 한다.
if(aecInEnergy/16>=aecOutEnergy)
aecDenon = max(1,8*max(aecRefEnergymaecInEnergy));
%디버그를 위해 성분값을 게이지의 음수값과 같게 한다
aecUpdateFactor(frame) = -aecStatusGaute;
else
aecDenom = max(1,16*max(aecRefEnergy,aecInEnergy));
%디버그를 위해 성분값을 게이지 값과 같게 한다.
aecUpdateFactor(frame) = aecStatusGauge;
end
%Z12.3포멧으로 정량화한다.
aecDenom = floor(8*aecDenom)/8;
aecNumber = aecChanGain*aecStatusGauge;
%22Z.18포멧으로 정량화한다.
aecNumber = floor(aecNumber *2^18)/2^18;
aecUpdateGain = min(aecNumber/aecDenom, ONE);
%Z.15포멧으로 정량화한다.
aecUpdateGain = floor(aecUpdateGain*32768)
%적응적 이득을 이용하여 갱신 벡터를 상관 벡터로 더한다.
%aecCoef를 FIR 상관계수로 사용하기 전에 aecCoef에 프로파일을 곱한다.
aefCoef = aecCoef + (aecUpdate * 2^(-aecErrorShift) * aecUpdateGain);
%S.15포멧으로 정량화한다.
%0.5에서 음수의 소수부분을 반올림할 때, 1의 보수 소수점이 2의 보수와 같이 동작하도록 하기 위해 2^(-17)을 더한다.
aecCoef = round(aecCoef * 32768 * 2^17))/32768;
aecCoef = max(min(aecCoef,ONE),-1);
%잡음 억제기가 여기서부터 동작하여 송신오디오를 처리한다.
%aecAudio와 aecUpdateNear를 사용하면, 한 서브루틴 내에서, 오버레이(overlay)를 위해 사용할 수 있도록 임시 메모리에 저장될 수 있다.
%
%ANLP 전-프레임(pre-frame) 섹션
%
%ANLP입력에서 에너지를 누적하는데 이 때 ANLP입력은 잡음 억제기를 통하여 AEC출력으로 연결된다.
%억제기를 통한 AEC출력
anlpInEnergy = sum(uplinkAudot .^2);
%에너지를 32비트로 정량화한다
aecEchoEstEnergy = floor(aecEchoEstEnergy*ENERGY_SCALE)/ENERGY_SCALE;
%ANLP입력에서 잡음 프레임 에너지값을 추정한다.
%에코 추정값이 확성기 신호로 나온 다음부터 speakerVad를 이용한다.
[confirmedNoVoiceFlag, aecInNoiseStateVars] = estnoise(aecInEnergy, (micVad(frame)==0)&(aecStatusGauge==0),aecInNoiseStateVars);
aecInNoise=aecIOnNoiseStateVars(1);
aecInNoiseHist(frame) = anlpInNoise; %디버그를 위해 저장해 둔다
%어떤 음성도 확정되지(confirm) 않았을 때, 듣기편한 잡음을 계산한다.
if confirmedNoVoiceFlag,
anlpComfortNoise = iplinkAudio(1:COMFORT_NOISE_SIZE);
%NLMS알고리즘을 사용하여 일차 다음과 같은 형태의 ARMA 잡음 모델에서 anlpArCoef를 추정한다.
% (1-anlpArCoef)*(1 + 0,8125*Z^-1)/(1-anlpArCoef*Z^-1).
%이 ARMA모델은 무용잡음(white noise)를 필터하여 자동차 잡음처럼 들리는 잡음을 만들어 내는 데 이용된다.
%NLMS알고리즘을 통해 다음 수식을 최소화한다.
% error = uplinkAudio * (1-anlpArCoef*Z-1)/(1+ 0,8125*Z^-1).
%오차와 uplinkAudio*Z^-1간의 상관계수는 상관계수 추정치로 갱신된다.
%anlpInEnergy는 갱신 이득을 정규화하는데 사용되어, 레벨치에 상관 없는 적응비율을 제공하는데 사용된다.
%MIPS를 저장하기 위해 루프 밖에서 0이 아닌 분모를 계산한다.
anlpDenom = 4 * max(1/128, floor(anlpInEnergy*128)/128);
error = 0;
for i=1:FRAME_SIZE,
error = -0.8125 * error;
%5S4.31포맷으로 정량화한다 (최대는 10*uplinkAudio)
error = floor(error * 2^31)/2^31;
error = error + uplinkAudio(i-1:i) * [-anlpArCoef;1];
quotient = uplinkAudio(i-1:i-1) * floor(error * 2^12)/2^12 / anlpDenom;
quotient = max(min(quotient, ONE), -1);
%S.15포맷으로 정량화한다
quotient = floor(quotient * 32768) / 32768;
anlpArCoef = anlpArCoef +quotient;
anlpArCoef = max(min(anlpArCoef,ONE),-1);
end
anlpArGain = 1 - anlpArGain;
%디버그를 위해 듣기편한 잡음의 주파수 반응을 플로팅(plotting)한다.
% plot((0:8191)/8191*4000,...
% 20*log10(avs(freqz(anlpArGain*[1 0.8125], [1-anlpArCoef], 8192))))
% axis([0 4000 -40 10])
% pause(1)
end
%AEC입력에서 에코의 잡음 프레임 에너지를 추정한다.
%에코 추정치가 확성기 신호에서 나오므로, speakerVad를 사용한다.
[confirmedNoVoiceFlag, aecInNoiseStateVars] = estnoise(aecInEnergy, (micVad(frame)==0)&(aecStatusGauge==0),aecInNoiseStateVars);
aecInEchoNoise(frame)=aecInEchoNoiseStateVars(1); %디버그를 위해 저장한다.
aecInEchoNoiseHist(frame)=aecInEchoNoise; %디버그를 위해 저장한다.
TestHist(frame)=aecInEchoNoiseStateVars(2); %디버그를 위해 저장한다.
TestHist(frame)=aecInEchoNoiseStateVars(3); %디버그를 위해 저장한다.
aecInNoiseStateVars %상태를 보기 위해 출력한다.
%음성 에너지 추정값을 추정한다. 0보다 작아지지 않도록 한다.
aecInEchoVoice = max(0, aecInEchoEnergy - aecInEchoVoice);
aecInEchoVoiceHist(frame) = aecInEchoVoice;
aecNearVoice = max(0, aecInEchoVoice - aecInEchoEnergy);
anlpInVoice = max(0, anlpInEnergy - anlpInNoise);
anlpInEchoVoiceHist(frame) = anlpInVoice;
%선형 에코 소거기의 바닥 에코-이득 추정치를 송신한다.
%이를 근단 음성을 검출하기 위한 순간 에코 이득값과 비교하는 데와, 근단 음성 동안의 ANLP이득값에 사용된다.
%순간 에코 이득이 나빠질 때, 추적할 수 있을 정도로 빨리 송신된다.
%흘려보냄(leakage)은 에코 경로가 바뀔 때 원단 단일 음성 동안에 근단 음성을 잘못 검출하는 것을 막기 위한 빠른 추적(tracking)과, 원단 음성/잡음이 있는 동안의 근단 음성/잡음의 왜곡을 최소화 하는 것과 타협접에서 경험적으로 결정된다.
%에코 경로가 변한 후에 원단 단일 음성이 시작될 때,
%aecNearGain이 낮아지고, 얼마정도 높아졌다가 다시 낮아질 수 있다.
%만일, aecNearGain이 aecVoiceGainBase보다 충분히 커지면, 근단 음성이 검출된다.
%이렇게 되면, 이를 방지하기 위해 aecVoiceGainBase의 흘려보냄(leakage)이 증가될 수 있다.
%흘려보냄 상수는 5/4096으로, 충분한 추적 속도를 위해 경험적으로 결정되었다.
%그러나, 흘려보냄이 증가되면 쌍방 음성동안에는 근단 음성의 검출정도가 낮아진다.
aecVoiceGainBase = min(aecVoiceGainVase + 1/8192, ONE);
%선형 에코 소거기의, 채널이득을 제외시킨 음성 이득을 측정한다.
%채널 이득을 포함시키면 근단 음성 검출이 어려워 질 수 있다.
%선형 에코 소거기의 입출력에서의 음성 에너지의 비율의 제곱근(root)을 계산한다.
%이러한 직접적인(raw) 측정값은 음성이 근단에서 오든 원단에서 오든 양쪽에서 오든지에 무관하다.
%선형 에코 소거기의 출력이 ANLP입력에서 잡힌다. 왜냐하면, 신호는 잡음 억제기를 통과하여 측정값이 더 정확해 지기 때문이다.
%에너지 측정값에는 에코에서의 확성기 왜곡이 포함되는데, 이 에코가 상관계수를 넘어서면(which cross correlation) 포함하지 않는다.
%에코 소거기의 입출력에서의 에너지 값은 또한, 에코 소거기 출력을 참조값과 비교할 때 발생되는 시간-재배열(time-alignment, 채널의 지연때문에 발생하는 것)이 없다.
%이득은, 정량화에 의해 값이 변하지 않았을 때(aecInVoce>8/2^7)와, 음성이 존재할 때(aecInVoice>aecInNoise*8), 그리고 잔류 에코값을 특정할 수 있을 때(anlpInVoice>anlpInNoise/2)만 측정한다.
%측정값의 정확도는 원단 신호의 주기적 성분이라고 해서 감소하지는 않는다.
if(aecInVoice>max(8/2^7m aecInNoise*8)) & ...
(anlpInVoice>anlpInNoise/2),
aecVoiceGain = min(ONE, sqrt(anlpInVoice/(floor(aecInVoice*2^7)/2^7)));
%Z.15포맷으로 정량화한다.
aecVoiceGain = floor(aecVoiceGain*32768)/32768;
%근단 음성의 전체 음성에 대한 비율을 측정한다.
%이 값은 에코 측정치의 에너지값에만 의존하고 출력에서 에코가 얼마나 잘 소거되었는지에는 의존하지 않기 때문에, 이 값에는 원단 단일 음성의 경우 에코 경로가 바뀜에 따른 지시(indication)가 잘못되는 경우가 별로 없다.
%그러나, aecVoiceGain과 같이, 근단음성에 대한 잘못된 지시는 소거기가 전반적으로 훈련되지 않았을 경우에 많이 일어난다.
%일반적으로 이 비율값에는 제곱근값이 포함되는데, 이는 음성 측정값이 에너지 단위기 때문이다.
%그러나, 에너지 비율을 직접적으로 사용하면, 근단 음성과 소거기의 미숙한 훈련 사이의 차이가 커질 수 있다.
%이것으로 MIPS를 단축시킬 수 있다.
aecNearRatio = min(ONE, aecNearVoce/(floor(aecInVoice*2^7)/2^7));
%Z.15포맷으로 정량화한다.
aecNearRatio = floor(aecNearRation*32768)/32768;
%원단 음성이 있는 동안에, 선형 에코 소거기의 에코 이득 측정치의 바닥값을 측정한다.
%원단 단일 음성이 에코 이득(잡음이 아닌)을 추적할 수 있을 정도로 파라미터값이 확실한 정도로 존재할 때(aecStausGauge>0.1)면 항상 이 값을 측정한다.
%그렇지 않으면, 에코가 들릴 수 있다.
%음성 이득이 바닥 측정치보다 작으면 바닥 에코 이득 측정치를 갱신한다. 왜냐하면, 이는 원단 단일음성일 가능성이 높다는 것을 나타내기 때문이다.
%흘려보냄을 이용하되 바닥값보다 음성 이득이 높은 경우에는 바닥값이 음성 이득을 추적하지 않도록 하면, 바닥값은 잡음 및 근단 음성에 대해 안정성(robist)이 크다.
if(aecStatusGauge>0.1)
aecVoiceGainBase - min(aecVoiceGainBase, aecVoiceGain);
end
%근단 음성 동안에는 선형 에코 소거기의 음성을 측정하고, 원단 단일 음성 동안에는 이를 리셋한다(음성 이득의 최고치를 취한다).
%이는, 쌍방 음성을 검출하기 위한 음성 이득 바닥값과 비교하는 데에 사용된다.
%그 근단 음성이 있다고 지시하는 것은 에코 소거기의 게이지가 낮고(aecStatusGauge<0.3), 에코 소거기 출력에 음성이 잔류 에코와 같지 않을 정도(anlpInVoice<anlpInNoise*8)로 충본한 에너지를 포함하는 경우를 말한다.
%원단 음성의 경우에는 케이지가 주기적 성분으로 인해 낮을 수 있다는 것을 상기하라.
%그러므로, 에코 경로의 변화로 인해 음성 이득이 갑자기 악화되는 경우와 근단 음성이 있어서 확성기 왜곡이 생기는 경우를 구분할 또다른 방법이 필요하다.
%원단 단일 음성의 경우 음성 이득이 갑자기 악화되는 경우에는 그 주기가 짧은 경향이 있다. 그러므로, 이 파라미터가 증가하는 경우를 필터링하면, 원단 단일음성의 경우를 기각할 수 있다.
%이 필터 시간 상수는 원단 단일 음성을 더 많이 기각하느냐 아니면 쌍방 인지 속도를 높이느냐에 대한 타협점에서 경험적으로 결정된다.
aecNearGainLast = aecNearGain;
aecNearGain = min(aecNEarGain, AecVoiceGain);
if(aecStatusGauge<0.3) & (anlpInVoice>anmpInNoise*8),
aecNearGain = aecNearGain + (aecVoiceGain-aecNearGain)/8;
%Z.15포맷으로 정량화한다.
aecNearGain = floor(aecNEarGain*32768)/32768;
end
%근단 음성의 경우 이 세가지 검출방법중 하나를 사용한다.
%각각의 방법은 특정 상황에 따라 근단 음성에 더 민감하거나 덜 민감하거나 하다.
%모든 검출은 전체 음성이 절대적인 어떤 레벨보다 충분히 크거나, 잡음만 존재하는 상황에서 잡음을 내림하여 기각하는 경우에만 일어난다.
%방법 1.
%(aecInEchoVoice<aecInVoice/4)는 (aecNearRatio >= 0.75)와 같은 말이다.
%그러나 전자는 정량화에 덜 민감하다.
%근단 단일 음성의 레벨이 낮은 경우에는 aecNearRatio에 스파이크가 종종 일어난다.
%그러므로, 이 경우의 잘못된 검출을 막기 위해 임계치가 높게 설정되어야 한다.
%이 검출 방법을 사용할 수 있는 단 하나의 조건은, statusgauge=0이고 음성 이득 바닥값이 0.4625=15155/32768qhek skwdkdi gkseksms rjtdlek.
%후자의 임계치는 소거기가 충분히 훈련되지 않았을 경우에 잘못 검출이 일어나는 것과, 소거기 훈련이 시작되자 마자 가능한 한 빨리 쌍방 음성을 얼마나 빨리 검출하느냐에 대한 타협점에서 결정된다.
%
%방법 2.
%(aecInVoice>32/2^7 & anlpInVoice > anlpInNoise*8)은 저레벨 음성을 기각한다.
%이렇게 함으로서, 근단 음성의 전체 음성에 대한 비율에 더 민감하게 검출할 수 있다.
%즉, 받아들이는 조건을 status gauge=0으로 함으로, 원단 단일 음성을 기각하는 효과를 높인다.
%근단 음성에 대한 민감도는 aaecNoiceGainBase의 임계치를 변화시키면서 최적화한다.
%스케일링 계수 및 오프셋(offset)은 소거기가 충분히 훈련되지 않아 잘못된 검출을 하는 것을 얼마나 피하느냐와, 소거기 훈련이 시작된 후 얼마나 민감하게 근단 음성을 검출하느냐의 타협점에서 결정된다.
%
%방법 3.
%에코 억제가 갑자기 지속적으로 악화되는 경우, aecNearGain과 aecVoiceGainBase를 비고함으로 근단 음성을 검출할 수 있다.
%왜냐하면, aecVoiceGainBAse는 갑자기 일어나는 변화에는 반응하지 않고, aecNearGain은 검출의 지속성을 확인하기 위해 필터를 사용하기 때문이다.
%aecNearGain을 계산하기 위해 필터를 사용하기 때문에, 조건이 좀더 완화된다. 이로 인해, 근단 음성에 더 민감해 질 수 있다. 이러한 조건에는 status gauge>0.3 (=0이 아니라)이고 그 음성에 대한 최소 절대 레벨이 증가하지 않는다는 조건이 포함된다.
%에코 경로가 변화한 다음, 원단 단일 음성이 시작될 때, aecNearGain는 떨어질 수 있지만, 어느 짧은 시간동안에는 aecVoiceGainBase보다 높은 곳에서 시작된다.
%이 경우 들릴 수 있는 에코를 피하기 위해, 근단 음성은 aecNearGain이 그 마지막 값보다 큰 경우에만 검출된다.
if((aecStatusGauge==0) & (aecInEchoVoice<aecInVoice/4)&...
(aecVoiceGainBase < 15155/32768)) | ...
(aecSTatusGauge==0) & (aecInVoice>32/2^7) & ///
(anlpInVoice>anlpInNoise*8) & ...
(aecNearRatio - aecVoiceGainBase*1.5 >= 9830/32768)) | ...
((aecNearGAin - aecVoiceGainBase >= 6554/32768) & ...
(aecNearGain > aecNEarGAinLast)),
%근단 음성이 검출됨
%만일 프레임에서 근단 음성의 새 주기가 시작되면(끊어지는 시간이 만료되고 마지막 프레임에 포함된 음성에 잡음만 있을 경우), 선형 에코 소거기의 에코 이득을 에코 이득 측정값의 바닥값으로 맞춘다.
%이는 근단 음성의 주기가 시작되는 경우만 이렇게 하여, 바닥값을 갱신 없이 흘려보냄으로 인한 왜곡을 증가시키기 보다는, 잔류-에코 억제기의 감쇠를 일정하게 유지시킨다.
if(anlpNearSpeechCount==0) & (anlpNearSpeechFlag == 0),
aecEchoGain = aecVoiceGAinBAse;
end
%플래그를 셋(set)하여, 음성을 포함한 마지막 주기에 근단 음성이 포함되어 있었다는 것을 지시한다.
%음성이 검출되지 않는 프레임이 지속되는 동안 이것을 유지한다.
anlpNearSpeechFlag = 1;
%근단 음성의 끊어지는 시간(hang-time) 카운터를 리셋한다. 0이 아니면, anlpNearSpeechFlag를 덮어써서, 음성 에너지가 검출되기에는 너무 낮을 때 또는 쌍방 통화동안에, 근단 음성의 잔류 에코 억제기에 의한 왜곡을 최소화한다.
%이 카운터가 원단 단일 음성이 검출될 때만 시작된다면, 원단 음성 동안의 원단 음성이 끊기는 것을 줄일 수 있다.
%그러나, 원단의 사람은, 그/그녀가 근단 사용자의 말이 끝난 후 말을 시작할 때마다 긴 시간의 정적 후에 에코를 듣게 될 것이다.
%근단 음성에서 원단 단일 음성로 빨리 전환이 일어날 때(가령, 근단의 사람이 원단 사람이 말하는 중간에 말할 때) 끊기는 시간(hang-up time)에 의해 원단 사용자가 에코(-25dB)를 듣는 짧은 주기가 유발된다. 이러한 인공적인 에코는 어느정도 가치가 있는데, 왜냐하면, 끊기는 시간에 의해 쌍방 통화 동안에 끊김을 크게 줄이기 때문이다.
anlpNearSpeechCount = 25; %25*20ms = 500ms hangtime
end
end
%에코 추정 음성 에너지가 적어도 근단 음성 에너지의 15/16이면, 이 프레임에는 원단 에코 음성만 포함되어 있다고 가정하고, 이 근단 음성 플래그(flag)를 리셋한다. 만일 근단음성 끊김시간 카운터가 이미 만료되었다면, 잔류 에코 소거기는 즉시 원단 단일음성 모드로 전환한다. 그렇지 않으면, 잔류 에코 억제기는 근단음성 끊김시간 카운터가 만료될 때 원단 단일 음성 모드로 전환된다.
%근단 음성이 카운터가 진행중인 동안에 다시 검출될 수 있고, 그러면 잔류 에코 소거기가 카운터가 한 번 만료되면 근단 음성 모드에 그대로 있다는 것을 인지하라.
%이 검출 스킴은 32비트 숫자 비교를 수행하고, 에너지 레벨, 상태 게이지, 또는 전단계 프레임으로 부터의 측정값(잡음 추정값 제외)에 기초한 만족조건(qualifier)을 사용하지 않는다. 그러므로 이 스킴은 안정적이라기 보다는 민감하다. 이 스킴이 원단 음성 검출에 실패한다면, 원단의 사용자는 그/그녀가 근단 사용자의 말 후에 말하기 시작했을 때 좀 긴 정적 후에 에코를 듣게 될 것이다.
if(aecInEchoVoice>(aecInVoice-aecInVoice/16)),
anlpNearSpeechFlag = 0;
end
%만일 근단음성 끊김시간 카운터가 만료되었으면, 음성을 포함한 마지막 프레임은 에코일 뿐이다. 그러면 선형 에코 소거기 에코 이득값을 마지막으로 측정된 선형 에코 소거기 음성 이득값으로 맞춘다.
%이것은 근단 음성이 없다고 가정하여, 잔류 에코 억제기가 모든 음성을 억제하려 할 것임을 가정한다. 이 테스트는 anlpNearSpeechFlag를 초기화(clear)하여 aecEchoGain이 결정을 즉시 반영하는 것 이후이다.
if(anlpNearSpeechCount==0) & (anlpNearSpeechFlag == 0),
aecEchoGain = aecVoiceGain;
end
aecVoiceGainHist(frame) = aecVoiceGain; %디버그를 위해 저장해 둔다
aecVoiceGainBAse %상태를 보기 위해 출력한다.
aecVoiceGainBaseHist(frame) = aecVoiceGainBase; %디버그를 위해 저장해 둔다
aecEchoGain %상태를 보기 위해 출력한다.
aecEchoGainHist(frame) = aecEchoGain; %디버그를 위해 저장해 둔다
aecNearRatioHist(frame) = aecNearRatio; %디버그를 위해 저장해 둔다
aecNearGainHist(frame) = aecNearGain; %디버그를 위해 저장해 둔다
anlpNearSpeechCount %상태를 보기 위해 출력한다.
anlpNearSpeechFlag %상태를 보기 위해 출력한다.
%ANLP까지 루프 에코 이득을 계산한다. ANLP는 필요할 때 감쇠를 하여, 시스템에 대한 전체 루프 에코 억제의 목표를 달성한다.
%?는 음량조절을 통한다.
%aecChanGain은 확성기에서 나와 마이크로폰으로 들어간다 -- 이것이 채널이다.
%aecEchoGain은 선형 에코 소거기의 입력에서 출력으로 들어간다.
aecLoopEchoGain = aecChanGain * aecEchoGain; %음량 조절을 여기에 삽입한다.
%Z.15포맷으로 정량화한다.
aecLoopEchoGain = floor(aecLoopEchoGain*32768)/32768
%ANLP윈도우 사이즈를 결정하여 잔류 에코의 기대치를 포착한다. 그 이상으로 크게 하지는 않는다.
%이것은 근단 음성 및 잡음의 왜곡을 최소화한다. ANLP윈도우 사이즈는 AEC가 에코 이득을 증진시킬수록 작아진다. 그러므로, aecCHanGain및 aecEchoGain을 사용하여 윈도우 사이즈를 조절한다. 음량조절 이득은 사용되지 않는데 왜냐하면 ANLP의 포락면-검출장치 입력값이 음량 조절 후에 나오기 때문이다. 에코 이득 측정값은 RMS로 추정되지만, ANLP는 최고치를 포함한 전체 잔류 에코를 억제할 필요가 있다. 그러므로, 최고치 대 RMS성분을 곱하는 값(multiplier)(=3)으로 사용한다. anlpWindowGain의 동적인 범위는 2인데 왜냐하면, 선형 에코 소거기가 전반적으로 훈련이 되었을 때, anlpWindowGain은 적어오 2가 되어야 윈도우 내에서 에코를 잡을 수 있다.
anlpWindowGain = min(2*ONE, 3*aecChanGain*aecEchoGain);
%Z.14포맷으로 정량화한다.
anlpWindowGain = floor(anlpWindowGain*16384)/16384;
%만일 VAD가 확성기에 잡음만 들린다고 지시하면, ANLP를 전달(pass-through)모드로 놓는다(gain=ONE). VAD는 고음질의 근단 단일 음성을 가능하게 하는데, 왜냐하면, VAD에는 근단 음성 및 잡음의 왜곡이 없기 때문이다. VAD는 잡음만 잇을 때 종종 음성이 있다고 판단하곤 하기 때문에, 이 경우 근단 음성 또는 잡음의 왜곡을 최소화 하기 위한 다른 방법이 필요하다. 또한, VAD는 자주는 아니지만 저레벨 음성이 있는 경우 잡음만 있다고 판단하는 경우가 있다. 그러나, 루프에서 선형 에코 소거기를 가짐으로 이 경우에 에코가 들리지 않도록 에코를 충분히 억제하는 것이 가능하다.
if(speakerVad(frame)==0, %근단 단일 음성의 경우
anlpEchoGain = ONE;
%speakerVad = 1이므로, 확성기는 음성성분을 가질 가능성이 가장 크다. 하지만 꼭 그렇지는 않다. 근단 음성이 검출되면, 쌍방 음성라고 가정한다. 이 경우, 전체 루프에서의 에코 억제의 목표는 -25dB(1843/32768)로 잡고, ANLP이득값은 루프의 나머지 부분에서 제공되지 않는 에코 억제에서 필요한 정도로 정한다.
%ANLP이득은 높고(억제는 낮고), 왜곡은 사용자가 음량을 최고레벨에서 낮춤에 따라 줄어든다. 선형 에코 소거기가 훈련되면, aNLP이득은 보통 이 모드에서 -10dB보다 높아. 그러므로 잡음으로 덮어씌우는 것(masking)으로는 음질을 개선시킬 수 없다. 원단 사용자는 쌍방통화동안에 얼마간의 에코를 듣는다. 하지만 이러한 인공적인 효과는 근단 음성의 높은 왜곡을 막기 위해 양호하다고 할 수 있다.
elseif(anlpNearSpeechCount>0) | (anlpNearSpeechFlag==1), %쌍방통화
anlpEchoGain = 1843/32768 / aecLoopEchoGain;
%speakerVad=1이고 근단음성이 검출되지 않기 때문에, 원단 단일 음성라고 가정한다. 전체 루프의 에코 억제의 목표는 -56dB(52/32768)로 양쪽 단의 배경이 조용할 경우 에코가 거의 들리지 않는다.
%쌍방통화 모드에서, ANLP이득은 루프의 나머지 부분에서 제공되지 않는, 하지만 필요한 에코 억제레벨으로 맞춰지고, ANLP이득은 높고 왜곡은 사용자가 최고 레벨에서부터 볼륨을 낮추고 선형 에코 소거기가 훈련됨에 따라 줄어든다. 그러나, 에코를 감쇠하여 잡음 바닥값(floor) 아래로 낮추는 만큼의 감쇠에 필요한 이득은, 높을 수 있다. 그러므로, 이 두 이득값 중 높은 값을 ANLP가 왜곡을 최소화 하는데 사용한다. 듣기편한 잡음이 없으면, 같은 성분으로 에코와 잡음을 모두 갑쇄하는 것은 신호-대-잡음 비율을 변화시키지 않는다. 그러므로 잡음으로 덮어씌우는 것은 효과가 없다. 듣기편한 잡음은, ANLP의 입출력에서의 잡음이 같은 레벨이도록 설정된다. 그러므로, ANLP는 필요 이상으로 왜곡을 가하지 않으면서 에코를 잡음 바닥 값 아래의 임계치로 감쇠한다. 제곱근값은 잡음 대 음성의 비율로 설정되는데 왜냐하면, 이러한 변수들은 에너지의 단위이기 때문이다. 에코 대 잡음 비율에 실제 잡음 대 에코 비율을 곱하는 것은 잡음 성분을 빼버리는 것이다(factor out). 남은것은, 에코를 덮어쓰기 위해 필요한 이득으로서의 원하는 정도 대 실제 에코 비율.
else %원단 단일 음성 상태
ECHO_TO_NOISE_GOAL = 1/8; %-18dB
if(anlpInVoice>anlpInNoise),
anlpEchoGain = max(52/32768/aecLoopEchoGain, ...
ECHO_TO_NOISE_GOAL *
sqrt(anlpInNoise/anlpInVoice));
else
%잡음이 많은 상태에서는, 이득은, 이론적으로 낮은 에너지 음성에 대한 것이라 하더라도, ECHO_TO_NOISE_GOAL을 넘어서지 못한다. 왜냐하면,
%잡음의 레벨이 빨리 떨어질 때(자동차가 속력을 줄일 때), 잡음의 추정치는 너무 크기 때문이다. 이로 인해, ANLP이득이 너무 커믄 에코가 들리게 된다.
anlpEchoGain = min(ONE, anlpEchoGain);
%Z.15포맷으로 정량화한다.
anlpEchoGain = floor(anlpEchoGain*32768)/32768;
anlpGainHist(frame) = anlpEchoGain; %디버그를 위해 저장해 둔다
%필요하다면 근단음성 끊김 카운터를 감소시켜, 확성기 VAD에 무관하게 동작하도록 한다.
anlpNearSpeechCount = max(0, anlpNearSpeechCount-1);
%
%ANLP표본 섹션
%
%aksdlf 뮈ㅖ 에코 이득이 ONE이라면, ANLP는 비활성화되있는 것이다. -- MIPS를 줄이기 위해 생략한다.
if(anlpEchoGain==ONE),
%포락면 검출 동작은 유지한다.
for k=1:FRAME_SIZE,
anlpRef = aecRef(FRAME_SIZE-k+1);
anlpRefEnvelope = max(abs(anlpRef), 255/256*anlpRefEnvelope);
anlpRefEnvelope = floor(anlpRefEnvelope*2^31)/2^31;
end
%AC-중앙 감쇠기에서 사용되는 변수들을 전체 프레임을 처리하고 나서 생기는 결과와 같게 갱신한다.
anlpOutLast = ulinkAudio(FRAME_SIZE);
else
for k=1:FRAME_SIZE,
%ANLP원단 ref=AEC 참조값. 첨가적으로 또는 대신에 aecEchoEst를 사용하는 것은 더 좋은 결과를 주지 못하는데, 왜냐하면 aecEchoEst는 잔류 에코에 무관하기 때문이다. AEC ref는 같은 효과를 주는데, 왜냐하면, 이것은 anlpIn에서 제일 이른 에코보다도 앞에 나오기 때문이다. 최고치 검출장치의 장기(long time)상수가 이 ANLP의 키(key)로서필요하지 않는 잔류 에코와 일치(matching)하는 가까운 지연을 만들기 때문이다.
%anlpRef = aecRef(FRAME_SIZE-k+1);
%anlpRef신호 검출의 포락면을 만든다(최고치를 검출한다).
%최고지 검출장치의 지수적 감소요소는 자동차의 여진의 감소를 모델링한다.
%시간상수는 천천히 감소하는 예상되는 여진을 다룰 수 있도록 정해진다.
%폴(pole)이 255/256보다 작으면 에코가 통과된다(get through)
%폴이 255/256보다 크면 근단에 지나친 왜곡을 가한다.
anlpRefEnvelope = max)abs(anlpRef), 255/256*anlpRefEnvelope);
%저장할 수 있세 하기 위해 anlpRefEnvelope는 32비트여야 한다.
%anlpRefEnvelope를 16비트로 반내림하면 512/2^15보다 낮게 감소한다.
%anlpRefEnvelope를 16비트로 잘라버리면 256/2^15보다 낮아질 때 표본당 1비트씩 감소하고, 이것은 너무 빨리 일어난다(에코가 통과될 정도로).
%Z.31포맷으로 정량화한다.
anlpRefEnvelope = floor(anlpRefEnvelope*2^31)/2^31;
%ANLP의 델타값(Delta value)은 ONE으로 제한되어 AEC에 의해 제어되는 이득값이다.
anlpDelta = min(ONE, ...
anlpWindowGain*floor(anlpRefEnvelope*32768)//32768);
%Z.15포맷으로 정량화한다.
anlpRefEnvelope = floor(anlpRefEnvelope*32768)/32768;
anlpDeltaHist((frame-1)*FRAME_SIZE+k)=anlpDelga; %디버그를 위해 저장한다.
%
%AC-중앙 감쇠기 실행
%
%ANLP입력은 잡음억게장치를 통하여 AEC출력으로 연결된다
anlpIn = uplinkAudio(k);
%입력이 인도우 아래에 있으면
if(anlpOutLast - anlpIn)>=anlpDelta,
%윈도우 밖의 모든 신호는 사용하고, 윈도우 안의 신호는 감쇠한다
anlpOutLast = anlpIn - anlpDelta + ...
anlpEchoGain*anlpDelta;
%그렇지 않으면 임별은 윈도우 안에 있다
else,
%신호를 감쇠한다
anlpOutLast = anlpEchoGain*(anlpIn-anlpOutLast)+anlpOutLast;
end
%S.15포맷으로 정량화한다
anlpOutLast = format(anlpOutLast*32768/32768; %다음을 위해 저장해둔다
%
%자동차 잡음과 같은 레벨을 가지고 비슷한 스펙트럼을 가지도록 ANLP입력으로 듣기편한 잡음을 첨가한다.
%
%자동차에서 포착된 프레임으로부터의 임의의 표본을 사용한다.
%자동차에서 포착한 표본에 우연히 음성이 들어가 있다고 하더라도, 자동차의 잡음과 같은 세기의 무용잡음을 생성한다.
anlpSeed = rem(48271*anlpSeed, 2147483647);
anlpConfirtNoiseIn = anlpComfortNoise(1+...
rem(anlpSeed, COMFORT_NOISE_SIZE));
%위에서 언급된 ARMA모델을 사용하여 무용 잡음을 필터링한다.
%anlpArGain = 1-anlpArCoef라고 가정하면 다음은 동등하다.
%anlpComfortNoiseOut = anlpArCoef*anlpComfortNoiseOutOld + ...
% anlpArGain*(anlpComfortNoiseIn + 0.8125*anlpComfortNoiseInOld);
ma = anlpComfortNoiseIn + 0.8125*anlpComfortNoiseInOld; %평균이 변한다.
maDiff = anlpComfortNoiseOutOld - ma;
%S1.15포맷으로 정량화한다.
%듣기편한 잡음으로 편중되는 것을 막기 위해 반올림을 해야 한다.
%0.5에서 음수의 소수부분을 반올림할 때, 1의 보수 소수점이 2의 보수와 같이 동작하도록 하기 위해 2^(-17)을 더한다.
maDiff = round(maDiff*32768+2^(-17)/32768;
anlpComfortNoiseOut = ma+anlpArCoef*maDiff;
%S.15포맷으로 정량화한다.
%듣기편한 잡음으로 편중되는 것을 막기 위해 반올림을 해야 한다.
anlpComfortNoiseOut = round(anlpComfortNoiseOut*32768+2^(-17))/32768;
anlpComfortNoiseOut = max(-1, min(ONE, anlpComfortNoiseOut));
%다음 루프를 위한 지연 변수
anlpComfortNoiseInOld = anlpComfortNoiseIn;
anlpComfortNoiseOutOld = anlpComfortNoiseOut;
%듣기편한 잡음을 윈도우 사이즈 안으로 제한한다.
anlpComfortNoiseOut = min(anlpDelta, max(-anlpDelta, anlpComfortNoiseOut ));
%듣기편한 잡음을 스케일링하여 ANLP출력 잡음이 ANLP입력 잡음의 레벨과 같아지도록 한다.
anlpComfortNoiseOut = anlpComfortNoiseOut * (ONE-anlpEchoGain);
%S.15포맷으로 정량화한다.
anlpComfortNoiseOut = floor(anlpComfortNoiseOut*32768)/32768;
%듣기편한 잡음을 ANLP출력 신호에 첨가한다
uplinkAudio(k) = max(-1, min(ONE, anlpOutLast+anlpComfortNoiseOut);
end
end
%프레임에 걸쳐 얻은 결과를 정수 포맷으로 저장한다
fwrite(fidOut, [uplinkAudio; aecOut]*32768, 'int16');
%disp(['aecInEnergy = 'dec2hex(aecInEnergy*ENERGY_SCALE)])
%disp(['aecErrorShift = 'dec2hex(aecErrorShift+(aecErrorShift<0)*65536)])
%disp(['aecUpdate(1) = 'dec2hex(aecUpdate(1)*32768+(aecUpdate(1)<0)*65536)])
(43쪽 스캔해서 넣는다)
(43쪽 형광부분 스캔해서 넣는다)
%신호의 프레임 에너지에 기초하여 잡음 프레임 에너지를 추정한다.
%norm기반 잡음 측정치는 32비트 변수로 표현하면 더 넣은 동적인 범위를 제공한다. 그리고, 잡음 레벨이 낮은 경우에도 작동을 일관성있게 할 수 있다.(test_65.raw와 같은 원단의 경우에).
%그러나, norm-기반 알고리즘은 제곱근 및 32비트 제곱을 구하는 것을 필요로 한다(MIPS가 더 든다).
%이 에너지-기반 알고리즘은 저레벨 잡음의 정량화에 최적화되어 있다.
%그리고, 잡음의 레벨이 매우 낮은 경우(음성이 항상 잡음보다 훨씬 큰 경우), 저레벨 잡음을 특별히 고려하는 것은 그리 중요한 것이 아니므로 이것은 받아들여질 만한 점이다.
%또한, norm-기반 알고리즘이나 에너지-기반 알고리즘에서 적응의 속도는 같다.
%비트를 빼내기 위한(pumping) 동작에는 쉬프트(shift)를 사용했다. norm-기반 알고리즘에서는 한 비트 쉬프트만 사용했다.
%
%목표는, 신호에 음성성분이 없으면 갱신 및 추정을 빨리 하고, 그렇지 않으면 천천히 하는 것이다.
%자동차 잡음이 빨리 변화하는 것을 추적하기 위해 상수 적응(constant adaptation)이 필요하다.
%음성 검출기(VAD)출력은 언제 빠른 갱신을 시작할 지에서 좋은 시작점이다. 그러나, 잡음보다 훨씬 큰 저레벨의 음성이 실제로 있을 때, 음성이 없다고 나타내는 경우가 종종 있다.
%noVoiceFlag는 선형 에코 소거기의 상태 게이지에 의해 만족된 VAD출력으로 신뢰도를 증가시킨다.
%그러나, 상태 게이지는 근단 음성와 쌍방 통화, 또는 그 톤(tone)사이의 차이를 만들어 내지 못한다. 그러므로, 빠른 갱신 주기동안에는 음성성분을 견딜 수 있는 알고리즘이 필요하다.
%원단 단일 음성 동안에 상태 게이지가 잘 작동할 때, 즉, 잡음 추정치가 정확하여 에코가 들리는 것을 방지해야 할 때
%여기서 사용된 트릭(trick)은 잘못된 유도(근단 음성에서 주로 생기는)로 인해, 선형적으로 아네지 신호를 필터링하기보다, 비교 결과에 기초하여 추정치가 왔다갔다 하는 것을 줄인다.
%추정치를 위로 올리는 시간 주기가 추정치를 아래로 내리는 시간주기의 1/4가 되면 음성이 있다고 하더라고 추정치가 잡음의 바닥치 쪽으로 편중되게 된다.
%고정 시간 상수 대신 고정된 증분(increment)만큼 아래로 내리거나 위로 올리는 것은 시간 상수가 잡음 레벨만큼 변하도록 한다.
%
%잡음의 바닥치가 증가하는 것과 음성성분 사이의 차이를 구분하는 것은 어렵다.
%여기서 올리는(pump-up) 시간상수는 추적 비율(tracking rte)을 결정한다.
%그러나, 올리는 시간 상수는 음성 동안에 잘못된 증가를 최소화할 만큼 느려야 한다.
%상태 기계(state machines)는 특정 조건 하에서 잡음 측정치를 빨리 증가시키도록 구현되어야 한다.
%상태 기계에서, 음성이 없는 동안, 신호 에너지가 잡음 추정치보다 8배 이상 커서 적어도 900ms임을 관측하면, 잡음의 바닥값이 증가했다고 보고, 잡음의 바닥값을 테스트 기간에서의 테스트 잡음 추정치와 같게 맞춘다.
%잡음 입력이 원단에서의 잡음에 지배될 때, AMPS의 대역 내 제어 채널 또는 RF조건이 나쁜 것에 기인한 공백화(blanking)는 공백화 후에 잡음 추정치를 복원시킨다.
%첫째로는 에너지의 떨어지는 값(drop)이 5에서 25프레임 길이가 되도록 확정한다
%그리고 나서 에너지가 원래 레벨로 복귀되도록 한다.
%에너지가 본래 잡음 레벨 주위의 윈도우 안에 머물러 있으면, 비교적 짧은 확정 주기만이 필요하다.
%에너지가 본래 레벨보다 훨씬 더 높아지면, 음성이 생긴 것일 수 있으므로, 잡음 바닥값이 떨어지지 않도록 하기 위해 보다 긴 확정 주기가 필요하다.
%
%noiseStateVars 배열에 대한 정의
% (1) = 잡음 추정치
% (2) = 공백화 또는 테스트 잡음 추정 전의 잡음 추정치
% (3) = 생태 변수/카운터
%
function [confirmedNoVoiceFlag, noiseStateVars] = ...
estnoise(inEnergy, noVoiceFlag, noiseStateVars)
%모 루틴(parent routine)에서와 마찬가지 방법으로 필요한 상수를 정의한다
%갱신 결합(integration)주기에서의 표본의 개수
FRAME_SIZE = 160;
%표본 프레임에 걸쳐 누적된 오른쪽 쉬프트 비트의 개수
FRAME_BITS = ceil(log2(FRAME_SIZE));
%성분을 스케일하여 에너지를 32비트로 정량화한다(Z8.23포맷 w/FRAME_SIZE=160)
ENERGY_SCALE = 2^(31-FRAME_BITS);
%모 루틴이 잡음 추정치를 초기화 하였으면
if( noiseStateVars(1) == FRAME_SIZE,
%
%호출 시작의 적응속도를 빠르게 하기 위한 동작을 한다
%플래그를 켜서(set) 듣기편한 잡음이 이 레벨에서 초기화되도록한다.
confirmedNoVoiceFlag = 1;
%잡음 추정치를 에너지와 같게 한다
noiseStateVars(1) = inEnergy;
else
%
%잡음 추정치를 갱신한다
%디폴트(default)로, 플래그를 꺼서(clear) 듣기편한 잡음이 필요없음을 나타낸다
confirmedNoVoiceFlag = 0;
%다음 바이어스 테스트(bias test)는 무용잡음을 가지고 MATAB에서 수행되었다.
%>>n=1690*3000;noise=zeros(1,m);
%>>seed=1;for i=1:n,[noise(i) seed]noisegen(seed);end
%>>m=3000;for i=1:m,noiseEnergy(i)=sum(noise(160*(i-1)+1:160*i).^2);end
%>>ne=100;for i=1:m,if me>noiseEnergy(i),
%>>ne=ne-ne/16;else,ne=ne+ne/64;end,neh(i)=ne;end
%>>plot(neh);
%>>axis([0 20 0 100]) %neh 가 10프레임 이후에 정해진다
%>>1/(sum(neh(11"m))/(m-100)/(sum(noiseEnergy)/m)-1)
%문=-14.2082
%이는 잡음 추정치에 -1/14정도의 성분 바이어스가 있다는 것을 나타낸다.
%계산을 간단히 하기 위해, 잡음 추정치에서 1/16성분을 뺀다
%이는 바이어스를 복원하는 목적에서 비교를 위한 것이다
%어셈블리어로, 비트 단위의 뺄셈 전에 오늘쪽 쉬프트를 한다
noiseBiased = noiseStateVars(1) - noiseStateVars(1)/16;
%32비트로 정량화한다
noiseBiased = ceil(noiseBiased*ENERGY_SCALE)/ENERGY_SCALE;
%
%VAD와 상태 게이지가 음성이 없다고 나타내면
if noVoiceFlag,
%잡음 추정치를 빨리 올린다
%
if noiseBiased>inEnergy,
%
%잡음 추정치를 빨리 낮춘다.
%감소하는 잡음 바닥값에 대한 추적 속도를 빠르게 하기 위해, 잡음 추정치가 성분 8보다 너무 높으면, 즉시 잡음 추정치를 신호 에너지와 같게 맞춘다
%그러나, 이는 활성화되면 음수방향으로 편중되게 되어, 잘못 검출하는 오류를 범하게 된다
%이 시간상수는 너무 짧아서 잘 동작하지 못하고 잡음 추정치를 끌어내리게 된다
%
%유도를 최소화하기 위해, 잡음 추정치가 신호 에너지와 같은 경우는 값을 내리지 않는다.
%정량화를 하면 0을 제외하고는 값에 1/ENERGY_SCALE의 작은 변화가 생긴다
%어셈블리어로, 비트 단위로 오르녹 쉬프트를 하기 전에 음수로 바꾼다
noiseStateVars(1) = noiseStateVars(1)-noiseStateVars(1/16);
%듣기편한 잡음을 만들기 위해 플래그를 켠다
%입력 에너지가 자음 추정치보다 낮아야 한다는 요구저건은 음성이 있는 동안에 잡음 추정치가 갱신될 확률을 높인다
confirmedNoVoiceFlag = 1;
else
%
%잡음 추정치를 올린다
%
%0에서 막히지 않게 하기 위해 증분을 최소화한다
%min(noiseStateVars(1)/64, 1/ENERGY_SCALE)을 더하는 것이 대신 사용되지 않는다
%왜냐하면, 이것을 더하면 갑자기 증가하는 잡음에 대한 적응을 느리게 한다
noiseStateVars(1) = noiseStateVars(1)+noiseStateVars(1)/64+...1/ENERGY_SCALE;
end
else
%
%잡음 추정치를 천천히 올린다
%음성이 있는동안에는 조절을 멈추지 않는다
%왜냐하면 잡음의 바닥값이 줄어드는 것을 추적하는 것은 중요하기 때문이다
%원단 음성 에너지가 낮읓 때, 선형 잡음 소거기보다는 NLP 입력에 의한 영향이 더 크다
%그러므로, 에코 억제가 불충분해진다
%그러므로, 잡음 추정치보다 더 크게 추정하는것보다는 더 낮게 추정하는 것이 낫다.
%잡음 추정치가 너무 높으면
if noiseBiased>inEnergy
%
%잡음 추정치를 내린다.
%정량화를 하면 0을 제외하고는 값에 1/ENERGY_SCALE의 작은 변화가 생긴다
%어셈블리어로, 비트 단위로 오른쪽 쉬프트를 하기 전에 음수로 바꾼다
noiseStateVars(1) = noiseStateVars(1)-noiseStateVars(1)/64;
else
%
%잡음 추정치를 올린다
%
%그냥 보면, 음성이 있을 때는 잡음 바닥값을 추적하기 위해서는 추정치를 내리는 것만 필요한 것처럼 보인다.
%그러나, 이렇게만 하면 지나치게 음수 방향으로 편향된다
%올리는 비율은 되도록 빠르게 되도록 실험적으로 결정한다. 이 때, 음성이 있는 동안에는 잘못된 변화가 너무 많이 일어나는 것은 허가하지 않는다.
%이것은 매우 느린 것인데 왜냐하면 멈춤 사이에서 음성은 몇초간 그냥 남아 있을 수 있기 때문이다.
%최소 증분을 사용하지 말라, 사용하면 음성이 있는 동안에 낮은 잡음에 대한 기울기가 너무 커진다
noiseStateVars(1) = noiseStateVars(1)+noiseStateVars(1)/1024;
end
end
%32비트로 정량화한다
noiseStateVars(1) = floor(noiseStateVars(1)*ENERGY_SCALE)/ENERGY_SCALE
%
%AMPS 공백화와 잡음 오름 추적을 위한 상태 기계
%초기에는 실행시키지 말 것
%
%if noiseStateVars(3)==0,
%만일 신호 에너지가 잡음 추정치 아래로 많이 떨어지면
%그리고 만일 inEnergy를 정량화해서 잘못된 결과를 내지 않는다면
if noiseStateVars(1)>max(8*inEnergy, 8/ENERGY_SCALE),
%상태기계를 위해서 잡음 추정치를 저장해 둔다
noiseStateVars(2) = noiseStateVars(1);
%공백을 찾기 위해상태 기계를 시작한다
noiseStateVars(3) = 1;
%VAD와 상태 게이지가 음성이 없다고 지시하고, 신호 에너지가 잡음 추정치보다 많이 높으면, 그리고 잡음 추정치를 정량화하고 나서 잘못된 결과가 나오지 않으면
if noVoiceFlag& ...
(inEnergy>max(8*noiseStateVars(1), 8/ENERGY_SCALE)),
%테스트 잡음 추정치를 초기화한다
noiseStateVars(2) = inEnergy;
%잡음 오름을 찾기 위해 상태 기계를 시작한다
noiseStateVars(3) = -1;
end
%상태기계가 잡음오름을 찾고 있으면
if noiseStateVars(3)<0,
%VAD와 상태 게이지가 계속해서 음성이 없다고 나타내면, 그리고 신호 에너지가 잡음 추적장치보다 계속 높으면
if noVoiceFlag & (inEnergy>8*noiseStatusVars(1)),
%일반적인 것과 마찬가지로 테스트 잡음을 편중시킨다.
%어셈블리어로, 비트 단위로 오른쪽 쉬프트를 하기 전에 음수로 바꾼다
noiseStateVars(2) = noiseStateVars(2)-noiseStateVars(2)/16
%32비트로 정량화한다
noiseBiased = ceil(noiseViased*ENERGY_SCALE)/ENERGY_SCALE;
%테스트 잡음 추정치가 너무 높으면
if noiseBiased>inEnergy
%테스트 잡음 추정치를 내린다
%정량화를 하면 값에 1/ENERGY_SCALE의 작은 변화가 생긴다
%어셈블리어로, 비트 단위로 오른쪽 쉬프트를 하기 전에 음수로 바꾼다
noiseStateVars(2) = noiseStateVars(2) - noiseStateVars(2)/16;
else
%테스트 잡음 추정치를 올린다
noiseStateVars(2) = noiseStateVars(2) + noiseStateVars(2)/64;
end
%32비트로 정량화한다
noiseStateVars(2) = floor(noiseStateVars(2)*ENERGY_SCALE)/ENERGY_SCALE;
%충분한 시간동안 신호 에너지가 잡음 추적장치보다 계속 높으면
%(s_top10_1.raw 테스트 추적의 에코를 위해서는 45프레임이 필요하다
if noiseStateVars(3)==-45,
%잡음 추정치를 테스트 잡음 추정치로 올린다
noiseStateVars(1) = noiseStateVars(2);
else
%상태기계를 아무것도 하지 않는 생태로 다시 돌린다
noiseStateVars(3) = 0;
end
%만일 상태기계가 공백화를 찾고 있으면
else,
%상태 변수를 증가시킨다
noiseStateVarse(3) = noiseStateVarse(3)+1;
%1-100 상태를, 추정된(alleged) 공백화기간동안에 프레임 수를 센다
if noiseStateVars(3)<101,
%에너지가 다시 높아지면,
if noiseStateVarse(3)-1<5,
%탐색이 잘못된 것이거나 잡음 추정치를 저장할 만큼 가치가 있는 것이 아니다
%상태 기계를 다시 아무것도 하지 않는 상태로 돌린다
noiseStateVars(3) = 0;
else
%공백화 후에 음성이 생겼거나 잡음이 되돌아왔다
%상태 기계를 101로 맞추고 다음 단계를 시작한다
noiseStateVars(3) = 101;
end
%저 에너지 프레임의 카운트가 너무 길면
if noiseStateVars(3)-1==25,
%공백화가 일어나지 않은 경우임 -- 잡음 바닥값이 그 대신 떨어짐
%상태 계계를 다시 아무것도 하지 않은 상태로 놓는다
noiseStateVars(3) = 0;
end
%상태 기계가 추정된 공백화 주기의 마지막이라고 검출하면
%상태 기계가 음성의 프레임을 세고 있든 아니든, 우선 에너지가 다시 낮아졌는지 점검한다
elsief 8*inEnergy<noiseStateVars(2),
%공백화가 일어나지 않은 경우임 -- 잡음 바닥값이 그 대신 떨어짐
noiseStateVars(3) = 0;
%1-100 상태를, 추정된(alleged) 공백화기간동안에 프레임 수를 센다
elsief noiseStateVars(3)<201,
%에너지가 너무 높이 올라가면
if inEnergy>noiseStateVars(2)*8,
%이것이 음성이라고 가정한다
%상태 변수를 201로 하고 다음 단계를 시작한다
noiseStateVars(3) = 201;
%최대 최소 에너지가 저장된 잡음 추정치와 가까운 경우에 프레임 수가 충분하면
elseif noiseStateVars(3)-101==10,
%공백화가 확정됨
%잡음 추정치를 공백화 전의 값으로 되돌림
noiseStateVars(1) = noiseStateVars(2)l
%상태 계계를 다시 아무것도 하지 않은 상태로 놓는다
noiseStateVars(3) = 0;
end
%1-100 상태를, 추정된(alleged) 공백화기간동안에 프레임 수를 센다
%
%최소 에너지가 저장된 잡음 추정치와 가까울 때 프레임 카운트가 충분하면
elseif noisestateVars(3)-01==50,
%공백화가 확정됨
%잡음 추정치를 공백화 전의 값으로 되돌림
noiseStateVars(1) = noiseStateVars(2)l
%상태 계계를 다시 아무것도 하지 않은 상태로 놓는다
noiseStateVars(3) = 0;
end
end
end
당업자라면 본 발명을 설명할 목적으로 본원에서 설명된 특정예들에 한정되지 않음을 이해할 것이다. 예를 들어, 기술된 실시예의 여러 기능 블럭들은 사실 개념적인 것이다. 이러한 블럭들의 기능을 실제 실현하는 것은 여러 기술을 사용함으로써 달성될 수 있다. 또한, 각 실시예의 시스템은 예를 들면 다수의 표준 디비탈 신호 처리 칩, 하나의 애플리케이션 표준 집적 회로 또는 적합한 구성의 컴퓨터를 사용함으로써 실현될 수 있다.
또한, 음향 에코 소거 문단에서 예시적인 실시예들이 설명되었다 하더라도, 본 발명은 망 에코 소거 환경에서도 동일하게 응용가능하다 (예를 들면, 근단 사용자가 지상 사용자이고 원단 사용자가 이동하는 사용자인 경우). 또한, 본 발명의 특정한 양태는 전형적으로는 통신 시스템에 응용가능한 것으로 에코 억제 시스템에 제한되는 것은 아니다. 그리하여, 본 발명의 범주는 전술한 설명이라기 보다는 본원에 첨부된 청구범위에 의해서 한정되며, 청구범위의 사상과 일치하는 모든 등가적인 사항들을 포함할 수 있다.

Claims (20)

  1. 제1 통신 신호를 감쇠시켜, 제2 통신 신호의 반사에 의해 생기는 상기 제1 통신 신호의 에코 성분을 억제하도록 구성된 에코 억제기; 및
    상기 에코 억제기에 접속되고 상기 제2 통신 신호에 음성 성분이 포함되어 있는지를 지시하는 음성 검출기
    를 포함하고,
    상기 에코 억제기는 상기 음성 검출기가 상기 제2 통신 신호에 음성 성분이 포함되어 있지 않다고 지시한 때 비활성화되는 에코 억제 장치.
  2. 제1항에 있어서, 상기 에코 억제기는 바이패스(bypass)에 의해 비활성화되는 에코 억제 장치.
  3. 제1항에 있어서, 하울링(howling)을 방지하기에 충분한 감쇠 레벨을 제공하도록 조절됨으로써 상기 에코 억제기가 비활성화되는 에코 억제 장치.
  4. 제1항에 있어서, 상기 에코 억제기는 단투 스위치(single-throw switch)이고, 상기 에코 억제기는 상기 단투 스위치를 닫음으로서 비활성화되는 에코 억제 장치.
  5. 제1항에 있어서, 상기 에코 억제기는 클립핑형 억제기이고, 상기 에코 억제기는 상기 에코 억제기의 클립핑 임계치를 0으로 설정함으로써 비활성화되는 에코 억제 장치.
  6. 제1항에 있어서, 상기 에코 억제기는 스케일링 억제기(scaling suppressor)이고, 상기 에코 억제기는 상기 에코 억제기의 스케일링 계수를 단위값(unity)으로 설정함으로써 비활성화되는 에코 억제 장치.
  7. 제1항에 있어서, 상기 에코 억제기는 하이브리형 억제기이고, 상기 에코 억제기는 상기 에코 억제기의 클립핑 입계치를 0으로 설정하거나 상기 에코 억제기의 스케일링 계수를 단위값으로 맞춰 설정함으로써 비활성화되는 에코 억제 장치.
  8. 제1 통신 신호를 감쇠시켜, 제2 통신 신호의 반사에 의해 생기는 상기 제1 통신 신호의 에코 성분을 억제하도록 구성되고, 상기 제1 통신 신호의 적어도 일부에 감쇠 계수를 배가시키는 에코 억제기; 및
    상기 통신 신호의 전반적인 상태를 검출하여, 상기 에코 억제기가 활성화되어 있는 동안 상기 검출된 전반적인 조건에 기초하여 상기 감쇠 계수를 조절하도록 구성된 이득 제어 프로세서
    를 포함하는 에코 억제 장치.
  9. 제8항에 있어서, 상기 이득 제어 프로세서는 상기 제1 통신 신호에 근단 음성 성분(near-end speech component)이 포함되어 있는지 여부를 검출하도록 구성된음성 검출기를 포함하고, 상기 이득 제어 프로세서는 상기 음성 검출기가 상기 근단 음성 성분을 검출하는 지 여부에 기초하여 감쇠 계수를 조절하는 에코 억제 장치.
  10. 제1 통신 신호를 감쇠시켜, 제2 통신 신호의 반사에 의해 생기는 상기 제1 통신 신호의 에코 성분을 억제하도록 구성된 에코 억제기; 및
    상기 제1 통신 신호의 음성 대 잡음 비율(voice-to-noise ratio)을 검출하도록 구성되고, 상기 비율에 기초하여 상기 에코 억제기에서 제공된 감쇠 레벨을 조절하는 이득 제어 프로세서
    를 포함하는 에코 억제 장치.
  11. 제10항에 있어서, 상기 음성 대 잡음 비율이 에코 대 잡음 비율인 에코 억제장치.
  12. 제10항에 있어서, 상기 비율이 미리 정해진 임계치이거나 그보다 낮은 경우, 상기 이득 제어 프로세서가 상기 에코 억제기를 비활성화시키는 에코 억제 장치.
  13. 제10항에 있어서, 상기 에코 억제기는 바이패스에 의해 비활성화되는 에코 억제 장치.
  14. 제12항에 있어서, 상기 이득 제어 프로세서는 상기 에코 억제기를 조절하여 하울링을 방지하기에 충분한 감쇠 레벨을 제공함으로써 상기 에코 억제기를 비활성화시키는 에코 억제 장치.
  15. 제12항에 있어서, 상기 에코 억제기는 단투 스위치이고, 상기 에코 억제기는 상기 단투 스위치를 닫음으로서 비활성화되는 에코 억제 장치.
  16. 제12항에 있어서, 상기 에코 억제기는 클립핑형 억제기이고, 상기 에코 억제기는 상기 에코 억제기의 클립핑 임계치를 0으로 설정함으로써 비활성화되는 클립핑형 억제기로서의 에코 억제 장치.
  17. 제12항에 있어서, 상기 에코 억제기는 스케일링 억제기이고, 상기 에코 억제기는 상기 에코 억제기의 스케일링 계수를 단위값으로 설정함으로써 비활성화되는 에코 억제 장치.
  18. 제12항에 있어서, 상기 에코 억제기는 하이브리형 억제기이고, 상기 에코 억제기는 상기 에코 억제기의 클립핑 임계치를 0으로 설정하고, 상기 에코 억제기의 스케일링 계수를 단위값으로 설정함으로써 비활성화되는 에코 억제 장치.
  19. 제10항에 있어서, 상기 에코 억제기는 상기 제1 통신 신호의 적어도 일부에 감쇠 계수를 배가시키고, 상기 이득 제어 프로세서는 상기 에코 억제기의 출력에서 음성 대 잡음 비율이 미리 정해진 임계치이거나 또는 그보다 낮도록 보장하기 위해 상기 감쇠 계수를 조절하는 에코 억제 장치.
  20. 제19항에 있어서, 상기 음성 대 잡음 비율이 에코 대 잡음 비율인 에코 억제 장치.
KR10-2000-7007535A 1998-01-09 1998-12-22 통신 시스템에서 에코 억제 제어를 위한 방법 및 장치 KR100519001B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/005,144 US6148078A (en) 1998-01-09 1998-01-09 Methods and apparatus for controlling echo suppression in communications systems
US09/005,144 1998-01-09
PCT/US1998/026231 WO1999035812A1 (en) 1998-01-09 1998-12-22 Methods and apparatus for controlling echo suppression in communications systems

Publications (2)

Publication Number Publication Date
KR20010033951A true KR20010033951A (ko) 2001-04-25
KR100519001B1 KR100519001B1 (ko) 2005-10-06

Family

ID=21714404

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2000-7007535A KR100519001B1 (ko) 1998-01-09 1998-12-22 통신 시스템에서 에코 억제 제어를 위한 방법 및 장치

Country Status (13)

Country Link
US (1) US6148078A (ko)
EP (1) EP1044558B1 (ko)
JP (1) JP2002501336A (ko)
KR (1) KR100519001B1 (ko)
CN (1) CN100502443C (ko)
AU (1) AU756390B2 (ko)
BR (1) BR9813791B1 (ko)
DE (1) DE69820118D1 (ko)
EE (1) EE200000415A (ko)
HK (1) HK1037077A1 (ko)
IL (1) IL137182A (ko)
TR (2) TR200100647T2 (ko)
WO (1) WO1999035812A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8903325B2 (en) 2011-02-21 2014-12-02 Empire Technology Development Llc Using out-band information to improve wireless communications

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3579245B2 (ja) * 1998-03-31 2004-10-20 三洋電機株式会社 エコーキャンセラの制御方法およびエコー除去装置
US6526139B1 (en) * 1999-11-03 2003-02-25 Tellabs Operations, Inc. Consolidated noise injection in a voice processing system
US6760435B1 (en) * 2000-02-08 2004-07-06 Lucent Technologies Inc. Method and apparatus for network speech enhancement
US7050575B1 (en) 2000-06-16 2006-05-23 Ericsson Inc. Echo canceler coefficient update apparatus and method
DE10030926A1 (de) * 2000-06-24 2002-01-03 Alcatel Sa Störsignalabhängige adaptive Echounterdrückung
JP3553008B2 (ja) * 2000-09-26 2004-08-11 岩崎通信機株式会社 エコー低減方法および電話装置
US6889066B2 (en) * 2001-03-27 2005-05-03 Qualcomm Incorporated Network echo suppression in mobile stations
DE10119277A1 (de) * 2001-04-20 2002-10-24 Alcatel Sa Verfahren zur Maskierung von Geräuschmodulationen und Störgeräuschen bei der Sprachübertragung
GB2375688B (en) * 2001-05-14 2004-09-29 Motorola Ltd Telephone apparatus and a communication method using such apparatus
US6961422B2 (en) * 2001-12-28 2005-11-01 Avaya Technology Corp. Gain control method for acoustic echo cancellation and suppression
US7187656B2 (en) 2002-05-02 2007-03-06 General Instrument Corporation Method and system for processing tones to reduce false detection of fax and modem communications
US7027591B2 (en) * 2002-10-16 2006-04-11 Ericsson Inc. Integrated noise cancellation and residual echo suppression
JP4282317B2 (ja) * 2002-12-05 2009-06-17 アルパイン株式会社 音声通信装置
JP4376793B2 (ja) * 2003-01-08 2009-12-02 エヌエックスピー ビー ヴィ 特に電話におけるエコーを抑制するための装置および方法
US7065207B2 (en) * 2003-09-11 2006-06-20 Freescale Semiconductor, Inc. Controlling attenuation during echo suppression
US7046794B2 (en) * 2003-12-12 2006-05-16 Motorola, Inc. Double talk activity detector and method for an echo canceler circuit
US7099458B2 (en) * 2003-12-12 2006-08-29 Motorola, Inc. Downlink activity and double talk probability detector and method for an echo canceler circuit
JP4544040B2 (ja) * 2004-06-17 2010-09-15 パナソニック株式会社 エコーキャンセル装置およびそれを用いた電話機、並びにエコーキャンセル方法
US7856097B2 (en) * 2004-06-17 2010-12-21 Panasonic Corporation Echo canceling apparatus, telephone set using the same, and echo canceling method
US7395790B2 (en) * 2004-11-18 2008-07-08 S&S Cycle, Inc. Reed valve breather for evolution engine
US8457614B2 (en) 2005-04-07 2013-06-04 Clearone Communications, Inc. Wireless multi-unit conference phone
US20070033030A1 (en) * 2005-07-19 2007-02-08 Oded Gottesman Techniques for measurement, adaptation, and setup of an audio communication system
US20070036342A1 (en) * 2005-08-05 2007-02-15 Boillot Marc A Method and system for operation of a voice activity detector
JP4727542B2 (ja) * 2006-09-26 2011-07-20 富士通株式会社 電子機器、そのエコーキャンセル方法、そのエコーキャンセルプログラム、記録媒体及び回路基板
US9966085B2 (en) * 2006-12-30 2018-05-08 Google Technology Holdings LLC Method and noise suppression circuit incorporating a plurality of noise suppression techniques
US20090043577A1 (en) * 2007-08-10 2009-02-12 Ditech Networks, Inc. Signal presence detection using bi-directional communication data
US7809129B2 (en) * 2007-08-31 2010-10-05 Motorola, Inc. Acoustic echo cancellation based on noise environment
US8199927B1 (en) 2007-10-31 2012-06-12 ClearOnce Communications, Inc. Conferencing system implementing echo cancellation and push-to-talk microphone detection using two-stage frequency filter
US8050398B1 (en) 2007-10-31 2011-11-01 Clearone Communications, Inc. Adaptive conferencing pod sidetone compensator connecting to a telephonic device having intermittent sidetone
JP5156043B2 (ja) * 2010-03-26 2013-03-06 株式会社東芝 音声判別装置
US8447595B2 (en) * 2010-06-03 2013-05-21 Apple Inc. Echo-related decisions on automatic gain control of uplink speech signal in a communications device
US9002030B2 (en) 2012-05-01 2015-04-07 Audyssey Laboratories, Inc. System and method for performing voice activity detection
US9936290B2 (en) * 2013-05-03 2018-04-03 Qualcomm Incorporated Multi-channel echo cancellation and noise suppression
GB201308247D0 (en) * 2013-05-08 2013-06-12 Microsoft Corp Noise reduction
GB2519392B (en) 2014-04-02 2016-02-24 Imagination Tech Ltd Auto-tuning of an acoustic echo canceller
EP2999199B1 (en) 2014-09-16 2018-03-07 Nxp B.V. Mobile device
CN105635379B (zh) * 2015-12-29 2020-02-14 腾讯科技(深圳)有限公司 噪声抑制方法及装置
FR3063566B1 (fr) * 2017-03-06 2019-03-22 Peugeot Citroen Automobiles Sa Procede et systeme de limitation de volume sonore de telephone de voiture
JP6338728B1 (ja) * 2017-03-31 2018-06-06 日本電信電話株式会社 エコーキャンセラ装置
CN107799123B (zh) * 2017-12-14 2021-07-23 南京地平线机器人技术有限公司 控制回声消除器的方法和具有回声消除功能的装置
US11423921B2 (en) 2018-06-11 2022-08-23 Sony Corporation Signal processing device, signal processing method, and program
JP7187183B2 (ja) * 2018-06-14 2022-12-12 株式会社トランストロン エコー抑圧装置、エコー抑圧方法およびエコー抑圧プログラム
CN111917926B (zh) * 2019-05-09 2021-08-06 上海触乐信息科技有限公司 一种通信终端中的回声消除方法、装置及终端设备
CN110956969B (zh) * 2019-11-28 2022-06-10 北京达佳互联信息技术有限公司 直播音频处理方法、装置、电子设备和存储介质
CN111583087B (zh) * 2020-05-06 2023-09-05 杭州小影创新科技股份有限公司 一种图像去水印方法
CN113763978B (zh) * 2021-04-25 2024-05-03 腾讯科技(深圳)有限公司 语音信号处理方法、装置、电子设备以及存储介质

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0106640B1 (en) * 1982-10-15 1986-07-16 British Telecommunications Noise control circuit
US5022074A (en) * 1985-07-01 1991-06-04 Rockwell International Corporation Digital echo suppressor
US5157653A (en) * 1990-08-03 1992-10-20 Coherent Communications Systems Corp. Residual echo elimination with proportionate noise injection
US5274705A (en) * 1991-09-24 1993-12-28 Tellabs Inc. Nonlinear processor for an echo canceller and method
JPH07123236B2 (ja) * 1992-12-18 1995-12-25 日本電気株式会社 双方向通話状態検出回路
GB2281680B (en) * 1993-08-27 1998-08-26 Motorola Inc A voice activity detector for an echo suppressor and an echo suppressor
US5475731A (en) * 1994-01-07 1995-12-12 Ericsson Inc. Echo-canceling system and method using echo estimate to modify error signal
GB2295300A (en) * 1994-11-18 1996-05-22 Motorola Israel Ltd Hands-free Duplex radio transceiver apparatus and method of training
JPH08204619A (ja) * 1995-01-26 1996-08-09 Nec Corp エコーサプレッサ
JP2928130B2 (ja) * 1995-04-19 1999-08-03 埼玉日本電気株式会社 ハンズフリー通信装置
US6301357B1 (en) * 1996-12-31 2001-10-09 Ericsson Inc. AC-center clipper for noise and echo suppression in a communications system

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8903325B2 (en) 2011-02-21 2014-12-02 Empire Technology Development Llc Using out-band information to improve wireless communications
KR101472702B1 (ko) * 2011-02-21 2014-12-12 엠파이어 테크놀로지 디벨롭먼트 엘엘씨 무선 통신의 향상을 위한 대역 외 정보의 이용

Also Published As

Publication number Publication date
EP1044558B1 (en) 2003-11-26
EP1044558A1 (en) 2000-10-18
IL137182A (en) 2004-09-27
AU1907799A (en) 1999-07-26
HK1037077A1 (en) 2002-01-25
TR200001904T2 (tr) 2000-11-21
IL137182A0 (en) 2001-07-24
AU756390B2 (en) 2003-01-09
BR9813791B1 (pt) 2013-04-16
TR200100647T2 (tr) 2002-06-21
BR9813791A (pt) 2000-10-03
DE69820118D1 (de) 2004-01-08
CN1294814A (zh) 2001-05-09
WO1999035812A1 (en) 1999-07-15
EE200000415A (et) 2001-12-17
JP2002501336A (ja) 2002-01-15
US6148078A (en) 2000-11-14
CN100502443C (zh) 2009-06-17
KR100519001B1 (ko) 2005-10-06

Similar Documents

Publication Publication Date Title
KR100519001B1 (ko) 통신 시스템에서 에코 억제 제어를 위한 방법 및 장치
KR100519002B1 (ko) 통신 시스템에서 개선된 에코 억제 방법 및 장치
KR20010033994A (ko) 통신 시스템에서 컴퍼트 잡음을 제공하기 위한 방법 및 장치
US5365583A (en) Method for fail-safe operation in a speaker phone system
US6185300B1 (en) Echo canceler for use in communications system
US6434110B1 (en) Full-duplex speakerphone circuit including a double-talk detector
US5598468A (en) Method and apparatus for echo removal in a communication system
US7881927B1 (en) Adaptive sidetone and adaptive voice activity detect (VAD) threshold for speech processing
US7787613B2 (en) Method and apparatus for double-talk detection in a hands-free communication system
EP0400979B1 (en) Speakerphone with echo canceller-suppressor
US6192126B1 (en) Double talk detector, method for double talk detection and device incorporating such a detector
WO2000016497A1 (en) Echo canceler adaptive filter optimization
KR19980086461A (ko) 핸드 프리 전화기
EP0469114B1 (en) A method for active feedback suppression
KR20010072327A (ko) 에코 제거 시스템에서 마이크로폰의 과부하 영향을경감하기 위한 방법들 및 장치
JPH08335975A (ja) 拡声通話装置

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20120907

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20130911

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20150909

Year of fee payment: 11

LAPS Lapse due to unpaid annual fee