本発明を、例として図示すが、添付図面には限定されない。図中、同一参照符号は同様の要素を示す。
当業者には認識されるように、図中の要素は簡単化および明確化のために示されており、必ずしも正しい縮尺で描かれているわけではない。例えば、本発明の実施形態の理解の向上を助けるために、図中の一部の要素の寸法は、他の要素に比べて誇張されていることがある。
本明細書で用いられる場合、「バス」という用語は、データ、アドレス、制御、またはステータスのような1つまたは複数の種々のタイプの情報を転送するために使用可能な複数の信号または導体を指すために用いられる。本明細書に記載の導体は、単一の導体、複数の導体、一方向性の導体、または双方向性の導体であるとして図示または説明することができる。しかし、異なる実施形態では、導体の実施態様が異なってもよい。例えば、双方向性導体ではなく別個の一方向性導体を用いてもよく、その逆でもよい。また、多重信号を直列または時間多重的に転送する単一の導体で、複数の導体を置き換えてもよい。同様に、多重信号を搬送する単一の導体を、これらの信号のサブセットを搬送する種々の異なる導体に分離してもよい。したがって、信号を転送するためには多くのオプションが存在する。
「アサート」および「ネゲート」(または「デアサート」)という用語は、それぞれ、
信号、ステータスビット、または同様の装置を、その論理的に真の状態または論理的に偽の状態にすることを指す場合に用いられる。論理的に真の状態が論理レベル1である場合、論理的に偽の状態は論理レベル0である。また、論理的に真の状態が論理レベル0である場合、論理的に偽の状態は論理レベル1である。記号「*」および「・」はいずれも乗法演算を示す。本明細書全体を通じて用いられる遅延を提供するために、FIFOまたは他のタイプのデータストレージを用いることができる。
なお、本明細書において、変数名は一般に、各グループの関連図面と一貫して用いられることに留意されたい。ただし、一部の変数名は、異なるグループの関連図面で異なるものを指すために再び使用されることがある。例えば、特定のグループの図面に関しては、Mは測定サイクルを表し、別のグループの図面に関しては、Mはカウンタ値として用いられることがある。ただし、以下の数式および図面における各変数名の説明は、それらが用いられる際に提供される。
[接続]
図1は、通信システム10の一実施形態を示している。通信システム10は、送信機/受信機12、インタフェース13、ハイブリッド回路16(ハイブリッド16ともいう)、エコーキャンセラ20、通信ネットワーク24、エコーキャンセラ22、インタフェース15、ハイブリッド18、および送信機/受信機14を含む。インタフェース13はハイブリッド16を含み、インタフェース15はハイブリッド18を含む。送信機/受信機12はハイブリッド16に双方向的に結合される(ここで、一実施形態では、送信機/受信機12はツイストペアのような2線式コネクションを通じてハイブリッド16に結合される)。ハイブリッド16は、エコーキャンセラ20に結合され、一方向性導体を通じてエコーキャンセラ20に送信信号Sin37を供給し、一方向性導体を通じてエコーキャンセラ20から受信信号Rout40を受信する(ここで、一実施形態では、Sin37およびRout40はそれぞれワイヤペアを通じて供給および受信される)。エコーキャンセラ20は、通信ネットワーク24に結合され、通信ネットワーク24にエコーキャンセルされた送信信号Sout42を供給し、通信ネットワーク24からRin43を受信する。 同様に、送信機/受信機14はハイブリッド18に双方向的に結合される(ここで、一実施形態では、送信機/受信機14はツイストペアのような2線式コネクションを通じてハイブリッド18に結合される)。ハイブリッド18は、エコーキャンセラ22に信号を供給するための一方向性導体およびエコーキャンセラ22から信号を受信するための一方向性導体を通じてエコーキャンセラ22に結合される(ここで、一実施形態では、一方向性導体の各セットはツイストワイヤペアであってもよい)。エコーキャンセラ22は、通信ネットワーク24に結合され、通信ネットワーク24にエコーキャンセルされた送信信号を供給し、通信ネットワーク24から受信信号を受信する。コントロール17は、送信機/受信機12、ハイブリッド16、エコーキャンセラ20、通信ネットワーク24、エコーキャンセラ22、ハイブリッド18、および送信機/受信機14のそれぞれに必要に応じて供給可能な1つまたは複数の制御信号を含む制御バスであってもよい。したがって、一実施形態では、コントロール17は通信システム10内のあらゆるユニットに結合されるが、代替実施形態では、一部のユニットのみがコントロール17との通信を必要とするとしてもよい。
図2は、図1のエコーキャンセラ20の一実施形態を示している。(なお、図2に関して説明する実施形態では、エコーキャンセラ20を近端エコーキャンセラと呼び、エコーキャンセラ22を遠端エコーキャンセラと呼ぶことに留意されたい。しかし、エコーキャンセラ22が通信システム10の近端にありエコーキャンセラ20が通信システム10の遠端にある場合には、図2に示されているエコーキャンセラがエコーキャンセラ22を指してもよいことが認識されるべきである。)エコーキャンセラ20は、DCノッチフィルタ45、オプションの非適応フィルタ31、加算器34、オプションの非適応フィルタ3
5、利得制御部33、非線形プロセッサ32、近端信号検出器26、適応フィルタ28、監視制御ユニット30、DCノッチフィルタ49、および加算器36を含む。DCノッチフィルタ45は、Sin37を受信し、近端信号検出器26および監視制御ユニット30にSin38を出力する。非適応フィルタ31が存在する場合、Sin38は非適応フィルタ31にも供給され、非適応フィルタ31は、監視制御ユニット30からコントロールを受信するように結合され、加算器34にSin39を出力する。これに対して、非適応フィルタ31が存在しない場合、Sin38はSin39と同一であり、Sin39は加算器34への入力である。加算器34は、Sin39および適応フィルタ28からのエコー推定信号48を受信し、利得制御部33、近端信号検出器26、および監視制御ユニット30に誤差信号46を供給する。利得制御部33は、監視制御ユニット30に双方向的に結合され、非線形プロセッサ32に誤差信号47を供給するように結合される。エコーキャンセラ20に非適応フィルタ35が存在する場合、一実施形態では、利得制御部33は非適応フィルタ35内にあり、非適応フィルタ35もまた、誤差信号46を受信し、監視制御ユニット30に双方向的に結合され、誤差信号47を供給する。非線形プロセッサ32は、監視制御ユニット30に双方向的に結合され、Sout42を供給する。監視制御ユニット30は、コントロール17にも結合され、Rin43を受信し、加算器36にトレーニング信号41を供給し、DCノッチフィルタ49からRin44を受信し、適応フィルタ28および近端信号検出器26に双方向的に結合される。DCノッチフィルタ49は、加算器36の出力(Rout40)を受信し、近端信号検出器26、適応フィルタ28、および監視制御ユニット30にRin44を供給する。加算器36は、トレーニング信号41およびRin43を受信し、Rout40を供給する。
図3は、図2の近端信号検出器26の一実施形態を示している。近端信号検出器26は、近端信号レベル推定器50、遠端信号レベル推定器52、Sin信号レベル推定器54、バックグラウンドプロセッサ56、近端信号検出閾値セレクタ58、および近端信号検出器60を含む。近端信号レベル推定器50は、誤差信号46を受信し、近端信号検出器60に結合される。遠端信号レベル推定器は、Rin44を受信するように結合され、近端信号検出閾値セレクタ58にも結合される。Sin信号レベル推定器54は、Sin38を受信するように結合され、近端信号検出器60にも結合される。バックグラウンドプロセッサ56は、監視制御ユニット30、近端信号検出閾値セレクタ58、および近端信号検出器60に結合される。近端信号検出器60もまた、近端信号検出閾値セレクタ58および監視制御ユニット30に結合される。
図4は、図2の適応フィルタ28の一実施形態を示している。適応フィルタ28は、適応フィルタ62、オプションの非適応フィルタ64、およびオプションのディレイ66を含む。非適応フィルタ64およびディレイ66が両方とも適応フィルタ28に存在する場合、ディレイ66は、Rin44を受信し、非適応フィルタ64および監視制御ユニット30に結合される。非適応フィルタ64は、ディレイ66、適応フィルタ62、および監視制御ユニット30に結合される。適応フィルタ62は、誤差信号46を受信するように結合され、エコー推定信号48を供給するように結合されるとともに、監視制御ユニット30にも結合される。非適応フィルタ64が存在しない場合、ディレイ66は適応フィルタ62に直接結合される。ディレイ66が存在しない場合、非適応フィルタ64がRin44を受信する。ディレイ66も非適応フィルタ64も存在しない場合、適応フィルタ62がRin44を受信する。
図5は、図2の非線形プロセッサ32の一実施形態を示している。非線形プロセッサ32は、信号レベル推定器68、非線形プロセッサコントローラ74、および適応バックグラウンドレベル推定器96を含み、監視制御ユニット30に双方向的に結合される。信号レベル推定器68は、近端信号レベル推定器70および遠端信号レベル推定器72を含む。非線形プロセッサコントローラ74は、非線形プロセッサONコントローラ76、非線
形プロセッサOFFコントローラ78、快適ノイズ発生器86、ノイズレベル整合器82、および出力信号ミキサ84を含む。適応バックグラウンドレベル推定器96は、短期バックグラウンドレベル推定器88、バックグラウンドレベル推定器コントローラ90、長期バックグラウンドレベル推定器92、およびバックグラウンドレベルアダプタ94を含む。近端信号レベル推定器70は、誤差信号47を受信し、非線形プロセッサONコントローラ76およびバックグラウンドレベル推定器コントローラ90に結合される。遠端信号レベル推定器72は、Rin44を受信し、非線形プロセッサONコントローラ76、非線形プロセッサOFFコントローラ78、およびバックグラウンドレベル推定器コントローラ90に結合される。非線形プロセッサONコントローラ76および非線形プロセッサOFFコントローラ78はノイズ発生器86に結合され、ノイズ発生器86はノイズレベル整合器82に結合される。出力信号ミキサ84は、ノイズレベル整合器82に結合され、誤差信号47を受信し、Sout42を供給する。短期バックグラウンドレベル推定器88は、バックグラウンドレベルアダプタ94に結合され、誤差信号47を受信する。バックグラウンドレベル推定器コントローラ90は、短期バックグラウンドレベル推定器88および長期バックグラウンドレベル推定器92に結合される。長期バックグラウンドレベル推定器92は、誤差信号47を受信し、バックグラウンドレベルアダプタ94に結合され、バックグラウンドレベルアダプタ94はノイズレベル整合器82に結合される。
図6は、監視制御ユニット30の一部の一実施形態を示している。この部分は、利得モニタ100およびフィルタ係数モニタ102を含む。利得モニタ100は、Sin38、誤差信号46を受信し、適応フィルタ28および利得制御部33に結合される。フィルタ係数モニタ102は、適応フィルタ28に結合される。
図7は、監視制御ユニット30の別の一部の一実施形態を示している。この部分は、デシメーションフィルタ104および108、デシメータ106および110、近端信号検出器114、オプションのコンパレータ112、エコーリターンロスエンハンスメント(ERLE)推定器116、パワー推定器120および118、適応フィルタシステム128、ならびにノイズ発生器132を含む。適応フィルタシステム128は、適応フィルタ122、最大値ロケータ124、および遅延決定部126を含む。デシメーションフィルタ104は、Rin44を受信し、デシメータ106に結合される。デシメーションフィルタ108は、Sin38を受信し、デシメータ110に結合される。デシメータ106は、近端信号検出器114、パワー推定器120、および適応フィルタ122に結合される。パワー推定器120および近端信号検出器114は、適応フィルタシステム128に結合される。オプションのコンパレータ112が監視制御ユニット30に存在する場合には、オプションのコンパレータ112は、誤差信号46およびSin38を受信し、適応フィルタシステム128に結合される。デシメータ110は、パワー推定器118および適応フィルタ122に結合される。パワー推定器118は、ERLE推定器116および適応フィルタシステム128に結合され、適応フィルタ122は、近端信号検出器114、ERLE推定器116、および最大値ロケータ124に結合される。最大値ロケータ124は遅延決定部126に結合され、遅延決定部126は、適応フィルタ28に推定遅延130を供給する。ノイズ発生器132は、Rin43を受信し、加算器36に注入信号41を供給するように結合される。図7の監視制御ユニット30の部分は、コントロール17にも結合される。
図8は、監視制御ユニット30のさらに別の一部の一実施形態を示している。この部分は、ストレージ150、パワー推定器134、平滑相関器152、およびトーン指示判断ユニット166を含む。パワー推定器134は、ディレイ136、ディレイ138、乗算器140および142、加算器144、マグニチュード146、ならびにローパスフィルタ148を含む。平滑相関器152は、ディレイ154、乗算器156および158、ローパスフィルタ160および162、ならびに発振器164を含む。ストレージ150は
、ディレイ136、ディレイ138、ローパスフィルタ148、ディレイ154、ローパスフィルタ160および162、ならびに発振器164に結合される。ディレイ136は、Rin44またはSin38を受信し、ディレイ138および乗算器142に結合される。ディレイ138は乗算器140に結合され、乗算器140もまたRin44またはSin38を受信する。加算器144は、乗算器140および142ならびにマグニチュード146に結合され、マグニチュード146はローパスフィルタ148に結合され、ローパスフィルタ148はトーン指示判断ユニット166に結合される。ディレイ154は、Rin44またはSin38を受信し、乗算器156に結合される。乗算器158もまた、Rin44またはSin38を受信し、ローパスフィルタ160、発振器164、および乗算器156に結合される。乗算器156は、ディレイ154を受信し、ローパスフィルタ162および発振器164に結合される。トーン指示判断ユニット166は、ローパスフィルタ160からR0(n)を受信し、ローパスフィルタ162からR1(n)を受信し、適応フィルタ28にトーンインジケータ信号168を供給する。
なお、図1〜図8は、通信システム10およびエコーキャンセラ20内に見出されるブロックの一実施形態を示していることに留意されたい。代替実施形態は、所望の機能に応じて、図示のもの以外の種々の異なる要素、図示のものよりも多数の要素、または図示のものよりも少数の要素を含んでもよい。さらに、図1〜図8内のブロックは、異なるグループ分けまたは異なる接続がなされることも可能であり、その場合でも同様の結果を達成することができる。したがって、図1〜図8は、以下で説明する概念を例示するために用いられる例を提供することのみを意図している。また、図1〜図8における接続は、単一導体(一方向性または双方向性)として描くことも、または多重導体(一方向性または双方向性)として描くことも可能であるが、多様な異なる接続が使用可能である。例えば、多重導体は、多様な異なる一方向性または双方向性の単一導体で置き換えることができる。同様に、単一導体は、一方向性または双方向性の多重導体に拡張することができる。信号は、単一導体を通じて直列に通信されることも可能であり、あるいは、多重導体を通じて並列に通信されることも可能である。また、信号は、単一導体または多重導体を通じて時間多重化されることが可能である。したがって、図1〜図8に示されている接続は、多様な異なる方法で実施することが可能であり、その場合でも所望の機能を達成することができる。また、以下でさらに説明するように、図1〜図8の設計は、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組合せのいずれで実施することも可能である。
[動作:]
送信機/受信機12は、ハイブリッド16にデータ信号を供給し、ハイブリッド16からデータ信号を受信する。ハイブリッド16は、送信機/受信機12と通信ネットワーク24との間で4線−2線変換を行う。したがって、送信機/受信機12は、通信ネットワーク24を通じて通信を行うために用いられる、2線式加入者回線を通じてハイブリッド16に結合される、例えば電話機またはモデムのようないかなる装置であってもよい。したがって、ハイブリッド16は、(送信機/受信機12を有する)ローカル加入者ループと通信ネットワーク(通信ネットワーク24)との間のインタフェースを提供する。送信機/受信機14およびハイブリッド18は、それぞれ送信機/受信機12およびハイブリッド16と同様に機能する。
送信機/受信機12と送信機/受信機14の間の通信において、電気エコーあるいはラインエコーが、ハイブリッド16およびハイブリッド18によって通信に導入される。このエコーの原因は、ハイブリッド16内のインピーダンス不整合、およびハイブリッド18内のインピーダンス不整合である。例えば、ハイブリッド16内のインピーダンスが完全に整合していると仮定すれば、受信信号Rout40からの全エネルギーが送信機/受信機12に送信されることになる。しかし、ハイブリッド16内にインピーダンス不整合
がある場合、受信信号Rout40からのエネルギーの一部が送信信号Sin37を通じて反射される。通信ネットワーク24を通じての(ハイブリッド16により導入されるエコーの場合には、送信機/受信機14からの)ラウンドトリップ遅延が十分に長い場合、送信機/受信機14によってSin37から受信される反射エコーが通信中に顕著になる。これは、電話音声通信中に、顕著なエコー、さらには耐え難い擾乱を生じることがある。一例では、十分に長い遅延とは、40ミリ秒よりも大きいラウンドトリップ遅延を指すものとすることができる。ラウンドトリップ遅延が増大すると、エコーが悪化して、より顕著になり、妨害的になることがある。(他方、ラウンドトリップ遅延がかなり小さくなれば、エコーは側音と区別できないため、妨害的ではないであろう。)ラウンドトリップ遅延は、伝送遅延、処理遅延、計算遅延等を含む多様な異なる遅延またはその組合せを含み得る。通信システムによっては、ラウンドトリップ遅延が、通信を途絶させるほど十分に大きくなることがある。そこで、通信システム10におけるラインエコーを低減するためにエコーキャンセラ20および22を用いることが可能である。例えば、(送信機/受信機14から)Rout40を通じて受信されSin37を通じて反射される信号からハイブリッド16によって導入されるエコーをエコーキャンセラ20によって処理することにより、通信ネットワーク24を通じて送信機/受信機14へ信号Sout42を返送する前に反射エコーを低減する。
上記のように、ラインエコーは、ハイブリッド16内のインピーダンス不整合およびハイブリッド18内のインピーダンス不整合によって導入される。また、音響エコーが、送信機/受信機12および送信機/受信機14を通じて通信に導入されることがある。例えば、送信機/受信機12がスピーカフォンである場合、受信信号が、スピーカを通じて出力された後、周囲環境ではね返り、信号の一部が送信機/受信機12のマイクロフォンに戻って送信機/受信機14にも反射されることがある。一実施形態では、エコーキャンセラ20は、ラインエコーに加えて音響エコーのいくつかの態様も低減するようにも機能することができる。
一実施形態では、通信ネットワーク24は、パケット電話ネットワーク(例えば、ボイス・オーバー・インターネットプロトコル(IP)、データ・オーバー・パケット、非同期転送モード(ATM)等があり、無線システムまたは有線システムのいずれにも適用可能である)または公衆交換電話網(PSTN)を含み得る。代替実施形態では、通信システム10は、いかなるタイプの通信システムであってもよい。いかなる通信経路も、インタフェース13またはインタフェース15として使用され得る。
コントロール17は、送信機/受信機12および14、ハイブリッド16および17、エコーキャンセラ20および22、ならびに通信ネットワーク24の間の制御経路を提供する。コントロール17経由で伝送される制御信号は一般にインライン信号ではない。例えば、コントロール17は、エコーキャンセラ20または22をイネーブルまたはディセーブルするためのイネーブル/ディセーブル信号を含み得る。コントロール17は、電話機がオンフックまたはオフフックのいずれであるかを示す信号も含み得る。
本明細書に記載の実施形態では、送信機/受信機12をエコーキャンセラ20に関して近端と呼び、送信機/受信機14をエコーキャンセラ20に関して遠端と呼ぶ。したがって、本明細書の実施形態は、エコーキャンセラ20に関して説明されることになる。しかし、エコーキャンセラ22がエコーキャンセラ20と同様に動作することが理解されるべきである。すなわち、代替実施形態では、送信機/受信機14をエコーキャンセラ22に関して近端と呼び、送信機/受信機12をエコーキャンセラ22に関して遠端と呼んでもよい。
図2は、エコーキャンセラ20の一実施形態を示している。ここで、上記のように、送
信機/受信機12は近端であり、送信機/受信機14は遠端である。Sin37は、送信機12からハイブリッド16を通じて送信される送信信号である。エコーキャンセラ20は、通信ネットワーク24およびハイブリッド18を通じて受信機14にエコーキャンセルされた送信信号Sout42を供給する。Rin43は、ハイブリッド18および通信ネットワーク24を通じて送信機14から受信される受信信号である。エコーキャンセラは、Rin43を受信し、ハイブリッド16を通じて受信機12にこの送信信号Rin43をRout40として供給する。
上記のように、Sin37は、ハイブリッド16内のインピーダンス不整合により導入される反射エコーを含むことがある。したがって、エコーキャンセラ20は、導入された反射エコーを低減(または消去)し、エコーキャンセルされた送信信号Sout42を供給する。すなわち、ハイブリッド16内のインピーダンスが完全に整合している場合、(実際には達成不可能な理想的な場合には)反射エコーがないので、ハイブリッド16の入力で受信される信号(例えばRout40)に対して、ハイブリッド16からの(Sin37での)実質的な応答はない。しかし、ハイブリッドが不平衡状態にある場合(通常の場合、例えばインピーダンスが不整合である場合)、Rout40経由で受信される信号から、図37に示すような応答が生じる。ハイブリッド回路の対応するインパルス応答(h)を、その入力(Rout40)および出力(Sin37)の視点から見た様子を図37に示す。エコーキャンセラ20内の適応フィルタ28は、Sin37の(入力信号Rout40に対する)ハイブリッド応答を「模倣」しようとし、それを加算器34で差し引く。なお、信号Rout40には線形歪み(純粋な時間的転移、すなわち、純粋遅延と呼ばれるパラメータだけ時間的にシフトしている場合を含む)があることに留意されたい。この歪みは、図37のハイブリッド16のインパルス応答に示すことができる。なお、インパルス応答は、純粋遅延部分およびばらつき時間の両方を含むことに留意されたい。純粋遅延とは、インパルス応答の開始から、何らかの顕著な値が生じ始めるまでの部分を指し、図37ではT1で表される。ばらつき時間とは、インパルス応答継続時間のうち、顕著な応答が発生し始めてから、応答が実質的に消失するまでの部分を指し、図37ではT4+T2で表される。インパルス応答の形状(ばらつき時間セグメントに対応する部分による)は、(Rout40/Sin37の入力/出力ポートから見た)ハイブリッドの周波数特性に変換することができる。
Sin37は、Sin37からDC成分を除去するためにDCノッチフィルタ45に供給される。なお、代替実施形態では、DCノッチフィルタ45の代わりにハイパスフィルタを用いてもよいことに留意されたい。同様に、加算器36の出力(Rout40)が、Rout40からDC成分を除去するためにDCノッチフィルタ49に供給される(ただし、代替実施形態では、代わりにハイパスフィルタを用いてもよい)。DCノッチフィルタを用いるほうが、ハイパスフィルタよりも計算量的に安価であり、しかもリップル効果が生じないため、フィルタのパスバンド全体を通じて利得をフラットに維持し易い。代替実施形態では、DCノッチフィルタ45およびDCノッチフィルタ49の機能を実行するために、単一の共有DCノッチフィルタを用いてもよい。
なお、加算器36は、Rin43およびトレーニング信号41を受信し、これら2つの信号の和を出力Rout40として供給することに留意されたい。しかし、トレーニング信号41がゼロである場合、出力Rout40は単に入力Rin43と同一である。すぐ後の説明のために、トレーニング信号41はゼロであり、Rout40はRin43に等しいと仮定する。また、非適応フィルタ31および非適応フィルタ35はオプションであり、以下でさらに説明することに留意されたい。すぐ後の説明のために、Sin38とSin39は等しく、誤差信号47は誤差信号46の利得調節バージョンであり、非適応フィルタ35の効果はないと仮定する。
したがって、Sin39は、送信機12によって送信される近端トーカ信号(Sgen)およびハイブリッド16によってRout40から導入される反射エコーを含む送信信号である。したがって、Sin39は、「Sgen+エコー」と表すことができる。適応フィルタ28は、加算器34に、反射エコーの推定であるエコー推定信号48を供給し、加算器34は誤差信号46を出力する。したがって、誤差信号46は、「Sin39−推定エコー48」と表すことができ、あるいは上記の式をSin39に代入すれば、「Sgen+エコー−推定エコー」と表すことができる。推定エコーが正確である(すなわち、実際のエコーに等しいかまたは実質的に等しい)場合、誤差信号46は、実質的なエコーがなく、Sgenのみを含むことになる。これが理想的な場合である。しかし、推定エコーが正確でない場合、誤差信号46はSgenおよび残留エコー成分の両方を含むことになる。この場合、誤差信号46は、「Sgen+残留エコー」と表すことができる。ここで残留エコーは「エコー−推定エコー」である。Sgenが存在しない場合(すなわち近端が無音である場合、つまり送信機12から送信されている信号がない場合)、誤差信号46は残留エコーのみを表す。この場合、以下でさらに詳細に説明するように、誤差信号46を用いて、残留エコーを最小化するための適応プロセスを実行することができる。しかし、Sgenが存在する場合、誤差信号46を用いて適応プロセスを実行することはできない。というのは、適応フィルタ28は誤差を用いて適応を行うが、Sgenが存在すると、誤差信号46はもはや誤差そのものではないからである。したがって、適応プロセスを実行することができるかどうかを判定するために、Sgenの検出が必要である。近端信号検出器26は、Sin38(これは本例ではSin39に等しい)およびRin44を受信するように結合され、誤差信号46および監視制御ユニット30からの制御信号を用いて、Sgenの存在を検出する(すなわち、送信機12における近端トーカの存在を検出する)。
適応フィルタユニット28において、エコー推定信号48すなわちy(k)は、y(k)=XT(k)・H(k)により計算される。ここでX(k)=[x(k),x(k−1),... ,x(k−N+1)]Tは、FIRフィルタスパンの継続時間にわたる入力信号ベクトルであり、x(n)=Rin44である。H(k)は、k回目の反復に対するフィルタ係数ベクトルである。ここで、H(k)=[h0(k),h1(k),... ,hN−1(k)]Tである。フィルタ係数の実際の更新は、一般的なLMS型のアルゴリズム、すなわちH(k+1)=H(k)+step_size・error(k)・X(k)によって支配される。ここで、error(k)は誤差信号46に対応し、step_sizeは適応レートを制御し、H(k+1)は新たなフィルタ係数ベクトルである。
誤差信号46における残留エコーは、非線形プロセッサ32によってさらに低減または除去することができる。非線形プロセッサ32は、誤差信号47(これは、本実施形態では、誤差信号46の利得調節バージョンである)および監視制御ユニット30からの制御信号を受信してSout42を生成する。Sout42は、理想的には、エコーを含まない。残留エコーを低減または除去することに加えて、非線形プロセッサ32は、近端トーカ信号(Sgen)のバックグラウンドノイズの保持または整合もしようとする。バックグラウンドノイズの整合は、真のバックグラウンドノイズの連続性を維持することによって、通信品質の改善を可能にする。この連続性がないと、遠端リスナは、遠端が話す時に、近端トーカからは無音しか聞こえないであろう。別法として、遠端が話す時に合成バックグラウンドノイズを提供してもよい。しかし、これは、(近端が話す時の)真のバックグラウンドノイズと(遠端が話す時の)合成バックグラウンドノイズとの間で妨害的な切替となることがある。したがって、バックグラウンドノイズの整合は、この妨害的切替を最小限にするのに役立つ。
監視制御ユニット30は、フィルタ係数モニタ(例えば、図6に関してさらに説明するフィルタ係数モニタ102)を含む。フィルタ係数モニタは、真のハイブリッドが存在す
るかどうかを判定することにより、適応フィルタ28が無効なハイブリッドに適応しようとしないようにするために用いられる。監視制御ユニット30は、オプションの適応フィルタ35内の利得制御部33を制御するための利得モニタも含む。利得制御部33の1つの目的は、通信システム10の安定性を維持することである。監視制御ユニット30は、適応フィルタ28の効率を改善するために、純粋遅延決定器および疎ウィンドウロケータ(これらは両方とも、図7に関してさらに詳細に説明する)も含む。監視制御ユニット30は、(図8に関してさらに詳細に説明する)トーンインジケータおよびトーン検出器も含む。トーンインジケータおよびトーン検出器は、通信システム10内でのシグナリングトーンを検出するために用いることができる。これらのシグナリングトーンとしては、例えば、当該シグナリングトーンの後にデータが送信されることになる時にエコーキャンセラをディセーブルするための、位相反転2100Hzトーンを挙げることができる。したがって、エコーキャンセラは、必要に応じてディセーブルすることができる。他方、適応フィルタ28が、送信機12または送信機14のいずれかによって送信されるトーン(例えば、単周波または多周波の正弦波等)に曝される場合、通信システム10の不安定性が生じることがある。したがって、トーンの検出を用いることにより、適応フィルタが発散して不安定性を引き起こすのを防ぐことができる。
上記の実施形態では、エコーキャンセラ20は非適応フィルタ31および35を含まない。しかし、代替実施形態では、非適応フィルタ31を、DCノッチフィルタ45と加算器34の間に結合して、(図4に関してさらに説明するように)適応フィルタ28の長さを短縮するために用いることができる。この実施形態では、非適応フィルタ31は、Sin38および監視制御ユニット30からの制御信号を受信してSin39を生成する。また、非適応フィルタ31を有する一実施形態では、エコーキャンセラは、加算器34と非線形プロセッサ32の間に結合された非適応フィルタ35を含んでもよい。非適応フィルタ35は、利得制御部33を含んでもよいし、別個のユニットであってもよい。この実施形態では、非適応フィルタ35は、非適応フィルタ31の効果を補償することにより、近端信号Sgenが歪まないようにする。非適応フィルタ35は、誤差信号46、監視制御ユニット30からの制御信号を受信し、非線形プロセッサ32に誤差信号47を供給する。(非適応フィルタ31および35については、図4に関してさらに後述する。)
また、監視制御ユニット30は、Rin43に信号を注入してRout40を生成するために、加算器36にトレーニング信号41を供給する。トレーニング信号41の注入は、ハイブリッドエコーパス(Rout40から、ハイブリッド16を通り、Sin37に戻るパス)の純粋遅延を推定するために用いることができる。純粋遅延とは、Rout40からSin37までの最小時間遅延を指す。トレーニング信号41の注入は、通信の最初に(電話会話の開始時のように)遠端信号が存在しない時に純粋遅延を推定するために用いることができる。なお、トレーニング信号41はオプションであることに留意されたい。監視制御ユニット30は、機能モジュールの全部または一部をイネーブルまたはディセーブルするためにコントロール17を受信してもよい。
図9は、本発明の一実施形態によるエコーキャンセラ20の動作を説明するフロー200を含む。フロー200は、図2のエコーキャンセラ20のようなエコーキャンセラによって提供される機能の概観である。フロー200内の各ステップの詳細は、図3〜図8および図10〜図38に関して以下でさらに詳細に提供される。フロー200は開始202から開始され、フローはブロック204に進み、DCノッチフィルタリングをRinおよびSinの両方に対して実行する。なお、加算器36が存在するか、またはトレーニング信号41が存在する場合、DCノッチフィルタリングは、Rin43ではなく加算器36の出力(Rout40)に対して実行されることに留意されたい。DCノッチフィルタ45が、上記のように、Sin37からDC成分を除去し、Sin38を生成する。同様に、DCノッチフィルタ49が、Rin43(または、トレーニング信号41によってはRout40)からDC成分を除去し、Rin44を生成する。次に、フロー200はブロ
ック206に進み、Rin44の長期パワーおよびSin38の短期パワーを推定する。なお、長期パワーおよび短期パワーは相対的な用語であることに留意されたい。すなわち、長期パワーとは、短期パワーに比べて長い期間にわたって測定されるパワーを指す。これらのパワーは、エコーキャンセラ20の近端信号検出器26で計算することができる。
次に、ブロック206で計算されたパワーを用いて、近端トーカ信号検出(NESD)閾値を求める。このNESD閾値は、その後、近端トーカ信号(すなわちSgen)の存在を判定するために用いられる。この判定も、エコーキャンセラ20の近端信号検出器26で実行することができる。次に、フロー200はブロック210に進み、適応フィルタ28を監視および制御する。ブロック210は、ブロック209、211、および213を含む。なお、監視制御適応フィルタ210内の機能はオプションであることに留意されたい。すなわち、ブロック209、211、および213のいかなる組合せを実行してもよく、いずれも実行しなくてもよい。ブロック209で、トーン指示処理を実行する。このトーン指示処理は、図2に関して上記で説明したように、そして図8に関してさらに説明するように、監視制御ユニット30で実行することができる。次に、フロー200はブロック211に進み、遅延(一実施形態では純粋遅延)を検出し、適切なサイズのフィルタリングウィンドウ(疎ウィンドウ)を位置決めする。すなわち、監視制御ユニット30は、遅延を検出し、適応フィルタ28の長さ(すなわちタップ数)が短くなるような疎ウィンドウを位置決めすることができる。
適応フィルタ長を短縮するもう1つの方法がブロック213で遂行される。一実施形態では、適応フィルタ28とともに、はるかに短いフィルタ長を有する非適応フィルタ31および33の組合せを使用する。詳細は図28〜図35に提供する。
監視制御適応フィルタ210の後、フロー200はブロック212に進み、適応フィルタを用いてエコー推定信号を生成する。例えば、これは、図2に関して上記で導入したように、適応フィルタ28がエコー推定信号48を生成することに対応してもよい。次に、フロー200はブロック214に進み、誤差信号および誤差信号の短期パワーを推定する。すなわち、ブロック214は、図2の加算器34に対応してもよく、Sin39からエコー推定信号48を差し引くことによって誤差信号46を推定する。そして、監視制御ユニット30を用いて、誤差信号46の短期パワーを推定することができる。
その後、フローはブロック216に進み、NESD閾値を用いて近端トーカ信号を検出する。すなわち、ブロック216で、Sgenが存在するかどうか(信号が図1の送信機12から送信されているかどうか)を検出する。これは、図2の近端信号検出器26で実行することができる。フローはブロック218に進み、利得制御部33の利得を監視し、適応フィルタ28および通信システム10の安定性を維持するように選択的に調節する(その詳細については以下でさらに詳細に説明する)。次に、フロー200は判断分岐220に進み、フィルタ係数を更新する必要があるかどうかを判定する。例えば、上記のように、Sgenが存在する場合、誤差信号46は、近端トーカ信号(Sgen)および残留エコー成分の両方を含む。この場合、誤差信号46は残留エコーそのものを表しているわけではないので、適応フィルタ28を更新すべきではない。そして、フローは判断分岐224に進む。これに対して、Sgenが存在しない(すなわち、近端トーカが無音である)と判断される場合、適応フィルタ28を更新することができ、フローはブロック222に進み、適応フィルタ28のフィルタ係数を更新した後、判断分岐224に進む。
判断分岐224で、バックグラウンド処理が必要であるかどうかを判定する。一実施形態では、バックグラウンド処理は、エコーキャンセラ20の動作中に周期的に実行される。代替実施形態では、例えば種々の適応フィルタ処理状態に応じて、さまざまな時刻にバックグラウンド処理を行うことができる。バックグラウンド処理を実行すべきでない場合
、フローはステップ230に進み、非線形処理を実行する。これに対して、バックグラウンド処理を実行すべきである場合、フローはブロック226に進み、フィルタ係数をバックアップする。すなわち、適応フィルタ28のフィルタ係数を(エコーキャンセラ20の内部またはエコーキャンセラ20の外部のいずれに配置されてもよいストレージユニット等に)記憶することができる。次に、フローはブロック228に進み、フィルタ係数を監視し、エコーキャンセラ安定性制御のために、ハイブリッドが存在するかどうかを判定する。
バックグラウンド処理がもしあればその後、フローは非線形処理230に進み、残りの残留エコーを低減または除去し、必要があればバックグラウンドノイズを挿入する。Rin43およびSin37を通じて受信されているサンプルがまだ他にある場合(判断分岐232で)、処理はブロック204に戻って次のサンプルに進み、さもなければ、フローは終了234で完了する。なお、電話アプリケーションでは、信号は通常は音声を含むので、信号のサンプリングレートは一般に8kHzであることに留意されたい。したがって、一実施形態では、サンプリングレートは8kHzであり、その場合、Rin43およびSin37のサンプルは0.125msごとに受信される。しかし、代替実施形態では、異なるサンプリングレートを用いてもよい。例えば、音楽アプリケーションでは、より高いサンプリングレートが一般に要求される。さらに、デジタルアプリケーションでは、サンプリングレートはデジタル情報の伝送レートに依存してもよい。
なお、図9のステップは、本発明の一実施形態を表していることに留意されたい。代替実施形態では、種々の異なる順序でそれらのステップを実行してもよい。その場合、一部のステップを、より多く、より少なく、または他のステップと並行して、実行してもかまわない。また、フロー200におけるステップの一部はオプションであってもよいし、他の実施形態では、所望の動作を実行するために追加のステップまたは異なるステップを用いてもよい。したがって、多くの変形形態が可能であり、フロー200はエコーキャンセラの動作の単なる一例に過ぎないことを当業者は認識するはずである。同様に、エコーキャンセラ20もまた、単なる可能な一実施形態を例示しているに過ぎない。代替実施形態では、図2に示したものよりも多数または少数のブロックまたはユニットを用いて、全部の機能、全部よりも少ない機能、またさらには異なる機能を実行してもよい。したがって、図2のエコーキャンセラ20は、単に一例と見なされるべきである。また、図2のブロックおよび図9のステップはすべて、データプロセッサ(例えば、マイクロプロセッサ、デジタル信号プロセッサ等)上で実行されるソフトウェアによって、ハードウェアによって、またはハードウェアとソフトウェアの組合せによって、実行可能であることに留意されたい。
図3は、近端信号検出器26の一実施形態を示している。近端信号検出器26の動作を図10〜図13に関して説明する。近端信号検出器26および図10〜図13のフローにより、エコーパス遅延およびエコーリターンロス(ERL)によって影響されない、高速で信頼性の高い検出が可能となる。エコーリターンロス(ERL)は、エコーパスにおける伝送損失およびハイブリッド損失によるエコーキャンセラのRoutポートからSinポートまでの信号の減衰である。近端トーカ信号が検出される時(すなわち、Sgenの存在が検出される時)、近端トーカ信号の存在は、誤差信号46がエコーによる誤差のみではないことを示しているので、適応が発散することを防ぐために、上記のように、適応プロセス(残留エコーの平均パワーを最小化するために適応フィルタ28の係数を変化させる)は中止される。なお、近端信号がシングルトーク状況(すなわち、近端トーカのみが存在する)またはダブルトーク状況(近端トーカおよび遠端トーカの両方が存在する時)のいずれの間であるかにかかわらず、近端信号が検出される時には適応プロセスが中止されることに留意されたい。適応プロセスを中止することに加えて、バックアップされたフィルタ係数からフィルタ係数をリストアすることが必要な場合がある。さらに、近端信
号および遠端信号が両方とも存在しない場合にも、適応プロセスは、エコーキャンセラ20がチャネルノイズまたは低い誤差信号に適応することを防ぐために停止され、それにより計算を最小限にする。したがって、エコーキャンセラ20は、遠端信号が比較的強い時や、近端信号が存在しない時のような必要な時に適応を行うように動作する。この状況において、適応フィルタ28は、エコーをエコー推定信号48として正しく推定するように適応することができる。また、以下で説明するように、適応フィルタプロセスの状態に応じて、近端トーカ信号検出のための閾値は「ギアシフト」(すなわち調節)される。
図10〜図13に記載の実施形態は、適応フィルタ28の係数をバックアップおよびリストアする方法も提供する。プロセスは、図13に示すように、状態マシンによって支配されてもよい。これは、バックアップの回数および頻度を最小化し、適応フィルタ28が発散するのを防ぐ。
図3は、近端信号検出器26の一実施形態を示している。信号レベル推定器が、近端信号(Sgen)、遠端信号(Rin)、および送信パス入力信号(Sin)のレベルを追跡する。したがって、近端信号レベル推定器50は誤差信号46を受信し、遠端信号レベル推定器52はRin44を受信し、Sin信号レベル推定器54はSin38を受信する。そして、これらの信号レベル推定器を用いて、近端信号検出(NESD)閾値セレクタ58および近端信号検出器60を制御する。バックグラウンドプロセッサ56が、適応フィルタ28の処理ステータスを監視し、NESD閾値セレクタ58および近端信号検出器60を制御する。なお、一般に、各信号レベル推定器は、測定すべき信号にローパスフィルタを適用してよく、推定は、パワーまたはマグニチュード(大きさ)のいずれにおいて行うことも可能であることに留意されたい。また、図3および図10〜図13についての以下の説明では、信号が8kHzのレート(これは、上記のように、通常の音声アプリケーションで一般的なレートである)でサンプリングされることを仮定する。
Sin信号レベル推定器54の一実施形態では、次式を用いてSinのパワー(PSin)を取得する:
上式において、Sin(n)は時刻nにおけるエコーキャンセラ20への送信パス入力である。PSin(n)は時刻nにおける推定送信パス入力信号パワーである。Nはスムージングファクタであり、一実施形態では32であると仮定される。代替実施形態では、或る範囲内のNの値を用いてもよい。一般に、Nは、Sinに対するパワー推定がSinの急速な変動に対して敏感になりすぎないくらい大きく選択すべきである。他方、Sinのパワー推定が音声信号レベルの変化を追跡できるくらい敏感であり、パワー推定の遅延が最小であるためには、Nはそれほど大きくなることはできない。別法として、パワーは、2*N−1サンプルのウィンドウサイズによる移動平均法を用いて推定することができる。この手法は式1によるパワー推定器と同等の帯域幅を提供することを示すことができる。
近端信号レベル推定器50は、誤差信号46を受信し、時刻nにおける近端信号パワーを取得する。しかし、上記のように、エコーキャンセラ20の近端信号(Sgen)を直接入手することはできない。すなわち、Sin38は、Sgenと、Rin44からの反射エコーとの混合である。したがって、近端信号レベル推定器50の一実施形態では、S
in39(これは、図2においてDCノッチフィルタ45と加算器34の間にフィルタが存在すると仮定すると、Sin38のフィルタリングされたバージョンである)とエコー推定信号48との差を用いる。したがって、誤差信号46が近端信号レベル推定器50に供給される。誤差信号46は、エコーキャンセラ20が入手できる最も精密なSgenの推定であるが、この推定の精度は適応フィルタ28の収束状態に依る。理想的には、適応フィルタが十分に収束している時、エコーの推定(エコー推定信号48)は正確である。実際には、上記のように、エコー推定信号48は一般にRin44からの反射エコーに等しくないため、誤差信号46は単にSgenではなく、Sgen+残留エコーである。適応プロセスが或る一定の時間ウィンドウにわたって継続すると、残留エコーにより導入される誤差が最小化される。したがって、近端信号レベル推定器50の一実施形態では次式を用いる:
上式において、誤差信号(error signal)46は、加算器34の出力におけるSin39とエコー推定信号48との差であり、Perror(n)は時刻nにおける推定近端信号パワーであり、Nは推定器のスムージングファクタである(これは本実施形態では32である)。
遠端信号レベル推定器52の一実施形態では、Rinの短期パワーを取得し、これを用いて、Rinの過去の短期パワー推定のいくつかにわたるRinの平均パワー(これは、エコーパスの範囲をカバーする)を計算する。例えば、一実施形態では、次式を用いてRinの短期パワーを求める:
上式において、Rin(kN−i)は、時刻kN−iにおけるエコーキャンセラ20への受信パス入力であり、PRin(kN)は、時刻kNにおける推定遠端信号パワーである(なお、計算コストを低減するために、PRin(kN)は1サンプルごとではなくNサンプルごとに推定されることに留意されたい)。Nはウィンドウサイズである(これは一実施形態では32である)。したがって、式4は、Nサンプルごとに(サイズNの)カレントウィンドウ内でのRinのパワーを計算し、ここでkはウィンドウを追跡する。すなわち、最初のウィンドウ(k=1の場合)はサンプル1〜32によって定められ、次のウィンドウ(k=2の場合)はサンプル33〜64によって定められ、等とすることができる。すると、次式を用いて、遠端信号の平均パワーを得ることができる:
上式において、「PRin((k−i)N)」は、時刻(k−i)Nにおける遠端信号パワー推定の過去のM個のスナップショットであり、ここでi=M−1,M−2,... ,0である。AVG PRin(kN)は、時刻kNにおける遠端信号レベル推定の平均であり、Mはその平均に対するウィンドウサイズである。ここで、64msまでのエコーパス遅延をカバーするように設計されたエコーキャンセラの場合、M=16である(すなわち、M*N=16*32=512サンプル)。例えば、カレントウィンドウが16番目のウィンドウ(すなわちk=16)である場合、AVG PRin(kN)の値は、過去の16(すなわちM)個のウィンドウのそれぞれについて計算されたPRin(kN)の値の平均、すなわちPRin(16*N),PRin(15*N),... ,PRin(2*N),PRin(N)の平均となる。過去のデータが十分にない場合(すなわち、処理済のウィンドウがM個よりも少ない場合)、利用可能な値のみを用いて平均を求めることができ、まだ計算されていない値についてはゼロとしてよい。例えば、3番目のウィンドウ(k=3)の場合、利用可能な過去のPRin(kN)の値は2個だけであるので、AVG PRin(kN)は3個の値の平均となり、M個の値の平均ではない。なお、図10に関して説明するように、AVG PRin(kN)はNサンプルごとに計算され、AVG PRin(kN)を計算した後、kの値をインクリメントして、次のNサンプルのウィンドウの開始を示すことができることにも留意されたい。
代替実施形態では、遠端信号レベル推定器52は、N=256として上記の式1または式2のいずれかを用いてRinの平均パワーを推定することができる。式4と同様に、AVG PRin(kN)の測定値は32サンプルごとにとるべきである。なお、上記のすべてのレベル推定は、パワーではなくマグニチュードを用いて行うことも可能であることにも留意されたい。また、上記の式1および式2は公称レートでデータを処理するが、式3および式4は、連続するサイズNのウィンドウに対するサブレート計算を実行する(したがって、Nサンプルごとに1回計算を実行する)ことにも留意されたい。代替実施形態は、上記の式をいかなる方法で構成してもよく、上記で与えた式には制限されない。
近端信号(Sgen)、遠端信号(Rin)、および送信パス入力信号(Sin)に対するレベル推定は、近端トーカ信号検出の制御において用いられる。そこで、図10は、図9のブロック206および208の一実施形態を示している。ここで、近端信号検出閾値(NESD_Threshold)が求められる。この閾値は、Nサンプルごとに1回再評価される。ここで、本実施形態ではNは32である。ブロック250で、Rinの短期パワーPRinを求める(例えば上記式3参照)。ここで、カレント時刻nは、解析中のカレントサンプルに対応する。ブロック252で、サンプルカウンタをインクリメントすることにより、nの新しい値を提供する。したがって、サンプルカウンタは、図9のフロー200を毎回通る間に(したがって、206および208を毎回通る間に)インクリメントされる。
フローは判断分岐254に進み、サンプルカウンタがウィンドウサイズNに達したかどうかを判定する。達していない場合、フローはブロック270に進む(なお、NESD_Thresholdは更新されないことに留意されたい)。ブロック270で、Sinのパワー(PSin)を計算する(例えば上記式1参照)。サンプルカウンタがNに達している場合、フローはブロック256に進み、ブロック256〜268のパスをNサンプルごとに1回だけたどるように、カウンタをリセットする(これは、一実施形態では、N=32として、32サンプルごとに行われる)。サンプルカウンタをリセットした後(一実施形態ではゼロにリセットする)、フローはブロック258に進み、Rinの平均パワーAVG PRinを計算する(例えば上記式4参照)。その後、フローは判断分岐260に進み、BACKUP_STATEが0または1であるかどうかを判定する(なお、BACKUP_STATEについては図13に関してさらに詳細に説明することに留意された
い)。BACKUP_STATEが0または1である場合、フローはブロック262に進み、下記の式5に示すように、K1を用いてNESD_Thresholdを調節する:
これに対して、BACKUP_STATEが0または1でない場合、フローはブロック264に進み、下記の式6に示すように、K2を用いてNESD_Thresholdを調節する:
したがって、NESD_ThresholdはNサンプルごとに1回再評価され、適応フィルタの状態(すなわちBACKUP_STATE。これは、図13に関してさらに説明する状態マシンに対応する)に応じて、NESD_ThresholdはK1*AVG
PRinまたはK2*AVG PRinのいずれかとして求めることができる。K1およびK2は、NESD閾値スケーリングファクタである。適応フィルタ28の適応プロセスの初期段階の間(すなわち、BACKUP_STATEが0または1である時)、NESD_Thresholdを比較的大きくし、適応フィルタ28が適応する機会を増やすことができる。他方、適応フィルタ28が初期適応段階を過ぎた時(すなわち、BACKUP_STATEが3または4である時)には、NESD_Thresholdを低減することにより、適応プロセスが発散することを防ぐことができる。一実施形態では、K1は1〜2の範囲内の値に設定される一方、K2は0.25〜1の範囲内の値に設定される。例えば、一実施形態では、ハイブリッドの条件に応じて、K1は1であり、K2は0.5である。さらに、K1およびK2のこれらの値は、適応プロセス中に静的または動的のいずれで設定することも可能である。上記の範囲外の代替値を用いてもよく、4状態を有する状態マシン(例えば、BACKUP_STATEが0〜3)の使用以外の他の方法を用いて、適応プロセスがいつまでその初期段階にあるかを判定してもよい。
ブロック262または264でNESD_Thresholdを調節した後、フローは判断分岐266に進み、NESD_ThresholdがAよりも小さいかどうかを判定する。NESD_ThresholdがAよりも小さくない場合、フローはブロック270に進み、PSinを計算する。NESD_ThresholdがAよりも小さい場合、ブロック268でNESD_ThresholdをAに設定する。すなわち、AVG PRinが小さすぎる場合に、NESD_Thresholdは最小レベルがAに制限される(ここで、一実施形態では、Aは−40dBm0ないし−45dBm0の範囲内の値に対応してもよい)。そして、フローはブロック270に進む。
図10のフローが完了した後、必要であれば適応フィルタ28の監視および制御を実行する(図9のブロック210参照)。(なお、ブロック209、210、および211については、以下で図20〜図34に関してさらに詳細に説明することに留意されたい。)その後、適応フィルタは、ブロック212でエコー推定信号48を生成し、フローは、図11に関してさらに詳細に説明されるブロック214および216に進む。すなわち、図
11のフローは、近端トーカ信号検出(すなわちSgenの検出)の制御を詳細に示す図9のブロック214および216の部分を示している。
ブロック276で、誤差信号46のパワー(Perror)を推定する(上記式2参照)。次に、フローは判断分岐278に進み、PerrorとPSinのうちの小さいほうがNESD_Thresholdよりも大きいかどうか(すなわち、MIN(Perror,PSin)>NESD_Thresholdかどうか)を判定する。大きい場合、フローは判断分岐280に進み、NESD_Hangoverタイマがゼロまでカウントダウンされたかどうかを判定する。ゼロまでカウントダウンされた場合、近端信号が検出されている。すなわち、MIN(Perror,PSin)>NESD_Thresholdであって過去の或る一定の時間ウィンドウ(NESD_Hangoverタイマに対応する)の間に近端信号が検出されていない場合に限り、近端信号が検出される。判断分岐278で、MIN(Perror,PSin)がNESD_Thresholdよりも大きくない場合、フローはブロック290に進み、NESD_Hangoverタイマの値をゼロに達するまでデクリメントすることにより、NESD_Hangover時間で決まるポーズを導入する。判断分岐280で、NESD_Hangoverタイマがゼロでない場合、ブロック286で、NESD_Hangoverタイマを所定値に設定する。
近端信号(Sgen)が検出された場合、フローは判断分岐280から判断分岐282に進み、フィルタ係数が更新されたかどうかを判定する。更新された場合、係数は、近端信号の存在により破損している可能性が非常に高いとみなされる。すなわち、係数更新のために用いられる信号はもはや純粋な残留エコーではなく、残留エコーとSgenの混合であるので、係数はもはや推定エコーを表していない。この場合、フローはブロック284に進み、フィルタ係数をリストアする。すなわち、「良好」と証明されているフィルタ係数のセットで置き換える。フィルタ係数をバックアップおよびリストアする方法については、図12および図13に関して後述する。次に、フローはブロック288に進み、BACKUP_STATEを更新する。判断分岐282でフィルタ係数が更新されていない場合、係数は残留エコーとSgenの混合を用いた適応をされていないので、係数は破損しているとはみなされない。この場合、フローはブロック286に進み、NESD_Hangoverタイマを所定値に設定する。
NESD_Hangoverタイマに用いられるNESD_Hangover時間の継続時間は、フィルタ係数適応を開始する前にSgenがもはや存在しないことを保証するように、しかもフィルタ係数の不要な適応およびリストアを避けるように、選択される。例えば、一実施形態では、NESD_Hangover時間は160サンプル、すなわち20ミリ秒である。したがって、NESD_Hangover時間の継続時間は、近端信号検出器26が過度に敏感になることを防ぎ、近端トーカ信号の検出と近端トーカ信号がないことの検出との間の切替を最小限にする。しかし、NESD_Hangover時間の設定が長すぎる場合、近端信号検出器26は、必要な時に近端トーカ信号を正確に検出することができるほど敏感ではなくなる可能性がある。
したがって、SgenおよびRinの信号レベル(すなわちパワー)のさまざまな組合せの下で、フィルタ係数(例えば、適応フィルタ28の係数)に関するさまざまなアクションが行われる。例えば、これらのアクションは次の表を用いて要約することができる:
SinはSgenとエコーすなわちRinとの混合であるので、上記の表に記載のいくつかの組合せは、通常の動作モード(すなわち、コネクションが切断されておらず、あるいは、異常な信号が回路に注入されていない)の下では有効な組合せでない。これらの無効な組合せは、項番3(SgenおよびRinの両方がローである時にSinはハイとなり得ないため)、項番5および項番6(Sgenがハイである時にSinはローとなり得ないため)である。残りの5個の組合せに対して3セットのアクションが用いられる。第1に、係数適応プロセスのための条件は、RinはハイであるがSgenはローである時(Sinがハイであるかローであるかにかかわらず遠端シングルトーク期間中、すなわちそれぞれ項番2および項番4)である。これらの条件の下で、誤差(誤差信号46)は(Sgenがローであるため)主として残留エコーに起因し、適応に対するSgenの効果は最小限である。第2に、フィルタ係数適応プロセッサを停止し、前に「良好」と判定されたフィルタ係数をリストアするための条件は、Sgenがハイである時(シングルトークであるかダブルトークであるかにかかわらず近端トーク期間中、すなわちそれぞれ項番7および項番8)である。第3に、近端および遠端の両方のトーカが無音である時には更新が不要である(項番1)。
Sgenの検出のための上記の方法によれば、エコーリターンロスが約6dB以下である時、エコーをキャンセルすることが可能となる。したがって、(上記の表1の項番4の場合のように)約6dB以下において、上記の方法は、Sgen(これは、上記のように、残留誤差が小さいかまたは無視できると仮定すると、誤差信号46として推定してもよい)とSinの最小値を用いることにより、これらの条件下での誤検出がなくなる。これ
に対して従来の解決法では、このような低いレベル(約6dB以下)においてはエコーリターンロスの変動により甚だしく影響を受けることがあるために、Sgenが実際には存在しない時にSgenが存在すると誤って検出する傾向がある。また、上記の方法によれば、エコーリターンロスが0dB(ハイブリッド減衰なし)となるまで適応プロセスを継続することが可能であり、それによりエコーをキャンセルすることができる。これに対して従来の解決法では、例えば6dBのようなレベルで適応プロセスが停止してしまう。
また、図10および図11に関して上記で説明した方法によれば、SgenのレベルがRinに比べて比較的低い時(上記の表1の項番8に対応する)であっても、Sgenの高速な検出が可能である。例えば、従来の解決法では、ダブルトーク検出閾値を、Rinエネルギーの1/4以上のSinエネルギー(すなわち、6dBの損失がハイブリッド回路により導入されることに対応する)として設定している。ハイブリッド減衰が10dBである場合、検出閾値におけるその4dBの差は、相当量のSgen信号がダブルトークとして検出されずに存在することを許容するほど大きい。したがって、このような従来の解決法は、近端トーク信号を必ずしも常に検出することができるわけではないか、または検出しても遅すぎる。これに対して上記の方法は、近端信号検出のために、Rinと比べて、Sgen(これは、上記のように、残留誤差が小さいかまたは無視できると仮定すると、誤差信号46として推定してもよい)とSinの最小値を用いる。検出閾値(NESD_Threshold)設定がエコーリターンロスとは独立となるため、近端信号検出は、従来利用可能な解決法よりも高速で信頼性が高くなる。
さらに、図10および図11に関して上記で説明した方法によれば、近端バックグラウンドに或る程度ノイズがある場合に、ダブルトーク(上記の表1の項番8)と遠端シングルトーク(上記の表1の項番4)とを区別することができる。近端バックグラウンドノイズレベルが比較的高い時、従来の解決法は、この状況をダブルトーク状況として検出し、適応プロセスを停止する。バックグラウンドノイズは長期間、さらには電話通話全体の継続時間にわたり持続することがあるため、適応フィルタは収束への変化が全く得られない可能性がある。したがって、本明細書に上記のように近端信号検出のためにRinに対してSgenとSinの最小値を使用することにより、バックグラウンドノイズレベルが比較的高い時であっても適応プロセスが継続するように検出閾値(NESD_Threshold)を設定することができる。(なお、唯一の真のダブルトーク条件は、RinおよびSgenの両方の信号レベルがハイの時であることに留意されたい。しかし、近端シングルトーク期間中であるかダブルトーク期間中であるかにかかわらず、近端トーカ信号が検出される時に、本明細書に記載の適応プロセスは停止され、フィルタ係数がリストアされるべきである。)
図12は、図9の判断分岐224およびブロック226の部分を示している。ここで、バックグラウンドプロセスを実行すべきかどうかを判定し、実行すべきである場合、フィルタ係数をバックアップする。図12のフローは(適応フィルタ28の)フィルタ係数のバックアップポリシを主に扱う。バックアップポリシの一実施形態は、良好なフィルタ係数が周期的にバックアップされることを保証することにより、バックアップ回数を最小化し、バックアップの頻度を最小化する。図12はブロック291から開始され、バックグラウンド1カウンタをインクリメントする。フローは判断分岐293に進み、バックグラウンド1カウンタが所定のカウンタ値Jに達したかどうかを判定する。達していない場合、フローはポイントH(図9におけるブロック228の後)に進む。所定のカウンタ値Jに達した場合、フローはブロック298に進み、バックグラウンド1カウンタを(ゼロに)リセットした後、判断分岐295に進み、適応フィルタ28のフィルタ係数が更新されたかどうかを判定する。更新されていない場合、フローはポイントHに進む。更新された場合、フローはブロック292に進み、バックグラウンド2カウンタをインクリメントする。
次に、フローは判断分岐294に進み、バックグラウンド2カウンタが所定のカウンタ値Lに達したかどうかを判定する。達していない場合、フローはポイントHに進む。所定のカウンタ値Lに達した場合、フローはブロック296に進み、バックグラウンド処理を実行する。すなわち、本実施形態では、バックグランド処理は、高々J*Lサンプルごとに実行され、これらの値JおよびLは、バックグラウンド処理の頻度を決定するのに役立つ任意の値に設定することができる。例えば、一実施形態では、Jは160サンプルであり、Lは10である。この場合、バックグラウンド処理は高々J*Lすなわち1600サンプルごとに実行される。すなわち、Jサンプルの後に適応フィルタ28のフィルタ係数が更新されていない場合、フローはポイントHに進み、バックグラウンド2カウンタはインクリメントされない。したがって、バックグラウンド2カウンタをインクリメントしてLと比較するのは、Jサンプルのカレントウィンドウの間に係数が更新された場合に限る。ブロック296で、バックグラウンド2カウンタをリセットする(本実施形態ではゼロにリセットする)。フローはブロック296から判断分岐300に進む。
判断分岐300で、現在のBACKUP_STATE(これについては図13に関してさらに詳細に説明する)が0または1であるかどうかを判定する。BACKUP_STATEが0または1である場合、ブロック304でBACKUP_STATEをインクリメントし、フローはブロック308に進む。BACKUP_STATEが0または1でない場合、フローは判断分岐302に進み、BACKUP_STATEが2であるかどうかを判定する。BACKUP_STATEが2でない場合、フローはブロック306に進み(BACKUP_STATEが3であったことを示す)、BACKUP_STATEを2に設定し、フローはブロック310に進む。判断分岐302でBACKUP_STATEが2である場合、フローはブロック308に進み、候補バックアップ係数を良好バックアップ係数にコピーする。(なお、候補バックアップ係数および良好バックアップ係数については図13に関して後述することに留意されたい。)次に、フローはブロック310に進み、現在のフィルタ係数を候補バックアップ係数にコピーする。すなわち、ブロック308で、候補バックアップ係数が良好バックアップ係数となり、現在のフィルタ係数が候補バックアップ係数となる。ここで、現在のバックアップ係数、候補バックアップ係数、および良好バックアップ係数はすべて、エコーキャンセラ20内、またはエコーキャンセラ20の外部の記憶位置のいずれかにある1つのストレージユニットまたは別々のストレージユニットに記憶することができる。その後、フローは図9のブロック228に進む。
本発明の一実施形態では、候補バックアップ係数および良好バックアップ係数という2つの係数バックアップを用い、4つの異なるBACKUP_STATE(0〜3)の組合せを有する。そこで、図13は、適応フィルタ28のフィルタ係数のバックアップおよびリストアのプロセスを制御する状態マシンを示している。
図13の状態マシンは4個のBACKUP_STATE0〜3を含む。STATE0は、候補バックアップ係数が利用可能でなく、良好バックアップ係数も利用可能でないことを示す。STATE1は、候補バックアップ係数は利用可能であるが、良好バックアップ係数は利用可能でないことを示す。STATE2は、候補バックアップ係数および良好バックアップ係数が両方とも利用可能であることを示す。STATE3は、候補バックアップ係数は利用可能でないが、良好バックアップ係数は利用可能であることを示す。なお、図13の状態マシンは、図9のブロック216および226の部分を実施していることに留意されたい。
一実施形態では、状態マシンは、リセットまたは初期化時に、STATE0から出発する。バックグラウンド処理への最近のL回のエントリにおいて近端信号(Sgen)が検出されない場合、状態マシンはSTATE1に遷移する。したがって、フィルタ係数の第1のバックアップに対する最小時間ウィンドウはJ*Lサンプルである(本実施形態では
、Lは10であり、したがってJ*Kは1600サンプル、あるいは、8kHzのサンプリングレートを仮定すると、200msである)。この状態遷移の場合、近端信号は検出されておらず、第1のバックアップが、現在のフィルタ係数を候補バックアップ係数にコピーすることによって実行される。近端信号(Sgen)を検出すると、状態マシンは元のSTATE0に遷移する。というのは、記憶されている候補バックアップ係数が、近端信号Sgenの検出における遅延により破損しているかもしれないからである。状態マシンは、バックグラウンド処理への最近のL回のエントリにおいて近端信号が検出されなくなるまでSTATE0にとどまり、バックグラウンド処理への最近のL回のエントリにおいて近端信号が検出されなくなると、状態マシンは再び上記のようにSTATE1に遷移する。
STATE1において、バックグラウンド処理への次のL回のエントリにおいて近端信号が検出されない場合、状態マシンはSTATE2に遷移し、第2のバックアップが、候補バックアップ係数を良好バックアップ係数にコピーし、現在のフィルタ係数を候補バックアップ係数にコピーすることによって実行される。この状態では、候補バックアップ係数および良好バックアップ係数の両方が利用可能であり、近端信号が検出されない場合には状態マシンはこの状態にとどまる。なお、一実施形態では、第2のバックアップ中に、状態が変化しなくても、連続するバックアップにおいて候補バックアップ係数および良好バックアップ係数の両方が更新されることに留意されたい。また、一実施形態では、STATE1からSTATE2に遷移した時に実行される2回のコピーは、まず候補バックアップ係数を良好バックアップ係数として(例えばポインタを用いて)マークしてから、現在のフィルタ係数を(良好バックアップ係数としてマークされていた)候補バックアップ係数にコピーすることによって、1回のコピーで実行される。
STATE2において、近端信号が検出されると、状態マシンはSTATE3に遷移する。ここでは、候補バックアップ係数は再び破損しているとみなされるが、良好バックアップ係数は依然として良好であるとみなされる。というのは、これらの良好バックアップ係数は、少なくともJ*Lの時間ウィンドウの後では良好であることが分かっているからである。状態マシンは、近端信号が持続する限りSTATE3にとどまり、近端信号がもはや存在しなくなればSTATE2に戻る。
なお、代替実施形態では、バックグラウンド処理への各エントリ(L回)は、Jサンプルごとではなく1サンプルごとに行うことも可能であることに留意されたい。また、図13の状態マシンは、多様な異なる方法で実施可能であり、図示したものより多数の状態、より少数の状態、または異なる状態を含んでもよい。
図6は、図2の監視制御ユニット30の一部の一実施形態を示している。この部分は、図2の利得制御部33とともに、システム10および適応フィルタ28の安定性を制御する。例えば、システム10は、ハイブリッド16のインパルス応答とは非常に異なる(適応フィルタ28の)フィルタ係数のセットに起因する持続的なアーティファクトを生成する場合に、不安定とみなされる。図37に関して上記で言及したように、適応フィルタ28の係数は、ハイブリッド16のインパルス応答を「模倣」しようとし、それを送出信号から差し引くことにより、反射エコーをキャンセルしようとする。しかし、適応フィルタ28の係数がインパルス応答からあまりに激しく変動する場合、音声やデータ信号の歪み、さらにはシステムハウリングのようなアーティファクトが発生することがある。システム10の不安定性は、次の2つの条件下で起こり得る。すなわち、(1)エコーキャンセラ20および22が閉ループシステムをなし、或る特定のタイプの信号により刺激される結果、システム10の利得が1よりも大きくなる場合、および(2)エコーキャンセラ20が開ループシステムをなしている場合である。
図14は、エコーキャンセラ20の利得を監視するための動的利得制御方法の一実施形態を示している。この方法は、適応フィルタ28および利得制御部33に結合された利得モニタ100で実行することができる。図14の動的利得制御方法は、閉ループシステムにおけるエコーキャンセラ20および22の安定性を保証する。例えば、誤差信号46がSin38よりも大きい場合(これは理論的には起こるはずがないが、実際には起こり得る)、エコーキャンセラ20の利得は1以上となる。同じことがエコーキャンセラ22で起これば(その結果、エコーキャンセラ22の利得も1以上になる)、エコーキャンセラ20および22を有する閉ループシステムの全ループ利得が1よりも大きくなる可能性があり、ハウリングとして知られるアーティファクトを生じ得る。したがって、図14の方法は、或る一定の時間ウィンドウ内のSin38のパワー(PSin)に対する誤差信号46のパワー(Perror)の比(上記式1および式2参照)がある適応閾値よりも大きい時に誤差信号46を減衰させる。さらに、図14の方法は、PerrorがPSinの何倍も大きい時に適応フィルタ28をリセットする。したがって、図14の方法は、閉ループシステムの全ループ利得が長時間にわたって1よりも大きくなることを防ぎ、それによりシステム10の安定性を保証する。また、図14の方法は、ハイブリッド特性が急激に変化した時に適応フィルタ28の再収束を加速する。
そこで、図14は、図9のブロック218の部分を示している。すなわち、図9のブロック216で近端トーカ信号が存在するかどうかを検出した後、フローはブロック218に進み、エコーキャンセラ20の利得を監視して選択的に調節する。そこで、フローは判断分岐322から開始され、PSinに対するPerrorの比(Perror/PSin)がリセット閾値よりも大きいかどうかを判定する。大きい場合、フローはブロック330に進み、適応フィルタ28のフィルタ係数をリセットする(すなわち、一実施形態では、ゼロに設定する)。別法として、係数をいかなる値にリセットすることも可能である。したがって、リセット閾値を用いてPerrorがPSinよりも大きすぎるかどうかを判定することにより、適応フィルタ28のリセットが不安定性を生じないようにすることができる。したがって、リセット閾値はいかなる値であってもよく、一実施形態では8に設定される。
Perror/PSinがリセット閾値よりも大きくない場合、フローは判断分岐324に進み、Perror/PSinが利得閾値よりも大きいかどうかを判定する。利得閾値は一般にリセット閾値よりも小さく、一実施形態では1に設定される。この利得閾値は、利得減衰の活性化を開始するための閾値である。Perror/PSinが利得閾値よりも大きい場合、フローはブロック328に進み、次の式7に示すようにalphaを用いて利得(gain)を調節する:
誤差信号46を減衰させるように、alphaは一般に1よりも小さい。したがって、一実施形態では、alphaは0.9996である。フローは判断分岐328に進み、利得が利得限界よりも小さいかどうかを判定する。利得が利得限界よりも小さい場合、フローはブロック334に進み、利得を利得限界に設定する。これは、利得が決して所定レベルを下回らないことを保証する。所定レベルは、一実施形態では、0.5である。例えば、ハイブリッドが開ループ回路内にある場合のように異常な状況下であっても、送信パス、伝送パスを完全に切断すること(すなわち、利得=0)は一般に望ましくない。そして、フローはブロック326に進む。判断分岐332で、利得が利得限界よりも小さくない
と判定された場合、フローはブロック326に進み、次の式8に示すように誤差信号(error signal)47を計算する:
判断分岐324で、Perror/PSinが利得閾値よりも大きくないと判定された場合、フローは判断分岐336に進み、利得が1よりも小さいかどうかを判定する。利得が1よりも小さくない場合、フローはブロック326に進み、誤差信号46を減衰させる。これに対して、利得が1よりも小さい場合、フローはブロック338に進み、次の式9に示すように利得を調節する:
betaは一般に1よりも大きい。というのは、利得は既に減衰しているので、回復させる必要があるからである。したがって、一実施形態では、betaは1.0004である。次に、フローは判断分岐340に進み、利得が1よりも大きいかどうかを判定する。利得が1よりも大きい場合、フローはブロック326に進み、誤差信号46を減衰させる。利得が1よりも大きくない場合、フローはブロック342に進み、利得を1に設定する。ブロック342の後、フローはブロック326に進むが、誤差信号46は減衰しない。というのは、(ブロック342で利得が1に設定されたので)誤差信号47は単に誤差信号46*1に等しいからである。したがって、要約すると、Perror/PSinがリセット閾値以上である場合、適応フィルタ28のフィルタ係数をリセットする。Perror/PSinがリセット閾値よりも小さいが利得閾値以上である場合、(例えばブロック326で)誤差を利得値だけ減衰させる。これに対して、Perror/PSinが利得閾値よりも小さい場合、誤差を減衰させないままとする(すなわち誤差信号47=誤差信号46)。したがって、図14のフローがシステム10の安定性の維持にどのように役立つかを認識することができる。
図15は、適応フィルタ28のフィルタ係数の分布を監視するためのフィルタ係数監視方法の一実施形態を示している。この方法は、監視制御ユニット30内にあって適応フィルタ28に結合されるフィルタ係数モニタ102で実行することができる。図15の方法は、開ループシステムにおけるエコーキャンセラ20の安定性を保証する。この監視方法は、比較的一様な分布を有する適応フィルタ28のフィルタ係数のセットの形成を検出する。ハイブリッド16によるインパルス応答が期待されるので、適応フィルタ28の係数の一様な分布は、ハイブリッドが存在しないことを示しており、したがって開ループ条件の可能性を示している。そこで、適応フィルタ28の係数の一様な分布を検出すると、フィルタ係数がリセットされ、エコーキャンセラ20はさらなる監視のためにアラート状態に置かれる。或る特定の時間ウィンドウの間にフィルタ係数が繰り返しリセットされる場合、エコーキャンセラ20は開ループ条件にあると仮定され、エコーキャンセラ20は迂回される。すなわち、適応フィルタ28は、真のハイブリッドが存在する場合にのみ適応を行うべきである。さらに、Rinによる連続正弦波入力およびSinのような非ゼロ信号(例えば正弦波トーン)を伴う開ループシステムにおける適応フィルタ28は、特に高
速に発散することがあるため、開ループシステムの検出の必要性が増す。
そこで、図15は、図9のブロック228の部分を示している。すなわち、(上記のように)図9のブロック226でフィルタ係数をバックアップした後、フローはブロック228に進み、適応フィルタ28の係数を監視する。そこで、フローはブロック344から開始され、適応フィルタ28のフィルタ係数をB個のビンに分割する。(Bは、フィルタ係数の個数/16となるように選択する。)フローはブロック346に進み、B個のビンのうちの最大および最小の係数パワーを求める。すなわち、フィルタ係数をB個のビンに分割した場合、各ビンはそのビン内の係数のパワー値(例えば、そのビン内の係数の平均パワー)に関連づけられ、ブロック346で、B個のビンのうちの最大パワー値およびB個のビンのうちの最小パワー値を選択する。フローは判断分岐328に進み、最大パワー値と最小パワー値の比(すなわち、最大パワー/最小パワー)がアラート閾値よりも小さいかどうかを判定する。フィルタが真のハイブリッドに向かって適応する場合、最小パワーに対する最大パワーの比は1よりもはるかに大きいはずである。他方、最小パワーに対する最大パワーの比が1に近い場合、フィルタが真のハイブリッドへ適応していないことを明瞭に示している。ハイブリッドが存在しない可能性を知らせるためのアラート閾値として、或る比が選択される。アラート閾値は、種々のハイブリッドの下での適応フィルタ挙動の統計的解析に基づいて選択される。一実施形態では、アラート閾値は8であるように選択される。
この比較の後、フローはブロック350に進み、適応フィルタ28のフィルタ係数をゼロにリセットする(または他の所定のリセット値(複数可)に設定する)。フローはブロック352に進み、アラート状態をインクリメントする。(アラート状態は、最小パワーに対する最大パワーの比がアラート閾値よりも小さいカレント期間中にフィルタ係数が何回リセットされたかを示す。なお、カレント期間は図12に関して上記で説明したJ*Lと同一である。というのは、図12のブロック310を出た後、フローは、図15に記載されている図9のブロック228に進み、図15のブロック344から開始されるからである。すなわち、図15は、図9および図12に示されているように、高々J*Lサンプルごとに実行されるバックグラウンド処理の部分とみなされる。)ブロック352の後、フローは判断分岐354に進み、アラート状態が迂回閾値に等しいかどうかを判定する。等しくない場合、エコーキャンセラ20は迂回モードには置かれないため、適応フィルタ28は適応を継続する。これに対して、判断分岐354で、アラート状態が迂回閾値に達している場合、フローはブロック356に進み、迂回モードを1に設定する。これは、開ループ条件が検出された(すなわち、ハイブリッドが存在しない)ことを示す。したがって、エコーキャンセラ20は、存在しないハイブリッドに適応しないように、迂回されることになる。
判断分岐348で、最小パワーに対する最大パワーの比がアラート閾値よりも小さくないと判定された場合、フローはブロック358に進み、アラート状態を0にリセットする。フローは判断分岐360に進み、迂回モードが1であるかどうかを判定する。迂回モードが1である場合、ブロック362でそれを0にリセットする。したがって、358への分岐により、ハイブリッド16を再接続して適応フィルタ28の適応を再開することが可能となる。
図5は、図2の非線形プロセッサ32の部分を示している。上記で説明したように、残留エコーを低減または除去することに加えて、非線形プロセッサ32は、近端トーカ信号のバックグラウンドノイズの保持または整合も行うことにより通信品質の改善を可能にしようとする。一般に、非線形プロセッサ32は、残留エコーが或る一定の閾値を下回るかどうかを検出し、電話回線バックグラウンドノイズの突然の消失を避けるために、無音ではなく快適ノイズで残留エコーを置き換える。バックグラウンドノイズのそのような突然
の消失は、電話コネクションが切断されたという印象につながりかねない。
現在用いられている従来技術の一方法では、合成バックグラウンドノイズを使用する。しかし、これは、真のバックグラウンドノイズと合成バックグラウンドノイズとの間で妨害的な切替となることがある。例えば、現在用いられている従来技術の一方法では、快適ノイズとしてホワイトノイズを使用する。しかし、ホワイトノイズは自然なバックグラウンドノイズとは全く異なるため、妨害的に聞こえる。現在利用可能な代替解決法として、あらかじめ記憶しておいたバックグラウンドノイズ信号を、バックグラウンドノイズに整合するように、繰り返し出力するものがある。しかし、この方法は、追加記憶スペースを必要とするし、バックグラウンドノイズの繰り返しが顕著になると、やはり通信にとって妨害的となることがある。
そこで、図5および図16〜図19は、前段落で説明した妨害的アーティファクトのようなエコーキャンセレーションの非線形処理により生じるアーティファクトを低減するために、エコーキャンセラ20における自然バックグラウンドノイズの保持または整合を行う非線形プロセッサ32の一実施形態を提供している。非線形プロセッサ32は、短期レベル推定器88および長期信号レベル推定器92を利用して、真のバックグラウンドノイズ信号のレベルの推定値を高い信頼性で求め、その閾値(NLP_ON閾値およびNLP_OFF閾値、後述)を調節する。短期推定器は、通話の最初にバックグラウンドノイズ信号の短時間のレベル推定値を生成する。他方、長期推定器は、本来適応的であり、長時間にわたりバックグラウンドノイズ信号レベルを高い信頼性で追跡することを目的とする。非線形プロセッサ32を起動するという判断は、遠端信号、近端信号、およびバックグラウンドノイズ信号の相対レベルに基づいて行われる。バックグラウンドノイズ信号が顕著になると、非線形プロセッサ32は、元のバックグラウンドノイズ信号をエコーキャンセラ20に通すことによって、元のバックグラウンドノイズ信号を保持する。バックグラウンドノイズ信号が低く、残留エコーが可聴になると、非線形プロセッサ32は、推定バックグラウンドノイズ信号レベルよりも数dB低いレベルの快適ノイズ信号で残留エコーを置き換える。生成される快適ノイズ信号は、遷移の可聴性を最小限にするために、元のバックグラウンドノイズ信号にも徐々にブレンドされる。したがって、非線形プロセッサ32は、可聴効果を最小限にしながら、可能な時には自然バックグラウンドノイズを保持し、またはバックグラウンドノイズの整合を行う。
エコーキャンセラ20における自然バックグラウンドノイズの保持または整合は、次の4段階の基本的なステップで実行される:(1)バックグラウンドノイズ信号、遠端トーカ信号、および近端トーカ信号のレベルを推定する;(2)非線形プロセッサ32の閾値を決定する;(3)非線形プロセッサ32が必要とされる場合に快適ノイズを生成する;そして(4)非線形プロセッサ32が必要とされる場合に快適ノイズをバックグラウンドノイズにミキシングする。
図5の非線形プロセッサ32は適応バックグラウンドレベル推定器96を含む。適応バックグラウンドレベル推定器96は、短期バックグラウンドレベル推定器88、バックグラウンドレベル推定器コントローラ90、長期バックグラウンドレベル推定器92、およびバックグラウンドレベルアダプタ94を含む。バックグラウンドノイズレベルの推定は、短期バックグラウンドレベル推定器88および長期バックグラウンドレベル推定器92で行われる。短期バックグラウンドレベル推定器88は、通話の開始時に初期の短時間の推定を提供し、長期バックグラウンドレベル推定器92は、長時間にわたりバックグラウンドノイズ信号のレベルに徐々に適応する。なお、バックグラウンドノイズレベルが変化する時、長期バックグラウンドレベル推定器92の高いノイズレベルへの適応レートは、低いノイズレベルへの適応レートよりも遅いことに留意されたい。したがって、推定器88および92は、近端トーカ信号および遠端トーカ信号の両方のレベルが所定閾値を下回
る時にアクティブとなる。すなわち、値が長期バックグラウンドレベル推定に利用可能である場合、推定器92のみが用いられる。したがって、短期バックグラウンドレベル推定器88は一般に、長期バックグラウンドレベル推定器92がまだ利用可能でない開始時(すなわち、通話の開始時)にのみ用いられる。(近端トーカ信号および遠端トーカ信号のレベルは、それぞれ近端信号レベル推定器70および遠端信号レベル推定器72で求められる。)
非線形プロセッサ32をオンにする(これは非線形プロセッサONコントローラ76によって実行される)ための閾値は、それをオフにする(これは非線形プロセッサOFFコントローラ78によって実行される)ための閾値とは異なる。非線形プロセッサONコントローラ76は、近端トーカ信号が小さく、遠端トーカ信号がアクティブである時に、非線形プロセッサ32をイネーブルする(すなわちオンにする)。非線形プロセッサOFFコントローラ78は、近端トーカ信号が比較的高いか、またはバックグラウンドノイズ信号が非常に顕著である時に、非線形プロセッサ32をディセーブルする(すなわちオフにする)。残留エコーを消去することと実際のバックグラウンドノイズを保持することの間のトレードオフは次のように行われる。バックグラウンドノイズ信号が比較的高い時、非線形プロセッサ32をディセーブルすることにより、バックグラウンドノイズがエコーキャンセラ20を通過することを可能にする。この場合、無視できる残留エコーが、マスキング効果により、はるかに顕著なバックグラウンドノイズ信号に埋没する。バックグラウンドノイズ信号が比較的低い時には、非線形プロセッサ32をイネーブルする。というのは、残留エコーは、かなり静かなバックグラウンドノイズ信号とともに存在する時には、より大きく聞こえるからである。いずれの場合でも、適応フィルタ28によって達成される良好な収束深さのために、残留エコーは小さい。
非線形プロセッサ32がイネーブルされると、快適ノイズが(快適ノイズ発生器86によって)生成され、知覚される音声に対する可聴「ノイズゲーティング」(すなわち、或るバックグラウンドから別のバックグラウンドへの、または或るバックグラウンドから無音へのノイズ切替)を最小化するために、ノイズレベルの整合が(ノイズレベル整合器82によって)行われる。自然バックグラウンドノイズ信号に近くなるように、いくつかのタイプの快適ノイズ信号を選択することができる。さらに、遷移を滑らかにするために、快適ノイズが実際のバックグラウンドノイズに徐々に取って代わり(これは出力信号ミキサ84によって実行される)、快適ノイズのレベルは推定バックグラウンドノイズレベルよりも数dB低く設定される。
図16は、本発明の一実施形態による適応バックグラウンドレベル推定を実行する方法を示している。一般に、バックグラウンドノイズ信号のレベルは、次の3つの条件が満たされる時(図16の判断分岐400、402、および404に対応する)にのみ推定することができる:(1)近端トーカ信号がない、(2)遠端トーカ信号がない(すなわち残留エコーがない)、および(3)上記の2つの条件が或る一定の期間満たされている。まず、判断分岐400で、近端トーカ信号のレベル(Perror)が誤差パワー閾値を下回るかどうかを判定する。誤差パワー閾値は、誤差信号がバックグラウンドノイズ信号、または近端トーカ信号とみなされるかどうかを判定するための閾値として定義される。一実施形態では、誤差閾値は−39dBm0である。このチェックは、近端トーカ信号をバックグラウンドノイズ信号とミキシングする可能性を低減する。というのは、以下で説明するバックグラウンドエネルギー推定は近端トーカ信号を含み得ないからである。Perrorが誤差閾値よりも小さい場合、フローは判断分岐402に進み、第2の条件をチェックする。判断分岐402で、バックグラウンドレベル推定において残留エコーを排除するために、遠端トーカ信号のレベル(PRin)がRin閾値よりも小さいかどうかを判定する。Rin閾値は、非線形プロセッサの前で顕著な残留エコーを生成するほど大きいRin信号レベルとして定義される。一実施形態では、Rin閾値は−27dBm0である。PRinがRin閾値よりも小さい場合、フローは判断分岐404に進み、最初の2
つの条件が或る一定の時間ウィンドウ(すなわちバックグラウンドハングオーバ時間)の間満たされていたかどうかを判定する。すなわち、バックグラウンドハングオーバタイマ=0である場合には、バックグラウンドハングオーバ時間で定められる時間ウィンドウの間、最初の2つの条件が満たされており、フローはブロック408に進む。バックグラウンドハングオーバ時間は、遠端トーカ信号および近端トーカ信号が、或る一定の時間ウィンドウの間、存在していないことを保証するために用いられる。一実施形態では、バックグラウンドハングオーバ時間は160サンプル、あるいは、8kHzのサンプリングレートを仮定すると、20msである。
判断分岐400でPerrorが誤差閾値よりも小さくない場合、または判断分岐402でPRinがRin閾値よりも小さくない場合、フローはブロック406に進み、バックグラウンドハングオーバタイマを所定値、例えば前段落で説明したバックグラウンドハングオーバ時間に設定する。そして、フローはポイントCに進む。(なお、ポイントCで、フローは図18に続いていることに留意されたい。図18については以下でさらに説明する。)判断分岐404で、バックグラウンドハングオーバタイマが0でない場合、ブロック410でバックグラウンドハングオーバタイマをデクリメントし、フローはポイントCに進む。
これに対して、判断分岐400、402、および404の3つの条件が満たされる場合、フローはブロック408に進み、バックグラウンドレベル(Pbackground)を、後のステップで決定される所望のレベル(Pnew_background)に適応させる。(なお、Pnew_backgroundは、図17のブロック426に関して計算され説明されることに留意されたい。したがって、ブロック408を最初に通る際には、Pnew_backgroundは任意の適当な初期値を有してよく、例えば快適ノイズレベルを表す初期値としてよい。)快適ノイズレベル整合における或る信号レベルから別の信号レベルへの遷移を滑らかにするために、適応はサンプルごとに行われる。したがって、適応は次の式10に示すように実行される。
式10において、Pbackground(n)は、時刻nにおける推定バックグラウンドパワーレベルである。Pnew_backgroundは、適応すべき新しいバックグラウンドパワーレベルである(そしてこれは第4のステップで求められる)。Rは適応レートを制御するファクタであり、FAST_RATE(高速レート)またはSLOW_RATE(低速レート)のいずれかに設定される。(なお、以下でさらに詳細に説明するように、Rは、図17のブロック428で設定されても、図19のブロック480、472、または476で設定されてもよいことに留意されたい。また、一実施形態では、適応レートについて、FAST_RATEは29に設定され、SLOW_RATEは211に設定されることに留意されたい。)
ブロック408の後、バックグラウンドノイズ信号のパワーレベルの推定が開始される。これは3つの主要なステップを含む。バックグラウンドノイズ信号のパワーレベルを推定する際の第1のステップは、或るウィンドウ内のバックグラウンドパワーレベルを計算することである。そこで、フローはブロック412に進み、次の式11に示すように、ウィンドウ内バックグラウンドのパワー(Pwindow_background)を計算する。
式11において、Pwindow_backgroundは、ウィンドウ内バックグラウンドパワーレベル推定値であり、誤差信号46は、図2の加算器34の出力におけるSin39とエコー推定信号48との差であり、w_sizeは平均のためのウィンドウサイズである。一実施形態では、w_sizeは64サンプルである。次に、フローはブロック414に進み、バックグラウンドサンプルカウンタをインクリメントする。
第2のステップは、或る一定の数の時間ウィンドウw_countにわたる最小のPwindow_backgroundを求めることを含む。(一実施形態では、w_countは128サンプルである。しかし、代替実施形態では、w_countは、最小のPwindow_backgroundを計算するために所望される時間ウィンドウの数に応じて任意の値をとり得る。)そこで、ブロック418の計算(次の式12に示す)は、w_size個のサンプルごとに1回実行される。第2のステップを実行するため、フローは判断分岐416に進み、バックグラウンドサンプルカウンタがw_sizeであるかどうかを判定する。バックグラウンドサンプルカウンタがw_sizeでない場合、フローは(図18の)ポイントCに進む。バックグラウンドサンプルカウンタがw_sizeである場合、フローはブロック418に進み、次の式12に示すように、ウィンドウ内バックグラウンドの最小パワーを求める。
したがって、Pmin_window_backgroundは、前の最小パワー(前にブロック418を通った時に求められた最小パワー)とブロック412で求められたPwindow_backgroundとの最小値を選択することによって求められる。次に、フローはブロック420に進み、Pwindow_backgroundをゼロにリセットする。フローはブロック422に進み、バックグラウンドサンプルカウンタを0にリセットし、ウィンドウカウンタをインクリメントする。そして、フローはポイントAに進み、図17に続く(判断分岐424から開始される)。
適応バックグラウンドレベル推定における第3のステップは、ブロック408に関して説明したバックグラウンドレベル適応のためのPnew_backgroundを決定すること、およびブロック408で用いられる適応レートを決定することである。Pnew_backgroundを決定するのが初めてであるかどうかに応じて2つの異なる手法がある。したがって、判断分岐424で、今回が初期推定である(通話の開始時のように、利用可能な長期データがないことを示す)かどうかを判定する。初期推定である場合、フローはブロック426に進み、Pnew_backgroundを、第1のステップで計算したPwindow_backgroundに設定する。次にフローはブロック428に進み、適応レートRをFAST_RATEに設定する。これに対して、判断分岐424で、今回が初期推定でないと判定された場合(長期データ、例えば過去のN個のサンプルが利用可能であるため、Pnew_backgroundが既に利用可能であることを
示す)、フローは判断分岐430に進む。なお、初期推定でない場合、Pnew_backgroundを決定するプロセスは、w_count個のウィンドウごとに1回行われることに留意されたい。したがって、判断分岐430で、ウィンドウカウンタがw_countに達したかどうかを判定する。達していない場合、フローは(図18の)ポイントCに進む。これに対して、ウィンドウカウンタがw_countに達した場合、フローはブロック432に進み、Pnew_backgroundを計算する。次に、フローはブロック434に進み、適応レートRを決定する。(Pnew_backgroundおよびRの決定の詳細については図19に関してさらに説明する。)フローはブロック436に進み、ウィンドウカウンタを0にリセットした後、ブロック438に進み、Pmin_window_backgroundを0にリセットする。そして、フローはポイントCに進む。
図19は、Pnew_backgroundが利用可能である時にPnew_backgroundおよびRを決定する方法を示している。図19の方法は、Pnew_backgroundが低レベルから高レベルに大きくジャンプしないようにしているが、高レベルから低レベルへの変化の時には、この変化はより高速であるため、そのような制約を課さない。したがって、一実施形態では、Pnew_backgroundは、Pbackgroundの2倍以下であるように上限が課される。また、図19の方法は、適応が高レベルから低レベルへのものである場合に、より高速の適応レート(FAST_RATE)を設定し、適応が低レベルから高レベルへのものである場合に、より低速のレート(SLOW_RATE)を設定する。異なるレートを用いるのは、バックグラウンドノイズレベルに関して、低から高へはゆっくりと変化させる一方、高から低へはかなり速く変化させるほうが、一般に良好に聞こえるからである。
図19は、図17のブロック432および434の部分を示している。図19において、フローは判断分岐466から開始され、Pmin_window_backgroundがPbackgroundの定数倍よりも大きいかどうか、すなわち「Pmin_window_background>定数*Pbackground」であるかどうかを判定する。ここで、一実施形態では、この定数は0.5である。Pmin_window_backgroundがPbackgroundの定数倍よりも大きい場合、フローはブロック478に進み、Pnew_backgroundを「(定数*Pmin_window_background)+快適ノイズレベル」に設定する。一実施形態では、ブロック478における定数は2である(ここで、この2は、前の文の0.5に対応する)。フローはブロック480に進み、適応レートをSLOW_RATEに設定する。そして、フローは図17のブロック436に進む。
判断分岐466で、Pmin_window_backgroundが「定数*Pbackground」よりも大きくない場合、フローは判断分岐468に進み、Pmin_window_backgroundがPbackgroundよりも大きいかどうかを判定する。大きい場合、フローはブロック474に進み、Pnew_backgroundをPmin_window_backgroundに設定する。次に、フローはブロック476に進み、適応レートRをSLOW_RATEに設定する。そして、フローは図17のブロック436に進む。これに対して、判断分岐468で、Pmin_window_backgroundがPbackgroundよりも大きくないと判定された場合、フローはブロック470に進み、Pnew_backgroundを「Pmin_window_background+快適ノイズレベル」に設定する。次に、フローはブロック472に進み、適応レートRをFAST_RATEに設定した後、図17のブロック436に進む。
したがって、PbackgroundまたはPmin_window_backgro
undがたまたま0になった時にPnew_backgroundが無音にならないようにするために、(ブロック478および470で)快適ノイズレベル(CNL)が加えられることに留意されたい。例えば、一実施形態では、CNLは−66dBm0に設定される。別法として、CNLは−60dBm0ないし−72dBm0の範囲内であってもよい。また、図19のフローはパワーレベル推定を用いて実行されているが、マグニチュード推定を用いても同じフローを遂行することができる。
図18は、本発明の一実施形態による、上記で得られたすべてのレベル推定を用いた非線形プロセッサ制御の方法を示している。すなわち、図18は、非線形処理が実行される図9のブロック230の部分を示している。図18において、フローはポイントC(これには、例えば、図16のブロック406、ブロック410、もしくは判断分岐416から、または図17のブロック438から到達することができる)から開始される。ポイントCから、フローは判断分岐440に進み、Perrorが非線形プロセッサオフ(NLP_OFF)閾値よりも大きいかどうかを判定する。大きい場合、フローはブロック452に進み、NLP_OFFをセット(これは、非線形プロセッサ32がオフにされることを示す)した後、ブロック454に進み、ノイズ傾斜(ramping )ファクタを所定値にリセットする。ノイズ傾斜ファクタは、低から高への信号レベル遷移を滑らかにするために用いられる。(ブロック454の後、フローは図9のブロック232に進む。)判断分岐440で、PerrorがNLP_OFF閾値よりも大きくないと判定された場合、フローは判断分岐442に進み、Pbackgroundがバックグラウンド閾値よりも大きいかどうかを判定する。大きい場合、フローはブロック452に進み、非線形プロセッサ32をオフにした後、ブロック454に進む。したがって、非線形プロセッサ32は、PerrorがNLP_OFF閾値よりも大きい場合、またはPbackgroundがバックグラウンド閾値よりも大きい場合にオフにされる。一実施形態では、NLP_OFF閾値は−27dBm0に設定され、バックグラウンド閾値は−39dBm0に設定される。
判断分岐442で、Pbackgroundがバックグラウンド閾値よりも大きくないと判定された場合、フローは判断分岐444に進み、Perrorが非線形プロセッサオン(NLP_ON)閾値よりも小さいかどうかを判定する。小さい場合、フローは判断分岐446に進み、AVG PRinがPRin閾値よりも大きいかどうかを判定する。AVG PRinがPRin閾値よりも大きい場合、フローはブロック448に進み、NLP_ONをセットする(これは、非線形プロセッサ32がオンにされることを示す)。したがって、非線形プロセッサ32は、PerrorがNLP_ON閾値よりも小さく、AVG PRinがPRin閾値よりも大きい場合にオンにされる。AVG PRinがPRin閾値よりも大きいという条件は、非線形プロセッサ32が、必要な時にのみオンにされることを保証する(というのは、顕著なエコーは、遠端トーカ信号が比較的強い時にのみ生じ得るからである)。他方、PerrorがNLP_ON閾値よりも小さいという条件は、さらに、残留エコーが小さくなければならないこと、および、近端トーカ信号が、除去されるべき残留エコーと誤ってみなされないことを保証する。したがって、一実施形態では、PRin閾値は−36dBm0に設定され、NLP_ON閾値は−42dBm0に設定される。しかし、代替実施形態では、これらを任意の適当な値に設定することができる。
なお、上記の実施形態では、NLP_OFF閾値とNLP_ON閾値の差(これは、一実施形態では、−15dBm0である)は、非線形プロセッサ32の「不感帯」であり、NLP_ONとNLP_OFFの間の急速な切替を避けるのに役立つ。
(判断分岐444で)PerrorがNLP_ON閾値よりも小さくないと判定されるか、または(判断分岐446で)AVG PRinがPRin閾値よりも大きくないと判定された場合、フローは判断分岐450に進み、NLP_ONがセットされているかどう
か(すなわち、非線形プロセッサ32がオンであるかどうか)を判定する。NLP_ONがセットされていない場合、フローは図9のブロック232に進む。これに対して、NLP_ONがセットされている場合(またはブロック448を出た後)、フローは判断分岐456に進み、快適ノイズがオンであるかどうかを判定する。快適ノイズがオンでない場合、フローは図9のブロック232に進む。これに対して、快適ノイズがオンである場合、フローはブロック458に進み、快適ノイズを生成する。ブロック458の後、フローはブロック460に進み、快適ノイズレベルを決定してから、ブロック462に進み、快適ノイズをバックグラウンドノイズとミキシングする。そして、フローはブロック464に進み、ノイズ傾斜ファクタを適応させた後、図9のブロック232に進む。
したがって、快適ノイズ信号は、非線形プロセッサ32がオンである時に生成されることになる。ホワイトノイズは一般に、快適ノイズとして好ましい選択ではない。というのは、ホワイトノイズは、日常生活の真のバックグラウンドノイズ信号とはスペクトル的にかけ離れているからである。したがって、本発明のいくつかの実施形態では、快適ノイズとして、ピンクノイズ、ブラウンノイズ、またはホス(Hoth)ノイズを用いる。例えば、一実施形態では、ピンクノイズが選択される。その理由は、ピンクノイズは計算に関する複雑さが低いからである。ピンク様ノイズは、(例えばブロック458において、)次の式13に示すように、一様分布擬似ランダム変数Xの2つの連続する実現を用いることによって生成される。
上記の式13において、X(n)は時刻nに生成される擬似ランダム変数(−1≦X(n)<1)であり、C1およびC2は、2つのランダムサンプルの混合比(mixture )およびYpinkのマグニチュードを修正するための定数である。したがって、Ypink(n)は、時刻nに生成されるピンク様ノイズサンプルである。2つの定数C1およびC2は、ピンクノイズ信号の平均パワーレベルがPbackgroundよりも約2dB低いことを保証するように選択される。例えば、一実施形態では、C1およびC2はそれぞれ0.75および1に選択される。したがって、一実施形態では、快適ノイズ整合レベルは、推定バックグラウンドノイズレベルに対して0〜4dBの範囲にわたる。
次に、生成された快適ノイズ(本実施形態ではYpink)を、次の式14に示すように、バックグラウンドノイズとミキシングする(図18のブロック462も参照)。
上記の式14において、Aは、整合対象のバックグラウンドノイズレベルのマグニチュードである(ブロック460に対応する)。例えば、一実施形態では、A=(Pbackground)の平方根、である。代替実施形態では、Pbackgroundがパワーではなくマグニチュードで表されている場合、A=Pbackgroundである。式14において、α(n)は、時刻nにおけるノイズ傾斜ファクタ(ここで0≦α<1)であり、これにより、非線形プロセッサ32のオンセット時に、或るレベルから別のレベルへ
の滑らかな遷移が可能となる。Sout(n)は、時刻nにおける非線形プロセッサ32の最終出力である(すなわち、Sout(n)は図2のSout42である)。ノイズ傾斜ファクタ(ブロック464で適応される)は、式15に示すように、サンプルごとに計算される。
式15において、bは、1よりも小さいように選択される傾斜定数である。一実施形態では、bは約0.9986であり、0.9986500=0.496であるので、500msでその約半分に減衰する。この傾斜プロセス中に、Sout(n)は、傾斜プロセスが継続する場合、誤差信号46(これは図2のSin39−誤差推定信号48である)から出発して、α(n)が1から0に変化するにつれてA*Ypink(n)に徐々に切り替わる。傾斜は、非線形プロセッサ32のオンセット時およびオフセット時の両方に適用することができる。しかし、一実施形態では、傾斜は、非線形プロセッサ32のオンセット時にのみ適用される。その理由は、非線形プロセッサ32がオフになる時には通常、大きいレベルの近端トーカ信号を検出しており、快適ノイズ(一実施形態ではピンクノイズ信号)から近端トーカ信号に徐々に切り替わることは望ましくない可能性があるからである。しかし、代替実施形態では、非線形プロセッサ32がオンになる時およびオフになる時の両方にこの傾斜を適用してもよい。
図7は、純粋遅延を推定するように機能する監視制御ユニット30の部分を示している。純粋遅延推定は、適応フィルタ28のタップ数を低減することにより、上記で説明したように、より少ない計算量で、より高速かつより深い収束を得ることを意図している。すなわち、図7と、図20〜図24のフロー図に示されている監視制御ユニット30の部分を用いて、純粋遅延を検出し疎ウィンドウを位置決めする(図9のブロック211)ことができる。一実施形態では、純粋遅延を検出し、適応フィルタ28の長さ(すなわちタップ数)が低減されるように適切なサイズのフィルタリングウィンドウ(疎ウィンドウ)を位置決めする。そこで、図7について、図20〜図24のフローに関して説明する。
図7および図20〜図24は、エコーキャンセラ20における疎ウィンドウの動的位置決めのためのエコー信号の純粋遅延(すなわち、図37のT1)の推定を実現するために用いられる一実施形態を提供する。純粋遅延推定は、以下でさらに詳細に説明するように、大きいエコーパス遅延範囲をカバーすることに伴う計算コストを低減するために、フルウィンドウ適応フィルタを、適切に位置決めされた狭ウィンドウ適応フィルタで置き換えることによって、実行される。すなわち、図37のインパルス応答全体をカバーするフルウィンドウ適応フィルタ(T1およびT4+T2の両方をカバーするほどに大きい)を使用するのではなく、純粋遅延部分を排除し、大きい応答が生じる部分であるT4+T2を捕捉するために位置決めされた、より小さいウィンドウ(疎ウィンドウ)を用いることができる。また、純粋遅延推定は、より短い長さの適応フィルタを用いることによって、適応フィルタ28の収束の速さおよび深さを増大させる。また、純粋遅延推定を用いて、(例えば電話通話中に)エコーの動的に変化する純粋遅延を監視し、それに従って適応フィルタウィンドウ(例えば疎ウィンドウ)を調節することができる。
本明細書に記載の実施形態は、能動的手法(例えば、両方向に無音で開始される通話の純粋遅延を確定するために、短時間で狭帯域の非常に低レベルのノイズパルスを通話の最初に注入すると同時にサブレート適応を実行する。この場合、一般に、無音が300ms
持続すれば、低レベルのプロービング信号を注入して純粋遅延を求めるには十分な長さである)だけでなく、受動的手法(例えば、音声信号のみを用いたサブレートフィルタ適応)を含んでもよい。また、本明細書に記載の実施形態は、純粋遅延を扱うための2つのシナリオを含む。第1のシナリオは、サービス品質(QoS)原理からエコーを直ちに低減することが必要な、電話通話の開始に関連する。第2のシナリオは、電話通話中のエコーパスの変化に関連する。通常、疎ウィンドウ(および関連する純粋遅延)は、電話通話の継続時間全体を通じて変動しない。しかし、一部の通話(特に、例えば「コールフォワード」機能や「会議通話」機能がアクティブである通話)に関しては、純粋遅延がかなり変化することがある。したがって、本明細書に記載の種々の実施形態は、毎秒1回までの疎ウィンドウの変動に対応する純粋遅延のダイナミクスをサポートする。なお、本明細書に記載の実施形態は、通話の開始または終了を判定するために、制御信号17を通じて提供される独自仕様の(すなわち非標準の)シグナリングを用いて、電話機がオンフックまたはオフフックのいずれであるかを判定してもよいことに留意されたい。
図7および図20〜図24の実施形態では、サブレート適応プロセスを用いることにより、計算効率の高い純粋遅延の推定が可能である。しかし、代替実施形態では、サブレートプロセスを用いなくてもよい。また、一実施形態では、本質的に可変の純粋遅延の推定を扱うために、純粋遅延の生の測定結果を非線形フィルタリング(すなわち、判定あるいは制限プロセスを用いた処理。その一例は、図23に関して後述する)した後、適応フィルタ28に戻してもよい。上記のサブレートプロセスは、NLMS(正規化最小平均二乗)適応フィルタを(図7の適応フィルタ122として)用いてもよい。しかし、適応フィルタ122は、このタイプの適応フィルタリングに限定されない。例えば、PNLMS、RLS、または他の適応フィルタを用いてもよい。なお、NLMS適応フィルタリングアルゴリズムは一般に単純であり、受容可能な収束特性を有することに留意されたい。他の適応フィルタアルゴリズムは、計算量的にさらに要求が厳しい。PNLMS(比例正規化LMS)アルゴリズムは、適度の計算コストで収束性が明確に向上する。RLS(再帰最小二乗)適応アルゴリズムは一般に、大幅に高速である(しかし、計算コストも大幅に高くなる)。しかしRLS適応アルゴリズムは、数値誤差に敏感であり、数値不安定性を示す。収束性の観点からは、他の適応フィルタ(例えば、サブバンド、アフィンおよびそれらの変種)のほうが魅力的なことがあるが、それらはNLMSと比較して、計算量的にさらに要求が厳しい。しかし、本明細書に記載の実施形態は、NLMS適応フィルタリングの使用に限定されない。メインレート適応フィルタおよびサブレート適応フィルタの両方とも、他のタイプの適応フィルタリングソリューションに基づくことが可能である。
(ノイズまたは近端トークによる影響から)本質的に信頼性が低いためにサブレート適応フィルタ122の発散を引き起こしかねないような測定値の生成を防ぐために、純粋遅延推定は、短期サブレート信号パワー推定およびサブレート近端トーカ信号検出のようなメカニズムによって制御することができる。なお、適応フィルタ28に関しては、上記で説明したように、誤った係数の生成を避けるためにSgenの検出時に適応プロセスを停止させるが、同じ原理を、純粋遅延を求める際に用いられる適応フィルタ122に適用してもよいことに留意されたい。
適応フィルタ長を短縮することに加えて、純粋遅延の推定は、例えば、遠端エコーキャンセラがオフにされる時、通話が市内通話から長距離通話に(コールフォワード機能、コールトランスファ機能等により)切り替わる時、会議通話動作で発呼者/被呼者が広い地域にわたって分散している時のような、他の状況に対処するために用いることができる。
図7は、ブロック図形式で、推定遅延130を提供するために用いられる監視制御ユニット30の部分を示している。適応フィルタ122(これは、サブレート処理を利用する一実施形態では、サブレート適応フィルタである)は、電話通話の継続時間中、連続的に
、バンドパスインパルス応答の短期推定値を提供する。インパルス応答の純粋遅延測定値が、制限プロセスすなわち判断ブロック(例えば図23)を用いて連続的にフィルタリングされる。この制限プロセスすなわち判断ブロックは、上記のように、非線形フィルタとしてよい。このフィルタにより、通話の開始時における純粋遅延の高速判定が可能となり、新たな純粋遅延値が新たな値の有効性に関する基準を満たす場合には、通話中に純粋遅延の調節または新たな純粋遅延の選択が可能である。すなわち、エコーの発生を最小限にするため、或る純粋遅延から別の純粋遅延への通話中の切替は、純粋遅延測定値の適切な確認に基づくことができる。一実施形態では、この確認は、通話中に純粋遅延を変化させるための保守的メカニズム(例えば、サブレートインパルス応答最大値の位置の3個以上の測定結果を解析することによる)を提供する。
オプションの一変形形態では、図24に関して説明するように、エコーキャンセラ20は監視モードで動作してもよい。このモードでは、図7のシステムは、電話通話の開始時にのみアクティブであり(すなわち、純粋遅延が推定され)、その場合、或る一定の条件が満たされれば、休止状態に入る。休止状態の間、ERLE推定器が、適応フィルタ28に対応するERLEを、或る閾値と比べて連続的にチェックする。ERLEが閾値を下回り、所定継続時間そのままにとどまる場合、図7のシステムはアクティブモードに復帰し、純粋遅延の推定に進む。
図20のフローは判断分岐482から開始され、純粋遅延推定オプションがアクティブであるかどうかを判定する。なお、このオプションは、エコーキャンセラ20にプログラムされた設定に対応してもよいことに留意されたい。この場合、オプションがアクティブであるかどうかの判定は、図20に示されているようにサンプルごとに行う必要はない。代替実施形態では、判断分岐482の判定は、電話通話の開始時に行うことができる。しかし、純粋遅延推定オプションがアクティブである場合にのみ、フローは判断分岐483に進む。純粋遅延推定オプションがアクティブでない場合(通話の開始時に判定するか、またはサンプルごとに判定するかにかかわらず)、純粋遅延推定を実行すべきではないので、フローは図9のブロック213に進む。
判断分岐483で、通話の開始時におけるオプションのトレーニングがアクティブであるかどうかを判定する。純粋遅延推定オプションと同様に、トレーニングオプションもまたエコーキャンセラ20にプログラムすることが可能であり、したがって、図20に示されているように各サンプルごとにではなく電話通話の開始時にチェックすることができる。オプションのトレーニングがアクティブでない場合、フローは図21の判断分岐484に進む。これに対して、オプションのトレーニングがアクティブである場合、フローは判断分岐497に進む。要約すれば、オプションのトレーニングがアクティブでない場合、図20のフローは不要である。同様に、純粋遅延推定オプションがアクティブでない場合、図20および図21のフローは不要である。したがって、エコーキャンセラ20は、選択されている設定およびオプションに応じて、多様な異なる方法で動作し得る。
また、各電話通話の開始時に、図20〜図24のフローで用いるために多くの変数を初期化してもよいことに留意されたい。例えば、一実施形態では、トレーニング迂回フラグをFALSEに設定し、純粋遅延サンプルカウンタをリセットし、トレーニングインデックスをリセットし、ERLEカウンタをリセットする。これらの変数については、図20〜図24のフロー全体で説明する。また、いくつかの値は、エコーキャンセラ20内にプログラムしても、固定配線してもよい。例えば、測定サイクルNは、各通話の開始時に特定の値に初期化してもよく、エコーキャンセラ20内に固定配線してもよい。なお、本明細書全体を通じて記載される他の変数は、通話の開始時に初期化してもよく、エコーキャンセラ20内に固定配線しても、(永久的かどうかを問わず)プログラムしてもよいことに留意されたい。
判断分岐483で、通話の開始時におけるオプションのトレーニングがアクティブであると判定された場合、フローは判断分岐497に進む。オプションのトレーニングにより、純粋遅延を通話の開始時に推定することが可能となる。通話がまさに開始される時には、一般にはまだ音声がないので、トレーニング信号をRin43に注入してRout40を生成することができる(図2のトレーニング信号41参照。これは、加算器36経由でRin43に注入することができる)。すなわち、十分なRin43のエネルギーがない時には、純粋遅延を求めることは不可能である。そこで、トレーニング信号41を注入することによって、純粋遅延推定値を求めることができる。一般に、トレーニング信号41は、電話通話の開始時に、会話の前に、注入される比較的低エネルギーの短いバーストである。すなわち、トレーニング信号41は一般に、注入閾値よりも小さい。注入閾値は、一実施形態では、−30dBm0ないし−55dBm0の範囲にある。そこで、オプションのトレーニングがアクティブである場合、フローは判断分岐497に進み、トレーニング迂回フラグがTRUEであるかどうかを判定する。TRUEである場合、フローは図21の判断分岐484に進み、トレーニングをすべて迂回し、以下で説明するように、図21の純粋遅延推定に進む。
判断分岐497で、トレーニング迂回フラグがTRUEに設定されていないと判定された場合、フローは判断分岐499に進み、トレーニングインデックスが2以下であるかどうかを判定する。トレーニングインデックスは、トレーニング信号を用いる場合に、トレーニング信号が通話の開始時にのみ注入されることを保証する。上記で言及したように、トレーニングインデックスは、通話の開始時にリセットすることができるので、初めて判断分岐499に到達した時には、トレーニングインデックスは(当初ゼロにリセットされているので)1以下のはずである。これに対して、以下で説明するように、第1の測定サイクル(これは、一実施形態では、300ミリ秒である)の後、トレーニングインデックスは(例えば図21のブロック505で)1にインクリメントされる。この場合でも、トレーニングインデックスは依然として1以下であるので、トレーニング信号の注入が可能である。しかし、次の測定サイクルの後、トレーニングインデックスは(例えば図21のブロック505で)2にインクリメントされ、この時点以降、判断分岐499では、フローは図21の判断分岐484に進むことになり、もはやトレーニング信号41を注入する可能性はなくなる。というのは、トレーニングインデックスが2であることは、もはや通話の開始時とはみなされないことを示しているからである。一般に、通話の開始時以外の時にトレーニング信号を注入するのは望ましくない。というのは、そのトレーニング信号が通話の当事者に聞こえてしまうかもしれないからである。
判断分岐で、トレーニングインデックスが1以下である場合、フローはブロック489に進む。これは、依然として通話の開始時とみなされることを示す。ブロック489で、Sinの長期パワー(PSin)およびRinの長期パワー(PRin)を計算する(これは、上記の式1、式3、および式4を用いて行うことができる)。次に、フローは判断分岐490に進み、PSinがPSin閾値よりも小さくPRinがPRin閾値よりも小さいかどうかを判定する。第1のチェック(PSinがPSin閾値よりも小さいかどうか)は、近端トーカ信号Sgenがないことを保証する。一実施形態では、このPSin閾値は−50dBm0である。第2のチェック(PRinがPRin閾値よりも小さいかどうか)は、遠端トーカ信号が存在しないことを保証する。一実施形態では、このPRin閾値は−50dBm0である。両方の条件が満たされる場合、フローはブロック492に進む。これは、会話がまだ開始されておらず、トレーニング信号を注入することができることを示している。そこで、ブロック492で、トレーニング信号(例えば、図2のトレーニング信号41)を注入するか、または、ブロック492を通るのは今回が2回目である場合には注入を継続する。これに対して、判断分岐490で、両方の条件とも満たされるわけではない場合、フローはブロック495に進み、トレーニング信号フラグをT
RUEに設定する。すなわち、一旦PSinまたはPRinがそれぞれの閾値を超過したら、トレーニングインデックスにかかわらずトレーニングを(判断分岐497で)迂回し、それにより、現在の通話中にトレーニング信号が注入されることを防ぐ。ブロック495および492の後、フローは図21の判断分岐484に進む。
図21は、純粋遅延推定を実行する一実施形態を示している。図21のフローはサブレート処理を使用するので、フローはD個のサンプルごとにのみ実行される。ここでDは図7のデシメータ106および110に対応する。例えば、一実施形態では、Dは8であり、Rin44およびSin38のサンプルが8個ごとにのみ処理される。しかし、代替実施形態では、Dは任意の値(1を含む。1の場合、全サンプルが処理されるので、サブレート処理は使用されないことを示す)とすることができる。したがって、D個ごとのサンプルはサブレートサンプルとみなされる。D個ごとのサンプルを捕捉するために、純粋遅延サンプルカウンタを用いて、Rin44およびSin38の入来サンプルを追跡する。一般に、純粋遅延サンプルカウンタは、各サンプルの後にインクリメントされ、D個のサンプルごとにリセットされる。また、純粋遅延サンプルカウンタは、上記のように、各電話通話の開始時にリセットされることも可能である。また、遅延サンプルカウンタは、本明細書に記載の他のフローのサンプルカウンタと共用してもよく、純粋遅延を推定するためにのみ用いられる専用のカウンタであってもよい。
判断分岐484で、純粋遅延サンプルカウンタがD−1に等しいかどうかを判定する。なお、純粋遅延サンプルカウンタがリセットされる(すなわちゼロに設定される)実施形態では、D−1に達することはD番目のサンプルに達することに対応することに留意されたい。しかし、代替実施形態では、純粋遅延サンプルカウンタは1に初期化されてもよく、その場合、D−1ではなくDと比べてチェックが行われる。また、他の実施形態では、純粋遅延サンプルカウンタをDまたはD−1に初期化し、それぞれ1または0に達するまでデクリメントしてもよい。したがって、図7のデシメーションフィルタ104および108ならびにデシメータ106および110として、デシメーションフィルタおよびデシメータの種々の実施形態を用いることができる。また、デシメータ106の出力はRin44のサブレートサンプル(これをRinSRと呼ぶことがある)であり、デシメータ110の出力はSin38のサブレートサンプル(これをSinSRと呼ぶことがある)であることにも留意されたい。
判断分岐484で、純粋遅延サンプルカウンタがまだD−1に達していないと判定された場合、フローはブロック502に進み、純粋遅延サンプルカウンタを1だけインクリメントして、フローは図9のブロック213に進む。これに対して、純粋遅延サンプルカウンタがD−1に達した場合、フローは判断分岐484からブロック491に進む。これは、サブレートサンプルに達したことを示す。ブロック491で、上記のように次のサブレートサンプルを検出するために、純粋遅延サンプルカウンタをリセットする。
フローはブロック485に進み、サブレートRinのパワー(PRinSR)、サブレートSinのパワー(PSinSR)、およびサブレート近端トーカ検出フラグ(sr_near_end_detect_flag)を決定する。例えば、以下の式を用いてPRinSR、PSinSR、およびPerrorSR(k)を求めることができる:
なお、上記の式(式16〜式18)において、kは信号サブレートサンプル番号であり、例えば、SinSR(k)=Sin(k・D)となっていることに留意されたい。式18は、サブレート誤差errorSRに対応する。サブレート誤差errorSRは、SinSRとサブレートエコー推定値y(k)の差に対応する。サブレートエコー推定値y(k)は、図7のサブレート適応フィルタ122で求められ、ブロック494に関して後述する。したがって、errorSR(k)およびPerrorSR(k)は、以下でさらに詳細に説明する。また、上記の式の一実施形態では、αは1/280に設定される。これは、電話チャネルで観測される人間音声の統計に対応する。なお、1/280は、フィルタ帯域幅に関して約70ミリ秒のスライディングウィンドウ平均にも対応することに留意されたい。しかし、代替実施形態では、異なるalphaの値を用いてもよい。(なお、上記のサブレートパワー計算値は、図7のパワー推定器120およびパワー推定器118で計算することができることに留意されたい。)
sr_near_end_detect_flagの決定は、図11に関して上記で説明した近端信号検出と同様に行うことができる。したがって、PerrorSR(k)とPSinSR(k)の最小値をNESDサブレート閾値(NESD_SR_threshold)と比較して、近端トーカ信号(Sgen)が存在するかどうかを判定する。(なお、これは、図7の近端信号検出器114で実行可能であることに留意されたい。)Sgenが存在する場合、sr_near_end_detect_flagは真であると判定され、TRUEに設定される。このフラグは、サブレートフィルタ122のフィルタ係数の更新を迂回するために用いられる。というのは、近端トーカ信号が存在する場合、上記のように、Sin38は純粋な残留エコーをもはや表しておらず、Sgenと残留エコーの混合であるためである。したがって、適応フィルタ28に関して上記で説明したように、サブレート適応フィルタ122は、SinSRがサブレートエコーのみを含む時(すなわち、近端トーカ信号が存在しない時)に限り適応を行うべきである。また、適応フィルタ28に関して上記で説明したように、チャネルノイズへの適応を防ぐために、サブレート適応フィルタ122は、PRinSRが十分に高い時に適応を行うべきである。
なお、適応フィルタ28に関して上記で説明したように、近端トーカ信号は、シングルトークおよびダブルトークのいずれの状況の間にも検出することができることに留意されたい。すなわち、上記のアルゴリズムを用いると、近端トーカのみが存在する時、または近端トーカおよび遠端トーカの両方が存在する時のいずれにも、Sgenを検出することができる。また、代替実施形態では、近端トーカ信号が存在するかどうかを判定するための他の方法を用いてもよいことに留意されたい。例えば、一実施形態では、Geigelアルゴリズムを用いてもよい。これは、近端トーカ信号を検出することが当技術分野において既知である。
ブロック485の後、フローは判断分岐486に進み、PRinSRがサブレートRinの最小パワー閾値よりも大きいかどうかを判定する。大きくない場合、フローはサブレート適応フィルタ122の更新を迂回して図9のブロック213に進む。上記のように、これは、サブレート適応フィルタ122がチャネルノイズに適応するのを防ぐ。一実施形態では、サブレートRinの最小パワー閾値は−45dBm0に設定される。最小閾値を
満たす場合、フローは判断分岐487に進み、sr_near_end_detect_flagがFALSEであるかどうかを判定する。最小閾値を満たさない場合、フローは、前段落で説明したように、近端トーカ信号の存在に起因するサブレート適応フィルタ122の更新を迂回して、図9のブロック213に進む。sr_near_end_detect_flagがFALSEである場合、フローはブロック494に進む。これは、PRinSRが十分であり、近端トーカ信号が存在しないことを示す。
ブロック494で、サブレートエコー推定値y(k)を計算した後、ブロック496で、サブレート適応フィルタ122の係数を更新する。一実施形態では、修正NLMSアルゴリズム(サブレートプロセスにおいて使用するために修正されたもの)を用いてy(k)を計算し係数を更新してもよい。
上記の式19は、入力信号XのFIRフィルタリングを表す。ここで、X(k)=[x(k),x(k−1),... ,x(k−N+1)]TはFIRフィルタスパンの継続時間にわたる(サブレートDでの)入力信号ベクトルである。したがって、x(n)=RinSR(n)である。また、式19において、H(k)はk回目の反復に対する(サブレートサンプリングでの)フィルタ係数ベクトルである。ここで、
である。
上記の式21は、NLMSアルゴリズムによるフィルタ係数更新公式を表す。ここで、NLMSサブレートのstep_sizeは次のように表すことができる。
式22において、βは適応定数である。γは「保護」項であり、PRinSR(k)が一時的に小さくなった時に適応公式における更新項が過度に大きくならないことを保証する。PRinSR(k)はサブレートサンプリングでの入力信号パワー(式16参照)である。
上記の式において、RinSRは、フィルタリングされデシメートされた遠端信号(これは図7のデシメータ106の出力に対応する)に対応し、SinSRは、(図7のデシメータ110の出力における)フィルタリングされデシメートされたエコー信号に対応する。なお、Sgenが存在しない時間中、Sin38は残留エコーのみを含むので、デシメータ110の出力におけるSinSRを、フィルタリングされデシメートされたエコー信号として用いることができることに留意されたい。変数H(式19に関して説明した)は、サブレート適応フィルタ122の係数推定値を表す列ベクトルに対応し、Hの後ろの「T」はベクトル転置を示す。信号yは、適応フィルタ122によって提供されるSinSRの推定値を表し、errorSRはSinSRとyの差である。また、上記の式の一実施形態では、βは2−9*2.5に設定され、αは1/128に設定される。一実施形態では、γは(PRinSR(k)に比べて)小さい値に設定される。例えば、PRinSR(k)が16ビット小数として表現される場合、γの典型的値は、kを小さい整数としてk・2−15である。
次に、フローは判断分岐498に進み、nがNに等しいかどうかを判定する。ここで、本実施形態では、Nは単一の測定サイクルの継続時間に対応する。一実施形態では、Nは300msに対応し、したがって、300個のサブレートサンプル(D=8と仮定する)に対応する。例えば、信号(例えばRin44およびSin38)が8kHzのレートでサンプリングされている場合、サンプルは125マイクロ秒ごとに受信される。本例ではD=8であるので、D個ごとのサンプルは8*125マイクロ秒に対応し、これは1ミリ秒に等しい。したがって、N個のサブレートサンプルごとに、フローはブロック503、500および501に進む。ここで、本実施形態ではNは300であるので、300*1ミリ秒は300ミリ秒となる。したがって、Nは、所定の継続時間を有する時間ウィンドウとして、またはブロック500および501で推定遅延を求める前に処理しなければならない所定数のサブレートサンプルとしてのいずれで定義することも可能である。Nの値は、エコーキャンセラ20内にプログラムされても固定配線されてもよく、また、新たな推定遅延値を計算する所望の頻度に応じて、いかなる値としてもよい。なお、Nは、サブレート適応フィルタ122の収束時間(すなわち短期収束時間)に対応することに留意されたい。例えば、1024サンプルのウィンドウ(これは、本実施形態では、1024*125マイクロ秒に対応し、8kHzのベースサンプリングレートを仮定すると、これは128ミリ秒のウィンドウサイズに等しい)を用いてインパルス応答(例えば図37のT3)を捕捉する場合、1024/D個のサブレートサンプルが採られる(例えば、本実施形態では、1024/8=128個のサブレートサンプル)。すなわち、本実施形態によれば、300msの収束時間で、(エコーキャンセラのRin−Sin終端から分かるように)チャネルのサブレートインパルス応答の128個のサブレートサンプルの値を達成し、その最大値を求めることが可能となる。しかし、上記のように、代替実施形態では、異なる収束時間(すなわち、異なるサイズの測定サイクルN)、異なるウィンドウサイズ(すなわち、1024ベースレートサンプルすなわち128ミリ秒に限定されない)、異なるサブレート(Dは、1を含め、いかなる値も取り得る)、および8kHz以外の異なるサンプリングレートを用いてもよい。
判断分岐498で、インデックスn(これは、通話の開始時に、例えば1または0のような開始値に初期化してもよい)がまだNに達していないと判定された場合、フローはブロック502に進み、nをインクリメントし、フローは図9のブロック213に進む。こ
れに対して、判断分岐498で、nがNに等しいと判定された場合、これは、300個のサンプル(300ミリ秒の継続時間に対応する)が処理されたことを示しており、フローはブロック503に進み、nを1に初期化し、他の測定サイクル変数も初期化する(例えば、PRinSR、PSinSR、sr_near_end_detect_flag等)。次に、フローは判断分岐504に進み、トレーニングインデックスが2であるかどうかを判定する。トレーニングインデックスが2である場合、フローはブロック505を迂回してブロック500に進む。これに対して、トレーニングインデックスが2でない場合、フローはブロック505に進み、トレーニングインデックスをインクリメントする。図20に関して上記で説明したように、トレーニングインデックスは、オプションのトレーニングモードによって用いられる。その場合、トレーニング信号は、電話通話の開始時にのみ注入することができる。したがって、トレーニングインデックスは、通話の開始を示すために用いられる。
フローはブロック505または判断分岐504からブロック500に進み、個別推定純粋遅延を計算する。なお、図22に関してさらに詳細に説明するように、個別推定純粋遅延は、各測定サイクルごとに(すなわち、N個のサブレートサンプルごとに)推定された純粋遅延に対応することに留意されたい。個別純粋遅延を推定した後、フローはブロック501に進み、図23に関してさらに詳細に説明するように、数個(個々の実施態様に応じて、さらには通話の段階に応じて、2個、3個またはそれ以上)の有効な個別純粋遅延推定値を用いて、推定遅延130を求める。
図22は、個別推定遅延が求められる図21のブロック500の一実施形態を示している。フローはブロック506から開始され、サブレート・エコーリターンロスエンハンスメント(SR_ERLE)を求める。次式を用いてSR_ERLEを求めることができる:
したがって、SR_ERLEはPSinSRとPerrorSRの比に対応し、純粋遅延測定値の有効性を確認するために用いられる。SR_ERLEは、サブレート適応フィルタ122の収束性の「良さ」(すなわち、どの程度のエコーがキャンセルされたか)に関する情報を提供する。すなわち、SR_ERLEが(例えば5dB以上のように)高いほど、現在の測定サイクル内で適応フィルタ122が十分に収束していることを示す。(なお、SR_ERLEは、与えられたサブレートで動作するERLE推定器116で求めることができることに留意されたい。図7参照。)したがって、ブロック506の後、フローは判断分岐508に進み、SR_ERLEをサブレートERLE閾値と比較し、SR_ERLEがこの閾値よりも大きくない場合、フローはブロック514に進む。これは、現在の測定サイクルは、そのSR_ERLEが低いため用いるべきではないことを示している。したがって、(現在の測定サイクルに対する)現在の測定値を破棄し、フローは図21のブロック501に進む。これに対して、SR_ERLEがサブレートERLE閾値を超過している場合、フローはブロック510に進み、サブレート適応フィルタ122の収束性に関する別のチェックを実行する。
ブロック510で、サブレート適応フィルタ122の係数のピーク対平均比(PAR)を求める。図37を参照すると、ピークは|h|の最大値に対応する(すなわち、ピークは、正負いずれかの方向におけるゼロ軸からの最大距離である)。図37において、ピー
クはラベル付けされている通りである。平均は、サブレート適応フィルタ係数の絶対値を用いて計算される。PARがPAR_Thresholdよりも大きくない場合、フローは判断分岐512からブロック514に進み、現在の測定値を破棄する。というのは、現在の測定サイクルは、サブレート適応フィルタ122の十分な収束性を提供しないからである。これに対して、PARがPAR_Thresholdよりも大きい場合、フローはブロック516に進む。これは、サブレート適応フィルタが現在の測定サイクル中に十分に収束したことを保証する2つの条件が満たされたことを示す。ブロック516で、サブレート適応フィルタ122の係数の最大値(ピークに対応する)を位置特定し(これは図7の最大値ロケータ124で実行することができる)、それに対応する時間値(図37のTpeak)を求める。そして、フローは図21のブロック501に進む。これについては図23でさらに詳細に説明する。
図23は、図21のブロック501の一実施形態を示している。これは、純粋遅延推定値を求める(図7の遅延決定部126および推定遅延130に対応する)。上記のように、純粋遅延は一般に通話の開始時に推定され、或る特定の条件が満たされれば、通話中に変化させてもよい。一般に、通話中に純粋遅延推定値を変化させるための条件はかなり保守的である。その理由は、(a)電話通話(PSTN通話およびパケット電話通話の両方)の統計は、純粋遅延が通話中にはあまり頻繁に変化しないことを示しており、(b)純粋遅延推定値を(純粋遅延をあまりに精密に追跡しようとすることにより)あまり頻繁に変化させると、電話ユーザの観点からは妨害的となることがあるためである。したがって、フローは判断分岐528から開始され、フローを通るのは今回が初回であるか(すなわち電話通話の開始を示す)、または前に推定された遅延がゼロに等しいか(これは、通話の開始時、または前に推定された遅延値がゼロの通話の途中、のいずれかに対応し得る)を判定する。これらの場合のいずれかが真である場合、フローは判断分岐529に進み、2つの有効な測定値が利用可能であるかどうかを判定する。図22に関して上記で説明したように、それぞれの個別推定遅延は、SR_ERLEおよびPARの両方を用いて確認され、個別推定遅延が確認される場合にのみ、対応する遅延測定値が記憶される。したがって、測定サイクルごとに(本実施形態では300ミリ秒ごとに)、新たに有効な測定値を取得する可能性が存在する。少なくとも2つが利用可能であると仮定すると(これを取得するには少なくとも2サイクルの測定サイクルを要する)、フローはブロック530に進み、推定遅延の「高速追跡」計算がブロック530から開始される。
ブロック530で、第1のバッファに2つの連続する有効な測定値を入れる。フローはブロック532に進み、これらの2つの測定値の間のばらつきおよび2つの測定値の平均をとる。ばらつきは、例えば、2つの測定値の差とすることができる。フローは判断分岐534に進み、ばらつきがばらつき閾値1よりも小さく、平均が平均閾値1よりも大きいかどうかを判定する。ばらつきがばらつき閾値1よりも小さく平均が平均閾値1よりも大きいのではない場合、新たな推定遅延を計算せず、フローは図9のブロック213に進む。これに対して、これらの条件が満たされる場合、フローはブロック542に進み、新たな推定遅延を計算する。したがって、ばらつき閾値1および平均閾値1は、2つの測定値が互いに十分に一致している場合にのみ新たな推定遅延が計算されることを保証する。すなわち、インパルス応答がその最大値に達した時の後続の測定値があまりにかけ離れている場合、遅延の推定は、後続の測定値がよりよく一致する(すなわち互いにより近くなる)まで保留される。ブロック542で、次式を用いて新たな推定遅延を計算することができる:
上式において、average(平均)は、ブロック532でとった2つの測定値の平均に対応し、offset(オフセット)は、実質的な応答を開始したインパルス応答内でピークに達する前の時間の長さに対応する値である。すなわち、図37を参照すると、ピークはT1(純粋遅延)よりもT4の分だけ長い時間に対応する。したがって、ピークにおける時間の値(Tpeak)からT4を差し引かなければならない。オフセットはこのT4の値に対応する。オフセットは、当技術分野に存在する、異なるが典型的なハイブリッド回路のインパルス応答に関する統計的情報を用いて決定し、エコーキャンセラ20にプログラムすることができる。そして、ブロック544で、新たな推定遅延(推定遅延130に対応する)を適用する。例えば、推定遅延130の適用は、適応フィルタユニット28の一実施形態を示している図4のオプションの遅延ブロック66をイネーブルすることに対応してもよい。したがって、純粋遅延推定を用いることにより、適応フィルタユニット28によって要求されるフィルタタップの数が削減される。というのは、応答の純粋遅延部分に対する係数をゼロとみなすことができるからである。
なお、代替実施形態では、「高速追跡」計算に進むために判断分岐529で必要とされる測定値の個数は2個より多くても少なくてもよいことに留意されたい。一実施形態では、必要とされる有効な測定値は1個だけでもよい。この場合、(ただ1つの測定値しか用いないので)ばらつきおよび平均は計算しない。また、したがって、ブロック542に進むかどうかを判定する前に実際の値を平均閾値1と比べてチェックすることができ、ばらつきの比較は不要となる。2個より多くの有効な測定値が必要とされる代替実施形態では、ばらつきは、有効な測定値に関してとった分散に対応してもよい。したがって、代替実施形態では、必要とする有効な測定値は任意個数でよい。
判断分岐528で、通話を通るのは今回が初回ではなく(すなわち、一般的には、純粋遅延の推定が通話の途中で実行されることを示す)、前の遅延推定値がゼロではないと判定された場合、フローは判断分岐535に進み、M個の有効な測定値が利用可能であるかどうかを判定する。一実施形態では、Mは(エコーキャンセラ設置者によって選択された特定の設定に応じて)3、または4、または5であるように選択される。Mの値は、現在の推定遅延値を更新する(すなわち変化させる)ことが可能となる前に必要とされる有効な測定値の個数がより多くなるように選択しても、またはより少なくなるように選択してもよい。Mの値が高いほど、フローがブロック536に進む頻度が少なくなる。したがって、Mはいかなる値に選択してもよく、3〜5には限定されない。M個の有効な測定値が利用可能でない場合、フローは、推定遅延値が変化する可能性を迂回して図9のブロック213に進む。これに対して、M個の有効な測定値が利用可能である場合、フローはブロック536に進み、第2のバッファにM個の連続する有効な測定値を入れる。
ブロック538で、ばらつき、平均、および平均と前の平均との差を計算する。上記のように、ばらつきはさまざまな方法で計算することができる。例えば、Mが単に2である場合、ばらつきは単に差とすることができる。別法として、ばらつきは、分散として計算することができる。前の平均は、ブロック538または532のいずれかを前に通った時に計算した平均に対応する。ブロック538の計算の後、フローは判断分岐540に進み、種々の閾値を用いて、推定遅延の変化が有意味であるかどうかを判定する。したがって、判断分岐540の閾値を用いて、通話中に推定純粋遅延を変化させるためのかなり保守的な基準を設定することができる。
判断分岐540で、ばらつきをばらつき閾値2と比較し、平均を平均閾値2と比較し、平均と前の平均との差を差閾値と比較する。ばらつきがばらつき閾値2よりも小さいか、または平均が平均閾値2よりも大きいか、または差が差閾値よりも小さい場合、フローは図9のブロック213に進み、新たな推定遅延を計算しない(すなわち、現在の推定遅延を維持する)。これに対して、これらのすべての条件が満たされる(ばらつきがばらつき閾値2よりも小さく、平均が平均閾値2よりも大きく、かつ差が差閾値よりも大きい)場合、フローはブロック542に進み、(式25に関して説明したように)新たな推定遅延を計算し、ブロック544で上記のようにそれを適用する。「高速追跡」と同様に、ばらつき閾値2は、M個の有効な測定値が互いにあまりにかけ離れないことを保証し、平均は、M個の有効な測定値がその平均を変化させる必要性を正当化するほど大きいことを保証する(例えば、平均が比較的小さい場合、適応フィルタ28が適切に設定されていれば小さい純粋遅延は適応フィルタ28で吸収(accommodate )できるので、エコーキャンセラの純粋遅延を変化させる必要はないと考えられる)。差と差閾値との比較は、差があまりに小さい(すなわち差閾値よりも小さい)ため現在の推定遅延を変化させる意味がない場合に、現在の推定遅延が変化することを防ぐ。
図24は、エコーキャンセラ20によるMIPS(毎秒百万命令。デジタル信号プロセッサ使用量の一般的な尺度)を低減するために使用可能なオプションの監視モードの一実施形態を示している。図24のフローは、図21のフローをいつ実行すべきかを判定するために使用可能な図9の211の部分である。フローはブロック518から開始され、エコーリターンロスエンハンスメント(ERLE)を計算する。このERLEは、適応フィルタ28の収束性の「良さ」に対応する(すなわち、適応フィルタ28によってどの程度のエコーが実際にはキャンセルされなかったかに関する情報を提供する)。次式を用いてERLEを計算することができる:
したがって、ERLEは、PSinとPerrorの比に対応する。ここでnはサンプル番号である。(なお、PSinとPerrorは、上記の式1および式2を用いて計算することができることに留意されたい。)したがって、このERLE値は、図21の純粋遅延調節プロセスに入るために監視モード中に用いられる。フローは判断分岐520に進み、ERLEをERLE閾値と比較する。ERLEがERLE閾値以上である場合、適応フィルタ28の収束性は十分であり、純粋遅延推定を実行する必要はないので、フローは図9のブロック213に進む。これに対して、ERLEがERLE閾値よりも小さい場合、適応フィルタ28の収束性は十分でないので、フローはブロック521に進み、ERLEカウンタをインクリメントする。(なお、このERLEカウンタは、各通話の開始時に初期化可能であることに留意されたい。)。次に、フローは判断分岐523に進み、ERLEカウンタをERLEカウンタ閾値と比較する。ERLEカウンタがERLEカウンタ閾値に達していない場合、フローはブロック522(図21のフローに対応する)を迂回して図9のブロック213に進む。これに対して、ERLEカウンタがERLEカウンタ閾値に達している場合、フローはブロック522に進み、図21のフロー全体(上記の通り)を実行する。そして、フローはブロック524に進み、ERLEカウンタをリセットしてから、図9のブロック213に進む。
ERLEカウンタおよびERLEカウンタ閾値は、ブロック518で計算されたERL
Eが境界線上にある(ERLE閾値よりも上からERLE閾値よりも下への変化があまりに頻繁に起こる)場合、純粋遅延が再計算および更新されないことを保証する。すなわち、ERLEは、図21のフローに入ることができるためには、(ERLEカウンタおよびERLEカウンタ閾値によって制御される)或る期間、ERLE閾値を下回らなければならない。これは、純粋遅延推定値の急速で不要な変化を防ぐのに役立つ。
図8および図25〜図27は、エコーキャンセラ20内で使用可能なトーン検出の一実施形態に関連する。ここで、図8は、監視制御ユニット30の一部をブロック図形式で示し、図25〜図27は、図9のブロック209の部分をフロー図の形式で示している。エコーキャンセラ20への入力(例えばRin44またはSin38)の少なくとも1つがトーンである時、適応フィルタ62の安定性が影響を受け、電気通信ネットワークにおける望ましくない歪みおよびサービス品質の劣化を引き起こす可能性がある。トーンとは、或る特定の期間にわたって一定のマグニチュード、周波数および位相を有するいくつかの正弦波成分からなる信号である。
残留エコーの平均パワーを最小化しようとする(適応フィルタ62で用いられるような)いかなる適応アルゴリズムも、Rin44の自己相関行列に依存する動的挙動を有する。いくつかの特定のクラスの受信パス信号では、この行列が特異になることがあり、これにより、適応プロセスが一時的に妨害され、適応フィルタ62のフィルタ係数が所望の値からずれることがある。例えば正弦波信号(単周波トーン)は、この条件を作り出すことがある。この場合、正弦波信号Rin(n)=Acos(Ωn+φ)の自己相関r(k)はr(k)=A2cos(Ωk)/2で与えられ、これは、ほとんどの実際的な場合(すなわち、自己相関行列の次元が大きい場合)に、特異自己相関行列を生じる。それが起こると、適応アルゴリズムの結果の1つの可能性として、(適応フィルタ62の)フィルタ係数のセットが正弦波型になるが、これは実際のハイブリッド回路インパルス応答(その例は図37に与えられている)の不正確な推定値である。
同様に、多周波トーンもまた、同様の問題を生じることがある。というのは、それらの自己相関
はやはり、成分数Mが十分に大きくない場合、または行列の次元が大きい場合に、特異自己相関行列を生じる可能性があるからである。なお、行列の次元は、ハイブリッド回路のインパルス応答を推定するために用いられるフィルタ係数の個数に依存することに留意されたい。したがって、シグナリングトーンや制御トーンの存在を検出して適応フィルタ62の適応プロセスを停止することにより、フィルタ係数の良好なセットの発散を防ぐことが望ましい。
図25〜図27に関して以下で説明する一実施形態では、任意周波数の正弦波信号の存在を示すためのTeager-Kaiser フィルタの修正バージョンのような多項式フィルタと、所定の単周波トーンを識別するための平滑相関手法と、高い信頼性でトーンを検出するための判断ロジックとを用いる。なお、いかなる適当な多項式フィルタを用いてもよいことに留意されたい。図8に示されている多項式フィルタは単なる一例である。本明細書に記載の実施形態は、一般にエコーキャンセラ20に関するものであるが、トーンの指示および検出を必要とするいかなる装置あるいは電気通信装置においても使用可能であり、エコー
キャンセラのみに限定されない。
図8は、パワー推定器134の一実施形態を含む。これは、修正エネルギー演算子を通じて任意の単周波トーンを定数にマッピングする。すなわち、単周波トーンは次のように表すことができる。
修正エネルギー演算子Ψkは次のように表すことができる。
上式において、x2(n−k)−x(n)x(n−2k)は図8の加算器144の出力に対応することに留意されたい(すなわち、ディレイ136の出力はx(n−k)であり、ディレイ138の出力はx(n−2k)であり、乗算器140の出力はx(n)x(n−2k)であり、乗算器142の出力はx2(n−k)であり、加算器144の出力は乗算器142の出力と乗算器140の出力をマイナスにしたものとの和である)。なお、入力信号x(n)は、Rin44またはSin38のいずれかに対応し得ることに留意されたい。さらに、式27のx(n)をx2(n−k)−x(n)x(n−2k)に代入することにより、結果A2sin2(kΩ)が得られる。したがって、Ψは、トーンのマグニチュードAおよび正規化周波数Ω(Ω=2πf/fs。ここでfはトーン周波数であり、fsはサンプリング周波数であり、fsは一実施形態では8kHzである)の両方に依存することに留意されたい。これらの式におけるパラメータkは、基礎となるサブレート処理を定める。ここで、kは、1を含め、任意の整数値とすることができる。したがって、サンプリングレートfsでΨkを適用することは、サンプリングレートfs/kでΨ1を適用することと等価である。上記のように、サブレート処理を用いて、k番目ごとのサンプルのみを処理するように、計算要件を低減することが可能である。また、Ψk(x(n))は初期位相φに依存しないが、急激な位相変化の時に短期的な過渡現象を生じることにも留意されたい。これを用いて、通信信号x(n)における位相変化を検出してもよい。
x(n)(式27)のパワーは、次式を用いて表すことができる。
したがって、Ψk(x(n))は、次式のように、x(n)のパワーを2sin2(kΩ)倍にスケーリングしたものを与えることに留意されたい。
そこで、Powerx(n)をΨk(x(n))に関して解くと次式が得られる。
しかし、実際には、信号x(n)(これは、上記のように、図8に示した実施形態ではRin44またはSin38のいずれに対応していてもよい)は、ノイズにより破損し、その結果、ノイズのある推定値Ψnoizyk(x(n))となる可能性がある。その場合、結果を平滑化するために、例えば単極ローパスフィルタのようないかなるローパスフィルタを用いることも可能である。したがって、図8に見られるように、パワー推定器134はローパスフィルタを含み、このローパスフィルタは、(加算器144の出力の絶対値に対応する)マグニチュード146の出力を受信し、ストレージ150からaを受信し、Ψnoizyk(x(n))の滑らかな推定値P(n)を提供する。P(n)は、次式を用いて表すことができる。
上式において、aは平滑化ローパスフィルタの帯域幅を制御する平滑化パラメータ(0<a<1)である。なお、固定または可変のいずれの平滑化パラメータaを用いてもよいことに留意されたい。そして、P(n)は、図8のトーン指示判断ユニット166に供給される。トーン指示判断ユニット166は、図26に関して以下でさらに詳細に説明するように、推定値P(n)の分散に基づいて、トーンが存在するかどうかを示す。図26はパワーについて述べているが、相関(図27参照)や、さらには通信信号自体のような、通信信号の他の関数を用いてもよい。
トーンが存在する場合、一実施形態では、位相反転の有無にかかわらず、2100Hzシグナリングトーンのような所定の単周波トーンを検出する。所定のトーンを検出する一実施形態について、図27に関して以下でさらに詳細に説明する。したがって、一実施形態は図26のトーン検出のみを含んでもよいが、代替実施形態は、図25に示すように、図26および図27のアルゴリズム間の相互作用を含む。さらに、図26の実施形態は、トーンが受信された後に適応フィルタ62の適応プロセスを再イネーブルするために監視モードにおいて用いてもよい。すなわち、P(n)の分散を用いて、シグナリングトーンと音声信号の間の遷移を検出することも可能である(すなわち、遷移は、分散が或る所定の閾値よりも大きい時に検出される)。
推定値P(n)が与えられると、トーン指示判断ユニット166を用いて、図26のフローに従ってトーンを検出することができる。図26のフローは、P(n)の分散が小さ
い時間間隔を検出する。x(n)上に単周波トーンが存在する時にはいつでも、一定レベルのP(n)(これは、P(n)の分散が小さいことに対応する)が期待される。トーンが複数の周波数から構成される場合、P(n)の分散は増大するが、平均レベルは一定のままとなる。したがって、分散レベルに応じて、単周波トーンまたは多周波トーンのいずれかを示すことができる。そこで、図26において、フローはブロック588から開始され、k、a、m、r、Plow、およびNminを所望の値に設定する。システムにおいて期待されるトーン周波数範囲およびノイズレベルに応じて、これらの値は、例えば、k=2、a=0.9、m=1、r=0.95、Plow=2−8とすることができる。Nminは、検出すべきトーンのサンプリングレートおよび最小必要継続時間に依存する。フローは判断分岐590に進み、P(n)がPlowよりも大きいかどうかを判定する。ここで、Plowは、考慮すべき最低信号レベルを示す閾値に対応する。P(n)がPlowよりも大きくない場合、フローはブロック598に進み、検出カウンタを(ゼロに)リセットしてから、ブロック604に進み(これは、トーンが検出されていないことを示す)、その後、図25のブロック554に進む。これに対して、P(n)が少なくともPlowよりも大きい場合、フローは判断分岐590からブロック592に進み、PminおよびPmaxを計算する。Pminはmサンプルだけ離れたP(n)の2つの推定値の最小値に対応し、Pmaxはmサンプルだけ離れたP(n)の2つの推定値の最大値に対応する。
分散レベルは、PminとPmaxを比較することによって推定される。そこで、フローは判断分岐594に進み、Pmaxに対するPminの比(すなわちPmin/Pmax)をトーン指示閾値と比較する。Pmin/Pmaxがトーン指示閾値rよりも大きくない場合、フローはブロック598に進み、検出カウンタをリセットしてから、ブロック604に進み(これは、トーンが検出されていないことを示す)、その後、図25のブロック554に進む。これに対して、Pmin/Pmaxがトーン指示閾値よりも大きい場合、P(n)は十分一定である(すなわち、PminとPmaxが十分に近い)とみなされる。これは、トーンの存在の可能性を示す。この場合、フローはブロック596に進み、検出カウンタをインクリメントする(なお、検出カウンタは、通話の開始時に、または図26のフローに入る前の任意の他の適当な時に、初期化またはリセットが可能であることに留意されたい)。
フローは判断分岐600に進み、検出カウンタがNminよりも大きいかどうかを判定する。検出カウンタがNminに達していない場合、フローはブロック604に進み(これは、トーンが検出されなかったことを示す)、その後、図25のブロック554に進む。これに対して、検出カウンタがNminよりも大きい場合、フローはブロック602に進み、トーンが検出される(これは、図8のトーンインジケータ信号168のアサートに対応する)。そして、フローは図25のブロック554に進む。したがって、P(n)が最小レベル(Plow)よりも大きく、P(n)の分散が(トーン指示閾値に関係する)最小値よりも小さく、検出カウンタが最小値(Nmin)よりも大きい場合に、トーンが検出される。検出カウンタは、トーンを検出してトーンインジケータ信号168をアサートする前に少なくとも所定時間(Nminに対応する)の間、トーンが存在していることを保証する。これは、トーンの検出とトーンの非検出の間の急速な切替により、適応フィルタ62の適応プロセスがあまりに頻繁にイネーブルまたはディセーブルされるようなこ
とを防ぐのに役立つ。
図8は、平滑相関器152の一実施形態を含む。この相関器は、所定の単周波トーンの検出、振幅変調信号のキャリアの検出、公称周波数に近い周波数の多成分トーンの検出等さまざまに利用可能である。平滑相関器152は、入力信号x(n)(これは、上記のように、Rin44またはSin38とすることができる)のサンプルおよびストレージ150からの3個の制御パラメータ(c、b、およびe)を受信し、2個の相関推定値R0(n)およびR1(n)を生成する。これらの相関は、以下で説明するように、所定のトーンの存在を示すために用いられる。制御パラメータcは、正規化周波数Ωd=2πfd/fsを有する所定の単周波トーンを生成する2次デジタル発振器w(n)の係数の1つを定める。ここで、前と同様、fsは入力サンプリング周波数である。発振器は、状態w(−1)=1およびw(−2)=c=cos(Ωd)で初期化され、w(n)=2*c*w(n−1)−w(n−2)で与えられる標準的な2次デジタル発振器を使用する。(なお、発振器は、cを受信しw(n)を出力として乗算器156および158に供給する図8の発振器164に対応してもよいことに留意されたい。)入力信号x(n)および遅延バージョンx(n−e)(すなわち、図8のディレイ154の出力)とw(n)との相関を(乗算器156および158によって)とってから、ローパスフィルタに通す(すなわち、図8のローパスフィルタ160は、x(n)w(n)と表現することができる乗算器158の出力を受信し、図8のローパスフィルタ162は、x(n−e)w(n)と表現することができる乗算器156の出力を受信する)。ローパスフィルタ160および162に入力として供給されるパラメータb(ここで0<b<1)は、ローパスフィルタの帯域幅を定める。また、平滑相関器152の一実施形態では、ローパスフィルタ160および162として平滑単極ローパスフィルタを用いてもよい。また、代替実施形態では、w(n)とx(n)およびx(n−e)との相関をとるのではなく、発振器信号w(n)および遅延バージョンw(n−e)とx(n)との相関をとってもよい。また、一実施形態では、eは次のように表される遅延ファクタである。
上式は、90°に近い位相差に対応する。ここで、
は、その引数x以上の最小の整数を示す。
図8に戻って、ローパスフィルタ160の出力は相関推定値R0(n)であり、ローパスフィルタ162の出力は相関推定値R1(n)であり、これらが両方ともトーン指示判断ユニット166に供給される。R0(n)およびR1(n)は、R0(n)=b・R0(n−1)+(1−b)・w(n)・x(n)、およびR1(n)=b・R1(n−1)+(1−b)・w(n)・x(n−e)と表すことができる。したがって、未知トーンがトーン指示判断ユニットによって(上記の図26のフローを用いて)示されている場合、R0(n)およびR1(n)は、(発振器164に対応する)所定の単周波トーンの存在
を識別するための図27のフローを用いて解析される。
図27のフローは、特定のトーンを検出するために、検出されたトーンと所定の単周波トーンとの相関をとる。図27において、フローはブロック606から開始され、c、e、b、u、q、およびMminを所望の値に設定する。パラメータcは、検出すべき目標トーンの周波数に直接関係し、この周波数は遅延値eも定める。システムにおけるノイズレベルに応じて、残りの値は、例えば、b=0.9、u=1、q=0.95、Plow=2−8とすることができる。Mminは、検出すべき目標トーンのサンプリングレートおよび最小必要継続時間に依存する。次に、フローはブロック608に進み、以下の式に示すように、R(n)、Rmin、およびRmaxを評価する。
R(n)は、R0(n)とR1(n)の間のピークマグニチュード相関である。Rminは、uサンプルだけ離れたR(n)の2つの推定値の最小値に対応し、Rmaxはuサンプルだけ離れたR(n)の2つの推定値の最大値に対応する。次に、フローは判断分岐610に進み、Rmaxに対するRminの比(すなわちRmin/Rmax)を相関閾値q(これは、一実施形態では、0.95に設定される)と比較する。この比が相関閾値よりも大きくない場合、フローはブロック616に進み、相関カウンタを(ゼロに)リセットしてから、ブロック618に進み(これは、所定の周波数が検出されたなかったこと(Dr=0)を示す)、その後、図25のブロック560に進む。これに対して、比が閾値よりも大きい場合、フローはブロック612に進み、相関カウンタをインクリメントする。(なお、相関カウンタもまた、通話の開始時に初期化またはリセットが可能であることに留意されたい。)フローは判断分岐614に進み、相関カウンタをMminと比べてチェックする。相関カウンタがMminよりも大きくない場合、フローはブロック618に進む。これは、所定の周波数が検出されたなかったこと(Dr=0)を示す。
これに対して、判断分岐614で、相関カウンタがMminよりも大きい場合、フローは判断分岐620に進み、R(n)がR0(n)の絶対値に等しいかどうかを判定する。等しい場合、フローはブロック622に進み、所定の周波数がR0(n)の符号で検出される(すなわち、Dr=sign(R0(n)))。R(n)がR0(n)の絶対値に等しくない場合、フローはブロック624に進み、所定の周波数がR1(n)の符号で検出される(すなわち、Dr=sign(R1(n)))。ブロック622または624から、フローは図25のブロック560に進む。したがって、任意のトーンを検出するための図26に記載のフローと同様に、相関カウンタおよびMminによって定められる所定の時間にわたりR(n)の分散が小さい場合に、所定のトーンが検出される。これは、検出カウンタおよびNminに関して上記で説明したように、急速な切替を防ぐのに役立つ。図27の方法は、次式で与えられる有効平滑相関を用いることと等価である:
上式は、最大マグニチュードの成分に応じて、R0(n)またはR1(n)のいずれかを生成する。
図26および図27のフローを含む全体的プロセスフローの一実施形態を図25に示す。ここで、図25は、一実施形態による図9のブロック209の部分を示している。図25において、フローはブロック550から開始され、Dpositive(Dp)およびDnegative(Dn)に対して最小カウンタ値(Lmin−pおよびLmin−n)をそれぞれ選択する。これらの値は、正および負の位相の望ましい最小継続時間が満たされるように選択される。Dpは正の位相に対するカウンタに対応し、Dnは負の位相に対するカウンタに対応する。
次に、フローはブロック552に進み、任意の単周波トーンを探索(検出)する。図26のフローは、任意の単周波トーンの存在を判定するために使用可能である。フローは判断分岐554に進み、トーンが検出されない場合、フローはブロック558に進み、DpカウンタおよびDnカウンタを(ゼロに)リセットし、フローはブロック582に進み(これは、トーンが検出されていないことを示す)、その後、図9のブロック211に進む。これに対して、トーンが検出されている場合、フローはブロック556に進み、検出されたトーンと所定の単周波トーンとの相関をとる。そこで、図27のフローを用いてブロック556を実行することができる。フローは判断分岐560に進み、Drがゼロであるかどうかを判定する。ゼロである場合、所定の周波数がブロック556(例えば、図27のブロック618)で判定されておらず、フローはブロック558に進み、カウンタDpおよびDnをリセットする。これに対して、Drがゼロでない場合、フローは判断分岐562に進み、Drがゼロよりも大きいかどうかを判定する。Drがゼロよりも大きい場合、フローはブロック564に進み、正位相カウンタをインクリメントする。さもなければ、フローはブロック566に進み、負位相カウンタをインクリメントする。
ブロック564または566の後、フローは、ポイントG経由でブロック568に進み、Flagpositive(Fp)およびFlagnegative(Fn)を(ゼロに)リセットする。フローは判断分岐570に進み、DpがLmin−pよりも大きい場合、ブロック572でFpを1に設定し、さもなければフローはブロック572を迂回して判断分岐574に進む。判断分岐574で、DnがLmin−nよりも大きいかどうかを判定し、大きい場合、ブロック576でFnを1に設定する。DnがLmin−nよりも大きくない場合、フローはブロック576を迂回して判断分岐578に進む。判断分岐578で、FpおよびFnがゼロである場合(すなわち、Fp+Fnがゼロである場合)、フローはブロック582に進む。これは、トーンが検出されたなかったことを示す。すなわち、いずれのカウンタ(DnまたはDp)も或る最小値(例えばそれぞれLmin−pまたはLmin−n)より大きくない場合、所望のトーンは検出されない。
これに対して、Fp+Fnがゼロでない場合、フローは判断分岐580に進む。これは、トーンが検出されていることを示す。一方のカウンタ(DpまたはDn)のみがLminよりも大きい場合、Fp+Fnは1よりも大きくなく、フローはブロック584に進む。これは、所望のトーンが相関符号反転なしで検出されていることを示す。DpおよびDnが両方ともそれぞれのLminよりも大きい場合、フローはブロック586に進む。これは、所望のトーンが相関符号反転ありで検出されていることを示す。R(n)の平均レ
ベルが相関符号反転中に同一である場合、位相反転を示している。したがって、図25のフローは図26および図27のフローを組み合わせて位相反転を検出する。代替実施形態では、P(n)の急激な変化を検出することによって、所与の単周波トーンにおける位相変化(必ずしも180°ではない)を識別する。
なお、ここまでの説明では、適応フィルタユニット28内のオプションの非適応フィルタ64が存在しない(図4参照)と仮定しているので、適応フィルタ28の係数あるいはタップへの言及は、適応フィルタユニット28内の適応フィルタ62の係数あるいはタップへの言及と同等であったことに留意されたい。したがって、前の説明では、適応フィルタユニット28とは別個に適応フィルタ62に言及する必要はなかった。しかし、図28〜図36についての以下の説明では、非適応フィルタ64が存在してもよく、非適応フィルタ64を適応フィルタユニット28の一部とみなしてもよい。したがって、上記の説明の全体を通じて用いられた適応フィルタ62の係数は、今度は、適応フィルタ62の係数またはタップをより限定的に指すことになる。というのは、適応フィルタユニット28は、適応フィルタ62および非適応フィルタ64のような種々の異なるフィルタの組合せを含んでもよいからである。
上記のように、適応フィルタ62は、ハイブリッド16によって導入されるエコーを追跡するため、一般に多数のタップを必要とする。例えば、図37のインパルス応答全体を追跡するためには、適応フィルタユニット28の適応フィルタ62は、(サンプリングレートを8kHzと仮定すると)32ミリ秒にわたってインパルス応答全体をカバーする256個のタップを必要とする。適応フィルタ62のタップ数が増大すると、計算の複雑さが増大し、通常は収束速度が低下する。適応フィルタ62が純粋遅延後のインパルス応答をカバーする疎ウィンドウを使用することを可能にするために、図20〜図24に関して上記で説明した方法は、純粋遅延の検出を可能にしている。図28〜図36に関して以下で説明する方法は、エコーパススパンを短縮するためのメカニズムに関する。すなわち、微調整された純粋遅延を検出することに加えて、インパルス応答のエコーパススパンを短縮するために、ばらつき時間も検出し、圧縮する。以下で説明するように、一実施形態では、残留エコーを最小化するために必要な有効タップ数を短縮する目的で、固定型または適応型のフィルタを追加する。
図37に示されているように、インパルス応答にとって本質的であるのは零点および極である。零点は、対応する周波数における応答を妨げるのに対して、極は、対応する周波数における応答を高める。したがって、極を補償するために1つまたは複数のフィルタを追加することにより、インパルス応答を圧縮して、必要なタップ数を少なくすることができる。例えば、或るIIRフィルタが、比B(z)/A(z)で表される伝達関数H(z)を有すると仮定すると、
となるようにして、H(z)の極を補償するようにフィルタA′(z)を設計することができる。一実施形態では、図2に示したように、オプションの非適応フィルタ31および35を用いることにより、非適応フィルタ31の出力(すなわちSin39)がエコーと非適応フィルタ31との畳込みと等価になるようにしている。しかし、DCノッチフィルタ45の後に非適応フィルタ31が存在すると、Sin37に歪みが導入され、それを補償することが必要となる。そこで、誤差信号46を受信し、フィルタリングされた誤差信
号47を生成するように、非適応フィルタ35を導入することができる。非適応フィルタ31が伝達関数A′(z)を有するFIRフィルタであると仮定すると、非適応フィルタ35は、伝達関数1/A′(z)を有する逆IIRフィルタとなる。しかし、FIRフィルタ31のA′(z)の零点は逆IIRフィルタ35の1/A′(z)の極となるため、A′(z)に対して制限が必要である。A′(z)の零点に対するこのような制限は、以下でさらに説明するが、非適応IIRフィルタ35の極が誤差信号47を急激に増大させることを防ぐ。
代替実施形態では、非適応フィルタの異なる構成を用いてもよい。例えば、非適応フィルタ35は、加算器34の出力に配置するのではなく、加算器34の前で、非適応フィルタ31および適応フィルタ62の両方の出力に配置することも可能である(この場合でも正味の効果は同じである)。この実施形態では、非適応フィルタ31の直後に非適応フィルタ35を置くことで、互いに効果的にキャンセルし合うため、Sin38とSin39の間にフィルタが不要となる(すなわち、Sin39とSin38は等価となる)。その場合、適応フィルタ28は、(非適応フィルタ35と同様の)オプションの非適応フィルタ64を含むように設計することができる。したがって、この実施形態では、必要な追加フィルタは1つだけでよい。しかし、非適応フィルタ64としてIIRフィルタを用いる場合、安定性に対する制限が依然として要求される。すなわち、以下でさらに詳細に説明するように、フィルタ64の係数によって定義される多項式のすべての根が1よりも小さく(すなわち単位円内に)なければならない。なお、本明細書全体を通じて、伝達関数H(z)=Wに対して、Wの根はH(z)の零点に対応する一方、H(z)=1/Wに対して、Wの根はH(z)の極に対応することに留意されたい。オプションのフィルタ31、35および64は、それらの係数が、メインの適応フィルタ62の係数のように周期的に適応されないという意味で、非適応である。一般に、オプションのフィルタ31、35および64は、適応レートがイベント駆動で定まる適応フィルタとみなすことができる。
図28は、本発明の一実施形態による図9のブロック213の部分を示している。フローは判断分岐626から開始され、適応フィルタ短縮推定オプションがイネーブルされているかどうかを判定する。イネーブルされていない場合、フローは図28のフローを迂回して図9のブロック212に進む。これに対して、イネーブルされている場合、フローは判断分岐628に進む。適応フィルタ短縮推定オプションは、さまざまな異なる方法でイネーブルされることが可能である。例えば、システムリセットに応答してイネーブルされる場合のように、自発的にイネーブルされることが可能である。別法として、図4の遅延ユニット66(もし存在する場合)内で異なる遅延が検出された時はいつも、または新たなハイブリッドが検出された時はいつもイネーブルされてもよい。非適応フィルタ64または非適応フィルタ31および35のために選択される係数は、具体的なハイブリッド16に依る。というのは、それぞれの異なるハイブリッドは、異なる純粋遅延または異なるばらつき時間を有する異なるインパルス応答を有し得るからである。
一実施形態では、図20〜図24に関して上記で説明した純粋遅延推定は、通話の開始時に、または(例えば、コールトランスファやコールフォワードの際のような)ハイブリッドに影響を及ぼす変化の際に、サブレート処理を用いて推定される純粋遅延を迅速に検出する。図28に関して説明する方法は、非適応フィルタ64または非適応フィルタ31および35のフィルタ係数を得るために、純粋遅延およびばらつきの両方を求める。図28における純粋遅延の計算は一般に、より精密である。しかし、一般に、求めるにはより長い時間がかかる。したがって、図28の方法は、適応フィルタ62によって要求される係数の実効的な個数を削減することに加えて、図20〜図24によって提供される純粋遅延推定値を「微調整」することができる。図28の方法は、追加されるフィルタ(64またはフィルタ31および35)を補償するために遅延ユニット66に追加する必要のある追加純粋遅延を求める。すなわち、以下で説明するように、ばらつき時間を短縮するため
のフィルタの追加は、純粋遅延量をわずかに増大させる傾向もあるので、(もともと図20〜図24の方法により求められた)遅延ユニット66の遅延をそれに従って更新することができる。図24の監視モードを用いる場合、ERLEがERLE閾値を下回るたびに、遅延ユニット66に対する新たな純粋遅延を求める。さらに、図28の適応フィルタ短縮推定オプションは、ERLEがERLE閾値を下回ったことに応答して(すなわち、新たな純粋遅延が図21のフローによって遅延ユニット66に対して求められたことに応答して)イネーブルされることが可能である。
代替実施形態では、適応フィルタ短縮推定オプションなしで図20〜図24のフローを用いてもよい。あるいは、同様に、図20〜図24の純粋遅延推定方法のないエコーキャンセラに、適応フィルタ短縮推定オプションが存在してもよい。別法として、図20〜図24の方法を有するエコーキャンセラにおいて、適応フィルタ短縮推定オプションが図20〜図24の方法とは独立にイネーブルされることも可能である。また、このオプションがイネーブルされない場合、(または、このオプションが、追加の非適応フィルタ64や追加の非適応フィルタ31および35の係数だけでなく適応フィルタ62の新たな係数を求めるために依然として機能している場合)、追加のフィルタ(複数可)は単に迂回されてもよい(あるいは、信号をフィルタリングせずに通過させてもよい)。
判断分岐626でオプションがイネーブルされている場合、フローは判断分岐628に進み、ERLEが十分に良好であるかどうかを判定する。(ERLEは、上記で式26に示したように計算することができる。ここで、ERLEはPSinとPerrorの比に対応し、PSinおよびPerrorは上記の式1および式1を用いて計算することができる。)ERLEが十分に良好であるかどうかを判定するため、ERLEを閾値と比較することができる。例えば、閾値は、20dBよりも大きい値に設定することができる。別法として、閾値は、30〜40dBの範囲内に設定することができる。一般に、ERLEが高いほど(誤差Perrorが低くなるので)信号は良好である。十分に高いERLEは、Sgen(近端トーカ信号)が存在しない時に生じる。というのは、Sgenが存在すればERLEが低下するからである。別法として、引き続きERLEを求めてそれを閾値と比較する前に、上記の近端信号検出器26から、近端トーカ信号が存在するかどうかを判定することも可能である。近端トーカ信号が存在する場合、またはERLEが十分に良好でない場合、フローは図28の残りの部分を迂回して図9のブロック212に進む。これに対して、ERLEが十分に良好である(閾値よりも高い)場合、フローはブロック630に進む。すなわち、良好な信号が存在し、誤差信号46が良好なエコー推定値48から得られる時には、適応フィルタ短縮推定オプションを実行すべきである。なお、代替実施形態では、このオプションを実行するための良好な信号が存在するかどうかを判定するために、システム内の多くの信号を用いてもよいことに留意されたい。
ブロック630で、適応フィルタ62の現在の係数に基づく純粋遅延およびばらつきを求める。(なお、ブロック630の詳細は図29に関して後述することに留意されたい。)ブロック630の後、フローはブロック632に進み、ブロック630で求められた純粋遅延およびばらつきに基づいて、追加の非適応フィルタ64またはフィルタ31および45の係数Wと、適応フィルタ62の新たに短縮されたバージョンに対応する適応フィルタ62の新たな係数を求める。(なお、ブロック632の詳細は図30に関して後述することに留意されたい。)次に、フローは判断分岐634に進み、新たな構成が十分に良好であるかどうかを判定する。すなわち、新たな構成が満足できるものであるかどうかを判定するためにさまざまな基準を用いることができる。例えば、一実施形態では、新たな構成の削減された係数の個数が、所望の削減された係数の個数よりも依然として大きい場合、係数の個数をさらに削減するために、ブロック632のプロセスを繰り返すことができる。別法として、判断分岐634が存在しなくてもよい。その場合、ブロック632を1回だけ実行し、その結果を十分とみなす。
判断分岐634で新たな構成が十分に良好である場合、フローはブロック636に進み、適応フィルタ62を再構成する。すなわち、ブロック632で求められた適応フィルタ62のための新たな係数を適応フィルタ62にロードし、非適応フィルタ64とともに、または非適応フィルタ31および35とともに、適応フィルタ62を用いる。(なお、ブロック636の詳細は図31に関して後述することに留意されたい。)また、ブロック636において、非適応フィルタの追加から生じる必要な遅延をディレイ66の既存の遅延値に追加することによって、遅延ユニット66の遅延値を更新することができることにも留意されたい。そして、フローはブロック638に進み、フィルタ短縮推定オプションをディセーブルする。すなわち、図28のフローは一般に、サンプルごとには実行されない。このフローは、適応フィルタ短縮推定オプションをイネーブルするために、例に関して上記で説明した状況のような必要な時にのみ実行される。しかし、代替実施形態では、図28のフローはサンプルごとに実行してもよい。
なお、図28に示されている実施形態では、ERLEが十分に良好であると判定した後、ブロック630〜638は順次実行されることに留意されたい。しかし、代替実施形態では、ブロック630〜638(またはブロック630〜638のサブセット)は、エコーキャンセラ20の他のタスクと並列に実行される別個のスレッドとして起動されることも可能である。図28のフローの完了後、図28の方法は、エコーキャンセラ20に対して、適応フィルタ62を更新することができるような結果の準備が完了していることを通知することができる。別法として、エコーキャンセラ20には、フィルタ短縮全体が完了したことが通知されることも可能である。例えば、ブロック630〜638(またはブロック630〜638のサブセット)の完了を示す信号または割込みをエコーキャンセラ20に供給してもよい。
図29は、図28のブロック630の部分を示している。すなわち、図29のフローは、適応フィルタ62の現在の係数から純粋遅延およびばらつきを求める一実施形態を示している。フローはブロック640から開始され、適応フィルタ62の係数のマグニチュードを巡回バッファに移動する。すなわち、適応フィルタ62のフィルタ係数のスナップショットをとり、位置0〜N−1を有するサイズNの巡回バッファに記憶する。適応フィルタ62の現在の係数Hは、H=[h0,... ,hN−1]と表すことができる。ここで、h0,... ,hN−1は係数に対応し、Nは、適応フィルタ62の係数あるいはタップの個数に対応する。したがって、|hn|に対応する値を巡回バッファ内の位置「n MOD N」に記憶する。ここで、nはサンプル番号に対応し、「|x|」は「xのマグニチュード(大きさ)」を示す(そして正の値に対応する)。「n MOD N」という表現はnのモジュラスに対応し、演算n/Nの剰余を指す。例えば、Nが256であり、nの値が270である場合、n MOD Nは14であり、|h270|の値は「位置270」(これは、サイズNの巡回バッファの範囲を超える)から巡回バッファの位置14に折り返される。したがって、nの値がNよりも大きい場合、nが0〜N−1の範囲内に入るまで、Nの値をnから連続的に差し引くことができる。同様に、nの値が0よりも小さい場合、nが0〜N−1の範囲内に入るまで、Nの値をnに連続的に加えることができる。
次に、フローはブロック642に進み、係数hごとに、サイズLWのスライディングウィンドウ内のマグニチュード値の和としてエネルギーE(n)(n=0〜N−1)を計算する。一実施形態では、LWは目標ウィンドウサイズの長さ、すなわち、適応フィルタ62の係数の実効的な個数を削減した後のタップあるいは係数の目標個数に関連する。例えば、一実施形態では、LWはサイズ10サンプルのスライディングウィンドウに対応してもよい。ここで、10個のタップが、所望のフィルタ長である。したがって、Nが256である場合(適応フィルタ62の係数hが256個であることを示す)、256個のE(n)の値を求める。ここで、256個のE(n)の値のそれぞれは、10個のマグニチュ
ード(LW内の10個のサンプルに対応する)の和である。したがって、E(n)は、次の式40に示すように表すことができる。
上式(および本明細書に記載の他の式)において、記法[X]Nは、X MOD Nに対応することに留意されたい。次に、フローはブロック642からブロック644に進み、遅延Dを、エネルギーピークからLWを引いた位置として設定する。すなわち、N個のEの値(スライディングウィンドウLW内のエネルギー)を求めた後、Eが最大になる点(サンプル時刻)からLWを引いたものが、インパルス応答の純粋遅延に対応する。したがって、Dは式41に示すように表すことができる。
上式において、max E(n)は、N個とったEの値のうちのEの最大値であり、arg(max E(n))は、Eが最大となる引数すなわち点である。ここで、「引数」はサンプル時刻に対応する。したがって、Dは純粋遅延に対応する。
次に、フローはブロック646に進む。ここで、ばらつき時間は、Dと、エネルギーEが所定閾値よりも小さくなる次の位置との間のサンプル数に対応する。すなわち、n=0,1,... ,N−1の範囲にわたるE(n)(インパルス応答のマグニチュード(大きさ)に対応する)の一般的傾向は、最大ピークへと略増大してからまた減少するように記述することができる。したがって、E(n)は最大値に達した後に減少し、所定閾値を超えて減少する点がばらつき時間の終端に対応する。したがって、ばらつき時間は、Dと、E(n)がそのピーク値に到達した後に所定閾値に達する点(サンプル時刻)との間のサンプル数となる。所定値は、ばらつき時間の終端を示すことができる任意の値に設定することができる。例えば、一実施形態では、192サンプル(すなわち、8kHzのサンプリングレートで24ミリ秒)に設定することができる。
図30は、図28のブロック632の部分の一実施形態を示している。ここで、(1)(非適応フィルタ64または非適応フィルタ31および35のいずれかに対する)非適応フィルタ係数Wと、(2)適応フィルタ62の係数の短縮バージョンと、の両方を求める。フローはブロック648から開始され、(非適応フィルタ64または非適応フィルタ31および35のいずれかに対する)新たなフィルタ係数Wを求める(なお、ブロック648の詳細は図32〜図36に関して後述することに留意されたい)。次に、フローはブロック650に進み、係数Wと現在の適応フィルタ62の係数との(すなわち、図29のブロック640でとったスナップショットとの)畳込みをとることにより、短縮されたフィルタ係数Bを求める。ここで、Bは、非適応フィルタ64または31および35の追加後の適応フィルタ62の新たな係数を含む。フローはブロック652に進み、短縮されたフィルタ係数Bの新たな純粋遅延Dおよびばらつき時間を求める。したがって、図29のフ
ローならびに式40および式41を用いてブロック652を遂行することができる。そして、フローはブロック654に進み、B(すなわち所定の長さのBの部分)から適応フィルタ62に対する新たな適応フィルタ係数を求め、適応すべきフィルタ係数の最大数(すなわち、選択されたBの部分のサンプル数)を選択する。
図31は、適応フィルタ62が再構成される図28のブロック636の部分の一実施形態を示している。フローはブロック656から開始され、現在の適応フィルタ係数Hを、図30のブロック654で前に求められた短縮された係数で置き換える。フローはブロック658に進み、(図30のブロック648で求められた)新たな係数Wを非適応フィルタ(フィルタ64またはフィルタ31および35)にロードする。したがって、非適応フィルタ(複数可)にWをロードすることによってWはイネーブルされ、それにより適応フィルタ62は削減されたフィルタ長を有することが可能となる。そして、フローはブロック660に進み、適応フィルタ28内の遅延ユニット66を新たな遅延で更新する。例えば、一実施形態では、単に、新たに求められた純粋遅延Dで遅延ユニット66を更新してもよい。代替実施形態では、遅延ユニット66に現在記憶されている遅延を判定し、必要に応じて既存の値を更新してもよい。別法として、新たな遅延が、遅延ユニット66内の既存の遅延からあまり変わっていない場合、遅延ユニット66を全く更新しなくてもよい。また、ブロック660において、ブロック656における新たな係数を適応フィルタ62にロードした後は、新たな係数の個数に適応するように適応フィルタ62を構成しなければならない。
図32は、(フィルタ64またはフィルタ31および35に対応する)新たなフィルタ係数Wを求める図30のブロック648の一実施形態を示している。フローは判断分岐662から開始され、事前に計算されたフィルタ係数Wが存在するかどうかを判定する。例えば、異なるハイブリッドおよびチャネルの条件に対応するさまざまな異なる可能なWのセットを含むライブラリを事前に計算したものが存在してもよい。その場合、新たなWは、単にライブラリから選択すればよく、フローは、適応フィルタ係数とライブラリからのすべての既存のWとの畳込みをとり、最良のパフォーマンスを提供するものを選び出すことによって、図30のブロック650に進む。別法として、さまざまなシナリオを最もよく表す事前に計算された単一のWを用いてもよい。その場合、Wは、多様な異なる方法(その1つは図36に関して後述する)でオフラインで計算することができ、そうして事前に計算されたWを用いることができる。フィルタ係数Wを事前に計算しない場合、フローはブロック664に進み、新たなフィルタ候補を決定するための任意の方法を用いてWを求めることができる。Wを決定するための種々の実施形態については、図33〜図35に関してさらに詳細に説明する。
次に、フローはブロック666に進み、Wの根を求める。例えば、WはW=[w0,w1,... ,wM−1]と表すことができる。ここで、w0,w1,... ,wM−1はフィルタ係数に対応し、Mはフィルタ係数の個数に対応する。すると、W(z)は、次の式42に示すように表すことができる:
Wの根を求めるため、W(z)を0と置き、zについて解くと、zはM−1個の解を有する。したがって、W(z)の根Rは、R=[r0,r1,... ,rM−1]と表すこと
ができる。ここで、根は複素数およびその共役を含む。したがって、W(z)=0は、次の式43に示すように表すこともできる:
次に、フローはブロック668に進み、根に対する追加的制約を課す。それにより、WがFIR処理モードまたはIIR処理モードのいずれで用いられても、安定なままにとどまることができる。例えば、WがFIR実施態様で用いられる場合には、安定性を保証するために制約を課すことは不要であるが、WがIIR実施態様で用いられる場合には、根が単位円内になければならない。単位円とは、実数に対応するx軸および虚数に対応するy軸によって定義される平面内の円であって、原点(x軸とy軸の交点であり、x軸およびy軸の両方の0に対応する)の周りに描かれた半径1の円である。単位円内にないW(z)のそれぞれの根rkに対して、rkが単位円内に入るようにrkを置き換える。別法として、根が単位円内にあるべきことを課すのではなく、ρが1よりも小さいとして、W(z)の根が原点を中心とする半径ρの円内にあるように制約を課すことも可能である。したがって、この実施形態では、半径ρの円内にないW(z)のそれぞれの根rkに対して、根rkが半径ρの円内に入るように根rkを置き換える。したがって、|rk|(すなわちrkの大きさ)がρよりも大きい場合、この置き換えは式44に示すように表すことができる:
なお、上式において、rk *はrkの複素共役を表すことに留意されたい。そして、フローはブロック670に進み、修正された根から新たなフィルタ係数Wnewを構築する。すなわち、ブロック668で課された制約によりいずれかの根を修正しなければならない場合、修正された根を用いてWnewを求めることができる。新たな根を上記の式43のr0,... ,rM−1に代入することにより、新たなW(z)(すなわちWnew)を求めることができる。そして、フローの残りの部分(これは図30のブロック650に続く)では、Wnewをフィルタ係数Wとして用いる。したがって、図32は、Wの根を条件づける、または計画する(project )ために用いることができる。
図36は、インパルス応答推定値のトレーニングセットが与えられた場合に、フィルタ係数Wをオフラインで設計するために用いられる方法の一実施形態を示している。フローはブロック704から開始され、すべての設計方法について、トレーニングセット内のあらゆるチャネルインパルス応答に対する解Wを求める。したがって、トレーニングセット内の8個のチャネルインパルス応答に対して2つの設計方法が用いられる場合、合計16個の解(W0〜W15)が求められる。さらに、図36の方法は、Wを求めるいかなる特定の方法にも限定されない。次に、フローはブロック706に進み、あらゆる解Wについて、Wと、トレーニングセット内のあらゆるインパルス応答との畳込みBkを推定する。したがって、16個の解(W0〜W15)およびトレーニングセット内の8個のインパル
ス応答がある本例では、合計128個の畳込みが推定される。したがって、任意の解Wに対して、それぞれのBkはBk=[bk,0,bk,1,... ,bk,N−1]と表すことができる。ここで、bk,0,bk,1,... ,bk,N−1は係数であり、NはBkの長さである。なお、[k]8は、トレーニングセット内のチャネル数を示すことに留意されたい。
次に、フローはブロック708に進み、あらゆるBkに対して、最大エネルギーを有する望ましい長さ(すなわち目標フィルタ長)のばらつき領域を位置特定する。すなわち、最大エネルギーのばらつき領域は、上記の式40および式41を用いて位置特定することができる。ここで、LWは、ばらつき領域の望ましい長さに対応する。したがって、ブロック708に対する式は次のように表すことができる。
上式は、上記の式40に類似している。式45において、Nは特定のBkの長さであり、Ek(n)は、スライディングウィンドウLW(ばらつき領域の望ましい長さに対応する)内のエネルギーに対応する。したがって、それぞれのBkに対してN個のエネルギー値(Ek(0),... ,Ek(N−1))が求められる。したがって、それぞれのBkに対して最大エネルギーを有するばらつき領域は、次式を用いて求めることができる。
式46は、上記の式41に類似している。式46において、Dkは、最大エネルギーにおけるBkの純粋遅延に対応するので、ばらつき領域は、Dkから始まり、Dk+LWで終わり、最大エネルギーを有する領域である。(別法として、式41に関して上記で説明したように、ばらつき領域の終端は、エネルギーEk(n)が所定閾値を下回る点として定義することも可能である。)したがって、それぞれのBkに対して、最大エネルギーのばらつき領域が求められる。次に、フローはブロック710に進み、あらゆるBkに対して性能指数FMkを推定する。性能指数は、(ブロック708からの)最大エネルギーmax Ek(n)とBkの全エネルギーEkとの比として定義される。そこで、Ekは次式を用いて求めることができる:
上式において、NはBkの長さである。したがって、性能指数は次のように表すことができる。
上式において、NはBkの長さである。フローはブロック712に進み、すべてのチャネルインパルス応答に対する平均性能指数FMAVGを求める。あらゆる解Wk(上記の例ではk=0,1,... ,15)は固有の平均性能指数FMAVGを有することになる。フローはブロック714に進み、すべての可能な設計方法のうちでFMAVGが最大になるような最適フィルタWを選択する。図36の方法はオフラインで実行可能であり、最終的に選択されるWは、エコーキャンセラ20内に記憶し、必要に応じて非適応フィルタ64、31、または35にロードすることができる。
なお、上記のWの説明では追加的フィルタが非適応フィルタであると仮定しているが、非適応フィルタ64、31、および35の代わりに適応フィルタを用いてもよいことに留意されたい。しかし、安定性を保証するために、上記のように、Wに対して制約を課さなければならないことがあり、フィルタが適応フィルタである場合、フィルタ適応の結果として不安定なフィルタとなる可能性があるため、安定性制約をサンプルごとに課さなければならないことがある。
図33〜図35は、Wを求めるための可能な設計方法を示している。例えば、図33〜図35は、図36のブロック704で用いられる設計方法のうちの3つに対応していてもよい。別法として、図33〜図35の方法の一部または全部が、エコーキャンセラ20によってその動作中に実行されることが可能である。一実施形態では、エコーキャンセラ20は、Wを求めるために3つの設計方法をすべて(例えば図32のブロック664で)実行し、最後に(図28のブロック632の後で)どの方法が最良の解を提供しているかを判定してもよい。なお、異なる方法では、修正された根から新たなフィルタ係数を再構成した後の最良の解ではなく、根またはWを修正する(図32のブロック668)前の最良の解を提供してもよいことに留意されたい。したがって、さまざまな方法が、エコーキャンセラ20で、実施形態に応じてさまざまな時に解析または選択されてもよい。別法として、単一の設計方法がエコーキャンセラ20で用いられてもよい。
図33は、本発明の一実施形態による、新たなフィルタ係数Wを求めるための1つの設計方法に対応する図32のブロック664の部分を示している。フローはブロック672から開始され、適応フィルタ62の係数のばらつき領域を巡回バッファに移動することにより、(ブロック644で計算された)遅延Dを補償する。したがって、遅延補償された係数GはG=[g0,g1,... ,gN−1]と表すことができる。ここで、g0,g1,... ,gN−1は、遅延補償された係数Gの係数であり、Nは適応フィルタ62の長さである。したがって、H(図29のブロック640でとられた元のスナップショットに対応する適応フィルタ62の未補償係数)とGの間の関係は次のように表すことができる。
式49において、giは遅延補償された係数であり、対応する巡回バッファのi番目の位置に記憶される。図38は、図37のインパルス応答例を遅延D(図37のT1に対応
する)だけ時間補償することにより、インパルス応答がばらつき時間(図37のT4+T2で定義される)から開始するようにした一実施形態を示している。したがって、Hの係数は図37のインパルス応答を表すのに対して、Gの係数は図38の時間補償されたインパルス応答を表す。次に、フローはブロック674に進み、望ましいフィルタ長を定める。例えば、一実施形態では、上記のように、望ましいフィルタ長は10であるように定められる(この場合、インパルス応答のばらつき時間は10サンプルに圧縮されることが望ましい)。図38の例を参照すると、望ましいフィルタ長はT5、すなわち、0とS1の間の時間に対応する。ここで0はばらつき時間の開始を定め(そして、Gの最初の係数にも対応する。というのは、Gは遅延補償されているからである)、S1は望ましいフィルタ長の終端を定める。
望ましいフィルタ長が求められた後、望ましいフィルタ長内のばらつき領域の係数を消去して残留係数Vを定める。すなわち、i=0,1,... ,S1に対してgiを0とおく。したがって、VはV=[0,... ,0,v0,v1,... ,vK−1]と表すことができる。ここでKはVの非ゼロ成分の数であり、Vのそれぞれの非ゼロ係数は次のように定義される。
したがって、図38の例を参照すると、時間T5に対応するGの係数はゼロに設定され、Vの係数は残留歪み、すなわち、時間T6に対応するインパルス応答の部分を表す。フローはブロック676〜680に進み、残留歪みVを等化するように動作する。
ブロック676で、Vの高速フーリエ変換(FFT)を計算する。フローはブロック678に進み、FFT(V)の逆数Iを計算する。ここで、I=1/FFT(V)である。フローはブロック680に進み、Iの逆FFT(IFFT)としてW1を計算する。ここで、W1=IFFT(I)である。したがって、W1はVの逆であり、残留歪みVを等化するために用いることができる。フローはブロック682に進み、(図29でのチャネルばらつきの推定と同様に)最大エネルギーを有する所定の長さのW1のウィンドウからWを求める。ここで、所定の長さは、望ましい適応フィルタタップ数である。そして、フローはブロック684に進み、例えばWのユークリッドマグニチュード(すなわちL2ノルム)によりフィルタ係数Wを正規化する。
図34は、本発明の一実施形態による係数Wを求めるための代替方法を示している。フローはブロック686から開始され、(ブロック672および式49からの)遅延補償されたフィルタ係数Gを用いて、上記のように、望ましいフィルタ長を定め、畳込み行列Cを求める。畳込み行列Cは次のように定義することができる。
SLは、次のように表し得る選択行列に対応する。
式52において、0は(N+M−L−1)×L型の零行列であり、Iは(N+M−L−1)×(N+M−L−1)型の単位行列である。この式において、NはGの長さに対応し、MはWの長さ(望ましい適応フィルタ長を実現するための所定の非適応フィルタタップ数)に対応し、Lは望ましい適応フィルタ長に対応する。ConGは、Gの畳込み行列に対応し、次のように表すことができる。
したがって、行列Cは、遅延補償されたフィルタ係数Gの畳込み行列ConGから、その最初のL行を無視することによって得られる。これは、この設計プロセスの最後までに、短縮されたチャネルの係数を定めることになる。
フローはブロック688に進み、式51の行列Cの第1行を列ベクトルとしたものとしてbwを定義する。フローはブロック690に進み、行列Aを計算する。
式54において、CTという表記は行列Cの転置を表す。フローはブロック692に進み、AW=bwで与えられる方程式系をWについて解く。そして、フローはブロック694に進み、フィルタ係数Wを正規化する。当業者には直ちに認識されるように、上記の解は、系CW=[1,0,... ,0]Tの最小平均二乗誤差解に対応する。これは、適応フィルタ62の係数とWとの全体的畳込みを考慮することによって歪みを等化しようとしている。
図35は、本発明のもう1つの実施形態による係数Wを求めるための代替方法を示している。フローはブロック696から開始され、(ブロック672および式49からの)遅延補償されたフィルタ係数Gを用いて、上記のように、望ましいフィルタ長を定め、畳込み行列Cを求める。したがって、式51で定義したのと同じC行列が図35で用いられる。次に、フローはブロック698に進み、図34のブロック690と同様に、行列Aを計算する(式54参照)。フローはブロック700に進み、WTW/WTAWの最大解を推定する。なお、WTW/WTAWは、行列Aで重み付けされたWの正規化タップのエネル
ギーの比を与えるので、WTW/WTAWの最大解は、WTW=1という条件の下でエネルギーWTAWを最小化することに留意されたい。また、WTW/WTAWは、Iが単位行列であるとしてWTIW/WTAWと等価であるので、解Wは、ペア(I,A)の最大固有値に対応する一般化固有ベクトルであることにも留意されたい。これは、固有ベクトルを推定するための既製のアルゴリズムを用いて計算することができる。そして、フローはブロック702に進み、ブロック700で求められたフィルタ係数Wを正規化する。
したがって、図33〜図35は、フィルタ係数Wを求めるために使用可能な3つの設計方法を提供している。なお、図33の方法は、望ましい(目標)フィルタ長の外部の残留歪みを等化しようとすることに留意されたい。図34の方法は、適応フィルタ62の係数とWとの全体的畳込みを考慮しながら歪みを等化しようとする点で、より大域的である。しかし、図34の場合、方程式がより複雑になる。図35の方法は、適応フィルタ62の係数とWとの畳込みの後に残留歪みのエネルギーを実際に最小化しようとする。上記のように、すべての方法がエコーキャンセラ20により実施可能であり、Wの根を修正する前、または修正された根から新たなフィルタ係数Wを再構築した後のいずれかに、最良の解が選択される。
以上、本明細書では、特定の実施形態に関して本発明を説明している。しかし、当業者には認識されるように、添付の特許請求の範囲に記載の本発明の範囲から逸脱することなく、種々の変更および変形を行うことが可能である。例えば、本明細書に教示されているいずれの方法も、コンピュータハードディスク、フロッピー(登録商標)ディスク、3.5インチディスク、コンピュータストレージテープ、磁気ドラム、スタティックランダムアクセスメモリ(SRAM)セル、ダイナミックランダムアクセスメモリ(DRAM)セル、電気的消去可能(EEPROM、EPROM、フラッシュ)セル、不揮発性セル、強誘電体または強磁性体メモリ、コンパクトディスク(CD)、レーザーディスク、光ディスク、および任意の同様のコンピュータ可読媒体の1つまたは複数の上のソフトウェアとして具現化可能である。また、ブロック図は、図示のものとは異なるブロックであってもよく、ブロックはより多くてもより少なくてもよく、別様に配置されてもよい。また、フロー図も、別様に配置されてもよく、含まれるステップはより多くてもより少なくてもよく、別様に配置されてもよく、複数のステップに分離可能なステップや互いに同時に実行可能なステップを有してもよい。したがって、明細書および図面は、限定的ではなく例示的なものとみなされるべきであり、すべてのこのような変更は本発明の範囲内に含まれることが意図されている。
上記では、特定の実施形態に関して、利益、他の利点、および課題の解決法を説明している。しかし、利益、利点、課題の解決法、およびいかなる利益、利点、または解決法を生じさせ得る、またはより顕著にし得るいかなる要素(複数可)も、一部または全部の請求項の重要な、必要な、または本質的な特徴または要素と解釈されてはならない。本明細書で用いられる場合、「含む(comprises, comprising )」という用語、またはそのいかなる他の変化形も、非排他的な包含の意味を含むことが意図されているので、要素のリストを含むプロセス、方法、物品、または装置は、それらの要素のみを含むだけでなく、明示的に挙げられていない他の要素や、そのようなプロセス、方法、物品、または装置に固有の他の要素を含んでもよい。