手習ひデジタル信号処理(45) 適応線スペクトル強調器、実験用入力信号フィルタしたら見違えた

Joseph Halfmoon

前回前々回と適応線スペクトル強調器のサンプルプログラムを動かしていて「波形が不安定」とか「ステップ・サイズ・パラメータも安定せんな~」と気にかかっておったのです。その原因として心に引っかかっていたのが入力波形です。ノイズを「盛る」べく制限波に乱数を重ねているのですが、強調器のナイキスト周波数越えのノイズまで山盛り。

※参照させていただいております三上直樹先生著の教科書は以下です。

工学社『「Armマイコン」プログラムで学ぶデジタル信号処理

三上先生の御ソースは、Arm社MbedのWeb環境(要登録、無料)内で公開されており、「呂」で検索すれば発見できます。今回は第9章「適応フィルタ」のところの9.4.3 「学習同定法」と「Leaky LMSアルゴリズム」を組み合わせたプログラムを参照させていただいております。

※実験は、ST Microelectronics社製 Nucleo-F446REボード(Arm Cortex-M4Fコア搭載STM32F446RE)向けにMbed環境内でビルドしています。測定はDigilent社 Analog Discovery2で行っています。

ステップ・サイズ・パラメータ表示にまつわるバグFIX

まずは、前回、ステップ・サイズ・パラメータを観察するために勝手変更してしまった部分のバグFIXです。前回のコードではステップ・サイズ・パラメータを表示すると常に適応線スペクトル強調器(ALE)がオフになってしまっていました。そのFIXが以下に。yまたはnキーでALEをオン、オフしたときに表示するように改めてます。

programFIx

 

 

今回生成した入力信号(アクティブ・フィルタ前)

入力波形は、Digilent Analog Discovery2のWavegenを使用し、正弦波波形にランダムノイズを重ねて生成しているのは前回と同じです。今回は前回よりノイズを「盛ってます」カスタム波形の定義が以下に。

customWaveForm

上記のカスタム波形定義により実際に生成したオフセット0V、振幅1V、500Hzの正弦波にノイズを加えた波形が以下です。

InputWaveForm

上記波形のFFTとったものが以下に。今回のALEのナイキスト周波数は5kHzですが、ずっと上の周波数まで高調波とノイズが跋扈しているのが分かります。InputWaveFormFFT

 

 

入力信号をアクティブ・フィルタに通した結果

前回、前々回と上のようなALE対処可能範囲を超えた信号を食わせていました。やましく思ったので、以下の記事で密かに カットオフ周波数 5kHz のアクティブ・フィルタを作ってました。

SPICEの小瓶(12) アクティブ・フィルタ(実機)を組み立てた結果。動いて当然か?

切れ味するどいアクティブ・フィルタ(ホントか?、盛りすぎ)を通すと、先ほどのノイズ大盛正弦波は以下のような波形になってしまいました。

これをFFTかけたものが以下に。フィルタ効いているみたいです。AFwaveFFT

 

適応線スペクトル強調器を通した結果

さてアクティブ・フィルタ後の信号を、ALEに通したものが以下に。黄色C1は、アクティブ・フィルタ前のノイズだらけの入力信号で、青色C2が、アクティブ・フィルタを通過後、ALEで処理した出力信号です。いかにもサイン波な感じ。それだけでなく、前回は絶えず揺らいでいて安定しなかった出力波形が安定してます。アクティブ・フィルタによるご利益あらたか。なお、下記の時間波形のトレースを多数回重ねて確率表示したパーシステンス画像を冒頭に掲げました。

ResultTIMy

FFTかけたものが以下に。高い周波数は滅亡。ResultFFT

さて、前回は不安定で(かつバグもあった)うまく読めなかったステップ・サイズ・パラメータを観察してみます。

まず入力信号のアクティブフィルタ前の振幅1Vのとき。行頭に y とあるのがALEオンの時の値です。微妙な変動はありますが、前回のように数値が飛び回るような挙動はありませぬ。

y12.818631
y12.828198
y12.676732
y12.643549
y12.592808
n12.712105
n12.868625
n12.785728
n12.789975
n12.844596

続いて、振幅2Vに上げたものが以下に。ステップ・サイズ・パラメータは+2くらい大きくなっていますが、安定してます。

y14.739635
y14.533362
y14.602186
y14.576430
y14.626579
n14.567415
n14.670890
n14.572353
n14.661873
n14.571884

こんどは振幅500mVに下げた場合です。ステップ・サイズ・パラメータも小さくなりました。やはり安定。

y9.430637
y9.381983
y9.461921
y9.508568
y9.481007
n9.461962
n9.496332
n9.442196
n9.478832
n9.434279

信号の振幅に「適応」して、ステップ・サイズ・パラメータも自動変更されているんでないかい。対応可能な範囲の信号をいれてやれば動作は安定すると。

手習ひデジタル信号処理(44) 適応線スペクトル強調器、学習同定法+Leaky LMS版とな へ戻る

手習ひデジタル信号処理(46) FFTによるFIRフィルタ、外からみたら結果は同じ へ進む