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
SignalProcessing/IIR_Cascade.hpp@0:f064b50f238e, 2016-04-14 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Thu Apr 14 08:37:11 2016 +0000
- Revision:
- 0:f064b50f238e
1
Who changed what in which revision?
User | Revision | Line number | New 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 |