Audio singal input and output example for DISCO-F746. Input: MEMS mic, Output: CN10 OUT, Acoustic effect: echo and frequency shift. DISCO-F746 によるオーディオ信号入出力.入力:MEMS マイク,出力:CN10 OUT,音響効果:エコー,周波数変換.

Dependencies:   F746_GUI F746_SAI_IO

Committer:
MikamiUitOpen
Date:
Thu Apr 14 08:37:11 2016 +0000
Revision:
0:f064b50f238e
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:f064b50f238e 1 //------------------------------------------------------------------------------
MikamiUitOpen 0:f064b50f238e 2 // 縦続形 IIR フィルタのクラス
MikamiUitOpen 0:f064b50f238e 3 //
MikamiUitOpen 0:f064b50f238e 4 // 2016/04/12, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:f064b50f238e 5 //------------------------------------------------------------------------------
MikamiUitOpen 0:f064b50f238e 6
MikamiUitOpen 0:f064b50f238e 7 #ifndef IIR_CASCADE_HPP
MikamiUitOpen 0:f064b50f238e 8 #define IIR_CASCADE_HPP
MikamiUitOpen 0:f064b50f238e 9
MikamiUitOpen 0:f064b50f238e 10 #include "Biquad.hpp"
MikamiUitOpen 0:f064b50f238e 11
MikamiUitOpen 0:f064b50f238e 12 namespace Mikami
MikamiUitOpen 0:f064b50f238e 13 {
MikamiUitOpen 0:f064b50f238e 14 template<int order> class IIR_Cascade
MikamiUitOpen 0:f064b50f238e 15 {
MikamiUitOpen 0:f064b50f238e 16 public:
MikamiUitOpen 0:f064b50f238e 17 // コンストラクタ
MikamiUitOpen 0:f064b50f238e 18 IIR_Cascade(const Biquad::Coefs ck[], float g0) : g0_(g0)
MikamiUitOpen 0:f064b50f238e 19 {
MikamiUitOpen 0:f064b50f238e 20 for (int n=0; n<order/2; n++) hk_[n] = Biquad(ck[n]);
MikamiUitOpen 0:f064b50f238e 21 Clear();
MikamiUitOpen 0:f064b50f238e 22 }
MikamiUitOpen 0:f064b50f238e 23
MikamiUitOpen 0:f064b50f238e 24 // デストラクタ
MikamiUitOpen 0:f064b50f238e 25 ~IIR_Cascade()
MikamiUitOpen 0:f064b50f238e 26 {
MikamiUitOpen 0:f064b50f238e 27 for (int n=0; n<order/2; n++) delete hk_[n];
MikamiUitOpen 0:f064b50f238e 28 }
MikamiUitOpen 0:f064b50f238e 29
MikamiUitOpen 0:f064b50f238e 30 // 過去の計算結果を格納する配列のクリア
MikamiUitOpen 0:f064b50f238e 31 void Clear()
MikamiUitOpen 0:f064b50f238e 32 {
MikamiUitOpen 0:f064b50f238e 33 for (int k=0; k<order/2; k++) hk_[k].Clear();
MikamiUitOpen 0:f064b50f238e 34 }
MikamiUitOpen 0:f064b50f238e 35
MikamiUitOpen 0:f064b50f238e 36 // フィルタ処理の実行
MikamiUitOpen 0:f064b50f238e 37 float Execute(float xn)
MikamiUitOpen 0:f064b50f238e 38 {
MikamiUitOpen 0:f064b50f238e 39 float yn = g0_*xn;
MikamiUitOpen 0:f064b50f238e 40 for (int k=0; k<order/2; k++) yn = hk_[k].Execute(yn);
MikamiUitOpen 0:f064b50f238e 41 return yn;
MikamiUitOpen 0:f064b50f238e 42 }
MikamiUitOpen 0:f064b50f238e 43
MikamiUitOpen 0:f064b50f238e 44 private:
MikamiUitOpen 0:f064b50f238e 45 Biquad hk_[order/2]; // 2 次の IIR フィルタ
MikamiUitOpen 0:f064b50f238e 46 const float g0_; // 利得定数
MikamiUitOpen 0:f064b50f238e 47 };
MikamiUitOpen 0:f064b50f238e 48 }
MikamiUitOpen 0:f064b50f238e 49 #endif // IIR_CASCADE_HPP