arm_lms_q15関数 |
LMS(Least Mean Square)アルゴリズムを実行する |
![]() CMSIS_2_00\CMSIS\DSP_Lib\Source\Cortex-M4-M3\FilteringFunctions\arm_lms_q15.c ![]() 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の最適化レベルは「低」とした。それより上のレベルではうまくコンパイルされなかった。 |