CQエレクトロニクス・セミナ「実習・マイコンを動かしながら学ぶディジタル・フィルタ」で使う適応線スペクトル強調器(ALE)のプログラム.ステップサイズパラメータをターミナルから変更できる. http://seminar.cqpub.co.jp/ccm/ES18-0020
Dependencies: F746_GUI F746_SAI_IO mbed
Diff: Filter/ALE_Variable.hpp
- Revision:
- 2:ef391be185f5
- Parent:
- 0:c8e52f514e03
--- a/Filter/ALE_Variable.hpp Mon Mar 12 04:58:20 2018 +0000 +++ b/Filter/ALE_Variable.hpp Tue Mar 20 04:46:59 2018 +0000 @@ -1,7 +1,7 @@ //--------------------------------------------------- // 適応線スペクトル強調器(ALE): μ可変 // -// 2018/03/01, Copyright (c) 2018 MIKAMI, Naoki +// 2018/03/20, Copyright (c) 2018 MIKAMI, Naoki //--------------------------------------------------- #ifndef IIR_1ST_VARIABLE_HPP @@ -20,13 +20,6 @@ // ALE を実行する int16_t Execute(int16_t xn) { - xm_[0] = xn; // 遅延器の初段に入力信号を格納 - for (int k=order_-1; k>=0; k--) // フィルタ内の信号のシフト - xk_[k+1] = xk_[k]; - xk_[0] = xm_[delay_-1]; // フィルタの初段に遅延器の最終段の信号を格納 - for (int k=delay_-2; k>=0; k--) // 遅延器内の信号のシフト - xm_[k+1] = xm_[k]; - // FIRフィルタの計算 float yn = 0.0f; for (int k=0; k<=order_; k++) yn = yn + hk_[k]*xk_[k]; @@ -35,6 +28,13 @@ float errMu = (xn - yn)*mu_; // 誤差信号×μ の計算 for (int k=0; k<=order_; k++) hk_[k] = hk_[k] + errMu*xk_[k]; + for (int k=order_-1; k>=0; k--) // フィルタ内の信号のシフト + xk_[k+1] = xk_[k]; + xk_[0] = xm_[delay_-1]; // フィルタの初段に遅延器の最終段の信号を格納 + for (int k=delay_-2; k>=0; k--) // 遅延器内の信号のシフト + xm_[k+1] = xm_[k]; + xm_[0] = xn; // 遅延器の初段に入力信号を格納 + return (int16_t)yn; }