前回、前々回と適応線スペクトル強調器のサンプルプログラムを動かしていて「波形が不安定」とか「ステップ・サイズ・パラメータも安定せんな~」と気にかかっておったのです。その原因として心に引っかかっていたのが入力波形です。ノイズを「盛る」べく制限波に乱数を重ねているのですが、強調器のナイキスト周波数越えのノイズまで山盛り。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※参照させていただいております三上直樹先生著の教科書は以下です。
工学社『「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をオン、オフしたときに表示するように改めてます。
今回生成した入力信号(アクティブ・フィルタ前)
入力波形は、Digilent Analog Discovery2のWavegenを使用し、正弦波波形にランダムノイズを重ねて生成しているのは前回と同じです。今回は前回よりノイズを「盛ってます」カスタム波形の定義が以下に。
上記のカスタム波形定義により実際に生成したオフセット0V、振幅1V、500Hzの正弦波にノイズを加えた波形が以下です。
上記波形のFFTとったものが以下に。今回のALEのナイキスト周波数は5kHzですが、ずっと上の周波数まで高調波とノイズが跋扈しているのが分かります。
入力信号をアクティブ・フィルタに通した結果
前回、前々回と上のようなALE対処可能範囲を超えた信号を食わせていました。やましく思ったので、以下の記事で密かに カットオフ周波数 5kHz のアクティブ・フィルタを作ってました。
SPICEの小瓶(12) アクティブ・フィルタ(実機)を組み立てた結果。動いて当然か?
切れ味するどいアクティブ・フィルタ(ホントか?、盛りすぎ)を通すと、先ほどのノイズ大盛正弦波は以下のような波形になってしまいました。
これをFFTかけたものが以下に。フィルタ効いているみたいです。
適応線スペクトル強調器を通した結果
さてアクティブ・フィルタ後の信号を、ALEに通したものが以下に。黄色C1は、アクティブ・フィルタ前のノイズだらけの入力信号で、青色C2が、アクティブ・フィルタを通過後、ALEで処理した出力信号です。いかにもサイン波な感じ。それだけでなく、前回は絶えず揺らいでいて安定しなかった出力波形が安定してます。アクティブ・フィルタによるご利益あらたか。なお、下記の時間波形のトレースを多数回重ねて確率表示したパーシステンス画像を冒頭に掲げました。
さて、前回は不安定で(かつバグもあった)うまく読めなかったステップ・サイズ・パラメータを観察してみます。
まず入力信号のアクティブフィルタ前の振幅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
信号の振幅に「適応」して、ステップ・サイズ・パラメータも自動変更されているんでないかい。対応可能な範囲の信号をいれてやれば動作は安定すると。