arm_lms_q15関数 |
LMS(Least Mean Square)アルゴリズムを実行する |
関数のソース(CMSIS 2.0以上をダウンロード・インストールする必要あり) CMSIS_2_00\CMSIS\DSP_Lib\Source\Cortex-M4-M3\FilteringFunctions\arm_lms_q15.c サンプルソース(DFFSKN40基板付属CD-ROMに収録) 2011/09/04追加 IARprojects\src\projects\arm_lms 引数と戻り値 説明(イメージ) 使用例(サンプルソースの一部)
実験 上記のサンプルソースをDFFSKN40基板(デジタルフィルター社)にて実験した。Cortex-M4マイコンはPK40X256VMD100(Kinetis, フリースケール社)搭載。 @ステレオ2chそれぞれOPアンプで振幅調整・高周波カット。 Aマイコン内蔵のADCで16ビットデジタル化。 Barm_lms_q15関数でスペクトル強調(Rchのみ)。 Cマイコン内蔵のDACでアナログ化。 DOPアンプで振幅調整、その後PCで波形観測。 入力が1kHzサイン波+白色雑音の場合。Lch(赤)は入力をそのままスルー。Rch(青)はLMSアルゴリズムにより白色雑音が取り除かれている。 入力が3kHzサイン波+白色雑音の場合。周波数が上がったがサイン波は残り、白色雑音が取り除かれている。 入力が300Hzサイン波+白色雑音の場合。周波数が下がってもサイン波が残り、白色雑音が取り除かれている。 入力が1kHz矩形波+白色雑音の場合。矩形波が残り、白色雑音が減衰している。 上図の際のスペクトル。Lch(赤)とRch(青)を比較すると、スペクトルのピークはそのまま、裾野はぐっと下がっている。それゆえ「線スペクトル強調器」と呼ばれる。 まめ知識 入力遅延量は1サンプルとしたが、これは入力信号の品質によるので試行錯誤的に決めると良い。 mu = 2048としたが、これも試行錯誤的に決める。小さいと収束に時間がかかり、大きいと発散しやすい。 あまりにもノイズレベルが大きいと機能しない。 通常のFIRフィルタより演算量が多いので処理はRchのみ、またサンプリング周期も長く(1/24kHz)した。 IAR Embedded Workbenchの最適化レベルは「低」とした。それより上のレベルではうまくコンパイルされなかった。 |