ハウリング・キャンセラのデモ・プログラム
'10.12.10
- 拡声系の開ループ利得測定プログラムとハウリング・キャンセラ・プログラムの間のゲインの整合に誤りがありましたので修正しました. 結果として数dBハウリング抑圧性能が低下します.
- ハウリング・キャンセラ・プログラムの相関低減処理のための周波数シフトに低遅延のIIR構成Hilbert変換フィルタ対を用いたので音質は向上しています.(以前のプログラムはあまり特性の良くないFIRフィルタを用いていました)
- 必要な機材とシステム構成
- 必要な機材
- Windowsパソコン
- OSはWindows XPまたはWindows 2000を搭載したものを用いてください.
- DSP評価キット
- TI(Texas Instruments)製 C6713 DSK (TMDSDSK6713)
- C6713 DSKにはキット専用版の統合開発環境CCS(Code Composer Studio)、Cコンパイラ等が含まれています. キット付属CCSはVer.3.1で,CCSはWindows
XPとWindows 2000に対応しています.
- CCSの最新版Ver.4はWindows 7, Windows Vista, Windows XPに対応していますが,Eclipseベースとなっているのでキット付属CCSとは操作法にかなり違いがあります. CCS
Ver.4はTIのwebからダウンロード可能です. ライセンス条件が少し複雑でC6713 DSKに対応していないフリー版,C6713 DSKと組み合わせて使用可能な期間限定フリーのライセンス等があります. ユニバーシティ・ライセンスもあるそうなので,Ver.4を教育機関で使用される場合は日本TIのユニバーシティ・プログラムの窓口にお問い合わせ下さい.
- パワー・アンプ
- 実効出力20W程度、あるいはそれ以上の出力のものを用いてください. 当社ではBOSEの1705IIを使用しています.

- スピーカ
- 写真のような小型のスピーカで十分です. ただし通常の使用状態で筐体が共振するようなものは使用しないでください.
- 当社ではFostexのユニットFF125K(口径120mm)を小型の密閉箱に入れたもの(写真左)と、BOSEの101VM(101MMの防磁仕様品、写真右)を用いています.

- マイク
- 廉価なタイピン型の無指向性エレクトレット・コンデンサ・マイクで問題ありません. もちろん計測用のマイクロホンを用いてもかまいませんが、特殊な指向特性の音楽収録用マイクは避けてください.
- 当社ではaudio-technicaのAT805Fを使用しています. AT805Fは生産中止のようなので、audio-technicaの製品を新規に購入されるのであればAT9903が良いでしょう.
- マイク・アンプ
- 使用するマイクに適合したものを用意してください. 当社ではaudio-technicaのAT-MA2を使用しています. 廉価なエレクトレット・コンデンサ・マイクを用いた簡単な実験には申し分ない機能・性能の製品です. モノラル/ステレオ両用で、バスパワー型のエレクトレット・コンデンサ・マイクへの電源供給も出来ます.

- 接続ケーブル類
パワー・アンプ、マイク・アンプは十分なダイナミックレンジを有するものを用いてください. スピーカ、マイクも同様です. ハウリング・キャンセラのプログラムはパワー・アンプ、マイク・アンプ、スピーカ、マイクよりも先にDSKのA/Dコンバータが先にクリップするという前提で作っています.
- システム構成
- 拡声システムの構成
- 無響室内ではこのような一般的な拡声システムの構成で実験可能です. スピーカとマイクの距離は2m~3m程度に設定してください. 拡声システムの開ループ利得10dB程度でもハウリング抑圧可能です.
- 補聴器の構成(またはメガホン型拡声器の構成)
- 防音室や残響のある普通の部屋ではこの構成にしてください. 超大型(?)の補聴器、または超高利得のメガホン型拡声器のモデルになっています. マイクはスピーカの背面に極力密着させてください. 音響系の開ループ利得10dB程度でもハウリング抑圧可能です.(この構成では開ループ利得≠拡声利得であることに注意してください)
- 小型密閉箱入りのFF125Kを用いた設定例を以下に示します. アルミ角材のフレームにタイピン・マイクを取り付けています. スピーカとマイクの間に挟んである白いものは吸音材です.


- BOSEの101VM (101MM) を用いた設定例を以下に示します. 101VM背面のフォーン・ジャックにタイピン・マイクを引っかけています. この例では吸音材を使っていませんが、それでも問題なくハウリング抑圧が出来ました.


- デモ・プログラムのダウンロード
- デモ・プログラムのソフトウェア使用許諾条件は下記のとうりです. この条件に同意できる方のみプログラムをダウンロードしてご利用ください.
- デモ・プログラムの著作権等は当社(有限会社ケプストラム)が保有しています.
- ソフトウェア使用許諾条件
- 本ソフトウェアは無保証です. 本ソフトウェアはそのまま(as is)の状態で、実験・デモ用途に限り利用者に無償使用を許諾します.
- 本ソフトウェアの使用結果、本ソフトウェアを使用した実験・デモの結果について当社はいかなる保証もいたしません.
- 本ソフトウェアの使用、本ソフトウェアを使用した実験・デモによって被った損害に対して当社はいかなる賠償の責任も追いません.
- 本ソフトウェアの再配布、販売、レンタル、リースを禁止します.
- 本ソフトウェアの改変、逆コンパイル、逆アセンブル等のリバースエンジニアリングを禁じます.
- 本ソフトウェアの提供により、当社は当社の所有する工業所有権を利用者に対して暗黙に譲渡、実施許諾するものではありません.
- ハウリング・キャンセラのデモ・プログラム canceller_demo.zip (134KB)
- 上記のzipファイルには以下のプログラムが含まれています.
- tsp.out
- TSP (Time Stretched Pulse) を用いた音響系の開ループ利得(振幅周波数特性)の測定用プログラムです. サンプリング周波数8kHz、周期1024サンプルのTSPを用いています. 最初にこのプログラムを用いてアンプのゲイン設定等をおこなってください.
- 一般の残響測定に用いられているTSPとは異なる、休止期間の無いTSPを使って測定をおこなっています.
- canceller1024.out
- サンプリング周波数8kHz、適応フィルタのタップ長1024タップのハウリング・キャンセラのプログラムです.
- canceller256.out
- サンプリング周波数8kHz、適応フィルタのタップ長256タップのハウリング・キャンセラのプログラムです.
- canceller1024.outとは各種パラメータ設定が異なります.
- より現実的な補聴器の構成での実験に用いてください.
- プログラムの使用方法
- 使用時の6713 DSKとアンプの接続の注意点
- マイク・アンプの出力はC6713 DSKのライン入力の左チャネルに接続します.
- C6713 DSKのライン出力の左チャネルをパワー・アンプの入力に接続します.
- C6713 DSKの入出力の右チャネルは使用していません. したがって接続にC6713 DSK側がモノラル・ミニプラグのケーブルを用いてもかまいません.
- tsp.out の使用方法
- このプログラムを用いて音響系の開ループ利得の測定、パワー・アンプ/マイク・アンプのゲイン設定をおこなってください. その次にcanceller1024.outを用いたハウリング抑圧実験をおこないます.
- 動作テスト
- 最初にアンプ、スピーカ、マイクを接続せず、C6713 DSKのライン出力とライン入力を短絡してテストをおこなってみましょう. 両端にミニプラグがついている接続ケーブルでC6713
DSKのライン出力とライン入力を接続してください. モノラルのケーブルでも、ステレオのケーブルでもかまいません.
- C6713 DSK基板上の SW1 (ピアノキー型スイッチ)はすべてOFFの状態に設定してください.(レバーをすべて上げる)

SW1(白枠内のピアノキー型スイッチ)
4本のレバーはプログラム実行前にすべて上げておく.(OFF状態にする)
- CCS (Code Composer Studio) を起動してメニューより Debug → Connect でC6713 DSKを接続する.
- 次に File → Load Program で tsp.out をC6713 DSKにダウンロードする.
- ダウンロードが終わったら Debug → Run でプログラムの実行を開始する.
- View → Graph → Time/Frequency... を選択するとグラフ表示のパラメータ設定窓が開くので、下図のように設定します. するとA/Dから入力した信号波形がグラフ表示されます.

最初に表示されたグラフは波形が乱れているかもしれませんが、グラフ上でマウスを右クリックしてあらわれる下図のメニューで Refresh を選択すると表示が更新されます. DSPプログラムが動作中にリフレッシュをかけるとデータ化けが生じることがありますが、何度か繰り返しリフレッシュすると正常なグラフ表示が得られます. グラフ表示のパラメータ設定を変える時は下図のメニューで
Properties... を選択してください.
- 次にもう一度 View → Graph → Time/Frequency.. を選択して下図のように設定すると、入力信号をFFTして求めた振幅周波数特性がグラフ表示されます. 下図右のように信号レベルがほぼ -7dB
となればテスト結果はO.K.です.(乱れの無いグラフが表示されるまで何度かリフレッシュしてください) 正常な測定結果が得られない場合は、ケーブル接続等をよく確認してください.
- 以上で tsp.out とDSKの正常動作が確認できました. いよいよアンプ、マイク、スピーカを接続して音響系の開ループ利得の測定、パワー・アンプ/マイク・アンプのゲイン設定をおこないます.
- 音響系の開ループ利得の測定とパワー・アンプ/マイク・アンプのゲイン設定
- 「必要な機材とシステム構成」 の項の説明どうりアンプ、スピーカ、マイクを接続してください. SW1はすべてOFFにします. 設定が終わったら動作テストの時と同様にプログラム tsp.out を動かします.
- 周波数特性のグラフをリフレッシュしながら拡声系の利得が最大10dB前後になるようにマイク・アンプ、パワー・アンプのゲインを設定します. 下図の例では開ループ利得の最大値がほぼ10dBになっています. マイク・アンプ、パワー・アンプの利得設定はそのままにして、次に
canceller1024.out を使ったハウリング・キャンセラの実験をおこないます.
- なお SW1 の4つのレバーのうちのいずれか一つを押し下げると、測定結果をファイルにセーブしてプログラムは停止します. 以下の3つのファイルがパソコン上に生成されます. スペース区切りのASCIIデータですので、中身はエディタ等で確認してください.
- out_spec1.txt 周波数特性データ
- out_spec2.txt 周波数特性データ
- out_waveform.txt A/D変換波形とTSP信号
- canceller1024.out の使用方法
- アンプ、スピーカ、マイクのセッティング、demo_tsp.outを用いたアンプのゲイン設定が終わったら、CCS (Code Composer
Studio) のメニューより File → Load Program で canceller1024.out をC6713 DSKにダウンロードして Debug → Run で実行を開始します. プログラム実行前にC6713 DSKのSW1はすべてOFFの状態にしておいてください.(4つのレバーをすべて上げる)
- プログラムはハウリング・キャンセラがONの状態で起動します. マイク向かって小声で話しかけると、スピーカから大きな音で拡声されるはずです. 確かに音響系の開ループ利得が0dB以上の状態でもハウリングが抑圧されていることを実感できるでしょう.
- ハウリング・キャンセラの動作を確認できたら View → Graph → Time/Frequency... で適応フィルタ係数 w のグラフと、それをFFTした周波数特性のグラフを表示させてください. グラフ表示のパラメータ設定はtsp.outを用いた動作テストの時と同一です. 何度か表示をリフレッシュしてデータ化けの無いグラフを表示させます.
下記の例は補聴器の構成で、利得を最大約10dBとした実験例です. やや残響が多く、顕著なフラッター・エコーもある6畳間相当の部屋で実験したために、かなりインパルス・レスポンスが尾を引いています. この時のパワー・アンプの利得は28dB、マイク・アンプの利得は38dBでした. なお残響のある室内で実験した場合、適応フィルタ係数をFFTして求めた周波数特性は、必ずしも音響系の特性と完全に一致するわけではありませんのでご注意ください.(フィードバックの無いシステム同定の適応システムとは振る舞いが異なります)
実験がうまくいったら、15dB程度にゲインを上げてもハウリング抑圧ができるかどうか試してみてください.
- 確認のためにSW1-0 (SW1左端のレバー)を押し下げると、ハウリング・キャンセラはOFFになります. 大きなハウリング音が発生するので気をつけてください.
- SW1-3(SW1右端のレバー)を押し下げると、適応フィルタ係数をファイル out_w.txt にセーブしてプログラムは停止します.
- canceller256.outを用いたより現実的な補聴器の構成での実験方法
- 必要な機材が増えますがcanceller256.outを用いれば、より現実的な補聴器の構成でのハウリング抑圧実験が可能です. システム構成は下図のようになります. 拡声系のマイク、スピーカと受聴位置(耳の位置)が接近した補聴器を模擬した構成となります. 拡声効果・ハウリング抑圧効果はモニター用のマイクに接続したオシロスコープ、FFTアナライザ等で確認します. 音源にはラジオ等を用いてください.
- マイクはスピーカの至近距離に配置します. 下の写真ではスピーカのセンター・キャップから約2cmの位置に2つのマイクを配置しています.
- 開ループ利得は15dB~20dB程度になるように設定して実験をおこなってください. canceller256.outを用いた実験例のデータを下図に示します. 下図左が適応フィルタ係数
w (256タップ)、下図右が適応フィルタ係数 w をフーリエ変換して求めた振幅周波数特性です. 約300Hz以上のすべての周波数で開ループ利得が0dBを越えていますが、ハウリングは発生しません.

下図はモニター用のマイク出力の波形です. 10秒おきにハウリング・キャンセラ付の拡声システムをON/OFFしていますが、拡声システムが0dB以上の利得を有し、なおかつハウリングが生じていないことが分かります. wavファイルをダウンロードして、実際の音を聞いてみてください. 信号レベルの設定等が適切でなかったためにS/Nが良くありませんが、ハウリングは完全に抑圧されています. ビリついた音がするのはスピーカ前面のグリルの共振等の影響です.
モニター用マイク出力信号 hearingaids_exp.wav (1019KB)

参考までに適応フィルタのタップ長を128タップに設定し、ステップサイズ・パラメータμを大きくするとともにアンプのゲイン配分も見直しておこなった実験結果(モニター用マイク出力信号)を以下に示しますので聞いてみてください. 5秒おきにハウリング・キャンセラ付の拡声システムをON/OFFしています.
128タップの実験のモニター用マイク出力信号 128tap1.wav (512KB)
以上の説明は利用者がCCS(Code Composer Studio)の操作方法を良く理解しているという前提で、細部は省略して記述しています. CCSの使用方法の詳細についてはTIが公開している資料、TI製プロセッサの情報交換のweb等を参照してください.
CCSのグラフ表示が乱れるのは仕様です. DSPプログラム動作中に無理矢理パソコンへのデータ転送をおこなっているので、しばしばデータ化けが生じるのは当然です. DSPのリアルタイムOSは使用していません.
- ハウリング・キャンセラのデモ・プログラムの仕様
- サンプリング周波数 : 8kHz
- 適応アルゴリズム : Normalized LMS (NLMS)
- 収束特性改善のためにエンファシス/ディ・エンファシスを併用しています.
- 相関低減処理には周波数シフト(シフト量8Hz)を用いています. 周波数シフトには低遅延のIIR構成Hilbert変換フィルタ対を用いています.
- ハム・ノイズ除去のために中心周波数50Hzと60Hzのノッチ・フィルタを挿入してあります.
- canceller1024.outは音響系の開ループ利得20dBの場合に合わせて、canceller256.outは開ループ利得30dBに合わせて、リミッタのリミット値を設定してあります. パワー・アンプ、スピーカ、マイク、マイク・アンプは十分なダイナミックレンジを有し、これらよりも先にA/Dコンバータが飽和すると仮定しています.
- 下図は大まかな処理の流れを示したブロック・ダイアグラムです.
