CQエレクトロニクス・セミナ「実習・マイコンを動かしながら学ぶディジタル・フィルタ」で使う適応線スペクトル強調器(ALE)のプログラム.ステップサイズパラメータをターミナルから変更できる. http://seminar.cqpub.co.jp/ccm/ES18-0020

Dependencies:   F746_GUI F746_SAI_IO mbed

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;
     }