正規化された LMS 適応フィルターを使用した、金宝appでの低周波ノイズの除去
適応フィルターは、システムの動的性質を追うことから、時間とともに変化する信号の除去を可能にします。DSP System Toolbox™ ライブラリには最小平均二乗 (LMS)、ブロック LMS、高速ブロック LMS、および逐次最小二乗 (RLS) の適応フィルター アルゴリズムを実装するためのブロックがあります。これらのフィルターは、そのフィルター係数を変えることにより出力信号と要求される信号との差を縮めます。時間とともに、適応フィルターの出力信号は再現しようとする信号によりいっそう近づきます。
金宝appによる適応フィルターの設計
この例では、LMS 適応フィルターを設計して信号内の低周波ノイズを取り除きます。
モデルにデジタル フィルターを追加するで作成したモデルがデスクトップ上に開いていない場合、モデルを開くには
入力は MATLAB®コマンド プロンプトで行います。
MATLAB コマンド プロンプトで「
dsplib
」と入力して、DSP System Toolbox ライブラリを開きます。LMS Filterブロックをシステムに追加して低周波ノイズを信号から取り除きます。これは、飛行機のシナリオでコックピット内のマイクへの入力から風切音を差し引くことに相当します。Filtering ライブラリをダブルクリックし、それから Adaptive Filters ライブラリをダブルクリックします。モデルにLMS Filterブロックを追加します。
Digital Filter Design ブロックの出力をモデル化するようにLMS Filterブロックのパラメーターを設定します。ブロックをダブルクリックして [LMS フィルター] ダイアログ ボックスを開きます。ブロック パラメーターを以下のように設定して適用します。
Algorithm=
Normalized LMS
Filter length=
32
Specify step size via=
Dialog
Step size (mu)=
0.1
Leakage factor (0 to 1)=
1.0
Initial value of filter weights=
0
Adapt portチェック ボックスをオフにします。
Reset port=
None
[Output filter weights]チェック ボックスをオンにします。
これらのパラメーターに基づき、LMS Filter ブロックは正規化 LMS 法の式を使い、フィルターの重みを計算します。指定したフィルター次数は Digital Filter Design ブロックのものと同じです。[Step size (mu)]パラメーターはフィルター更新ステップの細かさを定義します。[Leakage factor (0 to 1)]パラメーターを1.0
に設定したので、現在のフィルター係数の値はフィルターの初期条件およびこれまでの入力値に影響されます。フィルターの重み (係数) の初期値は 0 です。[Output filter weights]チェック ボックスをオンにしたので、Wts端子がブロックに表示されます。この端子からフィルターの重みが出力されます。
LMS Filter ブロックのパラメーター設定が完了しました。ブロック線図にこのブロックを組み込めます。
モデルに適応フィルターを追加する
この例では、Simulink による適応フィルターの設計で設計した適応フィルターをシステムに組み込んで元の正弦波信号を取り出します。飛行機のシナリオにおいて、この適応フィルターはコックピット内で聞こえる低周波ノイズをモデル化しています。その結果、マイクへの入力がパイロットの声だけとなるようにノイズを除去することができます。
Simulink による適応フィルターの設計で作成したモデルがデスクトップ上に開いていない場合、モデルを開くには
入力は MATLAB コマンド プロンプトで行います。
モデルに Sum ブロックを追加して、低周波ノイズを含んだ正弦波から適応フィルターの出力を減算します。Simulink®Math Operations ライブラリから Sum ブロックをモデルにドラッグします。このブロックをダブルクリックして Sum ダイアログ ボックスを開きます。[符号リスト]パラメーターを「|+-」に変更して[OK]をクリックします。
システムに LMS Filter ブロックを組み込みます。
Random Source ブロックの出力を LMS Filter ブロックの Input 端子に接続します。飛行機のシナリオでは、ランダム ノイズは飛行機の外にあるセンサーで計測されたホワイト ノイズに相当します。LMS Filter ブロックは機体がノイズに及ぼす影響をモデル化したものです。
Digital Filter Design ブロックの出力を LMS Filter ブロックの Desired 端子に接続します。これが LMS ブロックで再現しようとする信号です。
LMS Filter ブロックの出力を手順 2 で追加した Sum ブロックのマイナス端子に接続します。
1 番目の Sum ブロックの出力を 2 番目の Sum ブロックのプラス端子に接続します。モデルは次の図のようになっているはずです。
2 番目のSumブロックへのプラス入力は、入力信号と低周波ノイズの合計s(n) + yです。2 番目のSumブロックへのマイナス入力は、LMS Filterブロックによる低周波ノイズの最良推定値y'です。これらの 2 つの信号を減算すると、入力信号の近似値が残ります。
この方程式は、以下を意味します。
s(n)は入力信号
は入力信号の近似値
yはRandom SourceブロックおよびDigital Filter Designブロックにより生成されたノイズ
y'は LMS Filter ブロックによるノイズの近似値
LMS Filterブロックではノイズの近似のみが可能であり、入力信号と入力信号の近似値との間には違いが存在します。続くステップでは、本来の正弦波信号とその近似値を比較できるようにScopeブロックを設定します。
Scope ブロックに入力と軸を 2 つずつ追加します。Scopeブロックをダブルクリックして Scope ダイアログ ボックスを開きます。[パラメーター]ボタンをクリックします。[座標軸数]パラメーターに「
4
」と入力します。[OK]をクリックしてダイアログ ボックスを閉じます。新しい Scope 軸にラベルを付けます。Scope ウィンドウで、3 番目の軸を右クリックし、[座標軸プロパティ]を選択します。[Scope プロパティ: 軸 3 ] ダイアログ ボックスが開きます。[タイトル]ボックスに「
Approximation of Input Signal
」と入力します。[OK]をクリックしてダイアログ ボックスを閉じます。4 番目の軸にも同じ手順を繰り返し、「Error
」とラベルを付けてください。2 番目の Sum ブロックの出力を、Scopeブロックの 3 番目の端子に接続します。
LMS FilterブロックのError端子からの出力をScopeブロックの 4 番目の端子に接続します。モデルは次の図のようになっているはずです。
この例では、Error端子からの出力は LMS Filter に要求された信号とその出力信号の差です。誤差がゼロになることはないため、フィルターは低周波ノイズにより近づくためにフィルター係数を変更し続けます。近似すればするほど、正弦波信号から低周波ノイズを取り除くことができます。次のトピック適応フィルター係数を表示では時間経過に応じた適応フィルター係数の変化の表示方法を学びます。
適応フィルター係数を表示
適応フィルターの係数は選択されたアルゴリズムに従って時間とともに変化します。アルゴリズムがフィルターのパフォーマンスを最適化すると、これらのフィルター係数は定常値に達します。シミュレーションの実行中に係数の変化を表示して、係数が定常値に落ち着くのを見ることができます。これにより、実際のシステムにそれらの値を適用できるかどうかを判断することができます。
モデルに適応フィルターを追加するで作成したモデルがデスクトップ上に開いていない場合、モデルを開くには
入力は MATLAB コマンド プロンプトで行います。適応フィルターのWts端子 (フィルターの重みを出力) がまだ接続されていないということを念頭においてください。
MATLAB コマンド プロンプトで「
dsplib
」と入力して、DSP System Toolbox ライブラリを開きます。Time ScopeブロックをLMS FilterブロックのWts端子に接続することでフィルター係数を表示します。
Time Scopeブロックで、次の構成プロパティを変更します。
[時間範囲]=
0.05
[Y 軸範囲 (最小)]=
-0.15
[Y 軸範囲 (最大)]=
0.5
モデル設定を開きます。[モデル化]タブの[モデル設定]をクリックします。[ソルバー]ペインで、これらの構成パラメーターを設定します。
[終了時間]=
inf
[タイプ]=
[固定ステップ]
[ソルバー]=
[離散 (連続状態なし)]
DSP System Toolbox ブロックを含むモデルにはこのコンフィギュレーション パラメーターを使用することをお勧めします。これらのブロックは、微分方程式を解くよりもむしろ値を直接計算することから、Simulink ソルバーがスケジューラのように振る舞うよう設定する必要があります。ソルバーは、スケジューラ モードの場合、ブロックのサンプル時間を使用してそれぞれのブロックの背後にあるコードが実行されるタイミングを決定します。たとえば、このモデルの Sine Wave ブロックおよび Random Source ブロックのサンプル時間は
0.05
です。ソルバーはこれらのブロックおよび同じサンプル時間をもつ他のブロックの背後にあるコードを 0.05 秒ごとに実行します。メモ
DSP System Toolbox ブロックを含むモデルを使用する際には、それらのサンプル時間を指定できるソース ブロックを使用してください。ソース ブロックに[サンプル時間]パラメーターがない場合、Zero-Order Hold ブロックをモデルに追加してサンプル時間を指定しなければなりません。詳細については、連続時間ソース ブロックを参照してください。ただし,これは常数ブロックには当てはまりません。このブロックは定数サンプル時間をもつことができます。その場合、Simulink はこのブロックを実行して、定数をシミュレーション開始時に 1 回記録し、さらにパラメーターを調整した際にも毎回記録します。これにより、シミュレーションの高速化とよりコンパクトなコードの生成が可能になります。
モデルを実行して Time Scope (シミュレーションが始まると自動的に開きます) でフィルター係数の挙動を確認します。時間の経過とともにフィルター係数が定常値に近づきます。
また,システムの挙動を范围ウィンドウで見ることができます。時間の経過とともに,誤差が減少し、入力信号の近似値が本来の正弦波入力信号に近づいていくのがわかります。
これで、適応ノイズ キャンセリングを行うモデルが完成しました。
まとめ
Digital Filter Designブロックを使用してローパス フィルターを設計する方法を学びました。また、LMS Filterブロックを使用して適応フィルターを作成する方法も学びました。DSP System Toolbox 製品には他にもデジタル フィルターおよび適応フィルターを設計し実装するためのブロックが含まれます。この製品のフィルター処理機能の詳細は、フィルターの設計およびフィルター解析を参照してください。
このモデルではすべてのブロックのサンプル時間は同一であるため、このモデルはシングル レートであり Simulink はこれを[SingleTasking]
ソルバー モードで実行しました。モデル内のブロックにサンプル時間が異なるものがある場合、そのモデルはマルチレートになるため Simulink はそれを[MultiTasking]
ソルバー モードで実行する場合があります。ソルバー モードの詳細については、離散時間シミュレーション用の推奨設定を参照してください。
Simulink Coder™製品を使用してモデルからコードを生成する方法については、Simulink モデルからの C コードの生成を参照してください。
参考
LMS Filter|Digital Filter Design