音響エコー除去

概要

音響エコーとは、スピーカから出力された音声をマイクロフォンが拾ってしまうことで発生するループのことを指します。音響エコーが発生すると、正確な音声認識が難しくなります。

OpenHRIでは、音響エコーの問題を軽減するため2種類ののコンポーネントを用意しています。それぞれ長所・短所がありますので用途に応じて使い分けてください。

この例では、OpenHRIのチュートリアルにある対話システムの例にエコーサプレッサを用いた音響エコー除去ありの対話システム例を示します。

エコーサプレッサ

音声出力コンポーネントからの出力を検出し、それと同じタイミングで音声入力を減衰させることで、スピーカからマイクへの収音を防ぐコンポーネントです。以下の特徴があります。

長所:
高速で処理できる。入力音声の変形が少ない。
短所:
声出力中は音声入力できないため、常に音声出力している場合などは使用が難しい。

エコーキャンセラ

音声出力コンポーネントからの出力信号よりエコー成分を推測して、マイクから収音した信号から推測したエコー成分を除去するコンポーネントです。以下の特徴があります。

長所:
音声出力中でも音声入力できる。
短所:
適応フィルタ係数を毎回更新するため処理が重い。入力音声を加工するため、その影響による変形が認識に悪影響を及ぼす場合がある。

使用するコンポーネント

  • AudioInput, AudioOutputコンポーネント : 音声データの取得と出力
  • Juliusコンポーネント : 音声認識エンジン
  • SEATコンポーネント : 音声対話エンジン
  • OpenJTalkコンポーネント : 音声合成エンジン
  • EchoSuppressorコンポーネント : エコー除去フィルタ

コンポーネントの接続

すべてのコンポーネントをエディタ画面に配置し、各コンポーネント間に以下のリンクを作成します。

PulseAudioInput -> EchoSuppressor(AudioDataIn)
EchoSuppressor -> Julius
Julius(result) -> SEAT
SEAT -> OpenJTalk
OpenJTalk -> PulseAudioOutput
PulseAudioOutput -> EchoSuppressor(ReferenceAudioDataIn)

リンクを作成すると、以下のスクリーンショットのようになります。

../../_images/echocancelsystem.png

利用法など

対話システムを動作させるには、音声認識エンジンに与える認識文法と対話制御エンジンの振舞いを記述した対話スクリプトを用意する必要があります。

この音声認識文法と対話スクリプトは、XML形式のドキュメントですが、OpenHRIでは、これらのドキュメントを簡単に記述するためのツールも提供しています。 ツールの使い方については、 OpenHRIマニュアル を参照して下さい。

また、ここで示した対話システムの取り扱いについては、OpenHRIのオフィシャルサイト内の チュートリアル とOpenHRIマニュアル内の チュートリアルStep.4 を参照して下さい。