Integrated program of 4 different kinds of application programs for processing sound signal. 4種類のサウンド信号処理を統合したプログラム.

Dependencies:   F746_GUI F746_SAI_IO FrequencyResponseDrawer SD_PlayerSkeleton UIT_FFT_Real

Committer:
MikamiUitOpen
Date:
Thu Apr 27 23:55:53 2017 +0000
Revision:
16:d60e5187fd31
Parent:
15:fac50dd1de44
17

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 15:fac50dd1de44 1 //------------------------------------------------------------------------------
MikamiUitOpen 15:fac50dd1de44 2 // 縦続形 IIR フィルタのクラス
MikamiUitOpen 15:fac50dd1de44 3 //
MikamiUitOpen 15:fac50dd1de44 4 // 2017/04/07, Copyright (c) 2017 MIKAMI, Naoki
MikamiUitOpen 15:fac50dd1de44 5 //------------------------------------------------------------------------------
MikamiUitOpen 15:fac50dd1de44 6
MikamiUitOpen 15:fac50dd1de44 7 #ifndef IIR_CASCADE_HPP
MikamiUitOpen 15:fac50dd1de44 8 #define IIR_CASCADE_HPP
MikamiUitOpen 15:fac50dd1de44 9
MikamiUitOpen 15:fac50dd1de44 10 #include "Biquad.hpp"
MikamiUitOpen 15:fac50dd1de44 11 #include "Array.hpp"
MikamiUitOpen 15:fac50dd1de44 12
MikamiUitOpen 15:fac50dd1de44 13 namespace Mikami
MikamiUitOpen 15:fac50dd1de44 14 {
MikamiUitOpen 15:fac50dd1de44 15 class IIR_Cascade
MikamiUitOpen 15:fac50dd1de44 16 {
MikamiUitOpen 15:fac50dd1de44 17 public:
MikamiUitOpen 15:fac50dd1de44 18 // コンストラクタ
MikamiUitOpen 15:fac50dd1de44 19 IIR_Cascade(int order, const Biquad::Coefs ck[], float g0)
MikamiUitOpen 15:fac50dd1de44 20 : ORDER2_(order/2), G0_(g0), hk_(ORDER2_)
MikamiUitOpen 15:fac50dd1de44 21 {
MikamiUitOpen 15:fac50dd1de44 22 if ((order % 2) != 0)
MikamiUitOpen 15:fac50dd1de44 23 {
MikamiUitOpen 15:fac50dd1de44 24 fprintf(stderr, "\r\nOrder is not even number.\r\n");
MikamiUitOpen 15:fac50dd1de44 25 while (true) {}
MikamiUitOpen 15:fac50dd1de44 26 }
MikamiUitOpen 15:fac50dd1de44 27 for (int n=0; n<order/2; n++) hk_[n] = Biquad(ck[n]);
MikamiUitOpen 15:fac50dd1de44 28 Clear();
MikamiUitOpen 15:fac50dd1de44 29 }
MikamiUitOpen 15:fac50dd1de44 30
MikamiUitOpen 15:fac50dd1de44 31 // デストラクタ
MikamiUitOpen 15:fac50dd1de44 32 ~IIR_Cascade() {}
MikamiUitOpen 15:fac50dd1de44 33
MikamiUitOpen 15:fac50dd1de44 34 // 過去の計算結果を格納する遅延器のクリア
MikamiUitOpen 15:fac50dd1de44 35 void Clear()
MikamiUitOpen 15:fac50dd1de44 36 {
MikamiUitOpen 15:fac50dd1de44 37 for (int k=0; k<ORDER2_; k++) hk_[k].Clear();
MikamiUitOpen 15:fac50dd1de44 38 }
MikamiUitOpen 15:fac50dd1de44 39
MikamiUitOpen 15:fac50dd1de44 40 // フィルタ処理の実行
MikamiUitOpen 15:fac50dd1de44 41 float Execute(float xn)
MikamiUitOpen 15:fac50dd1de44 42 {
MikamiUitOpen 15:fac50dd1de44 43 float yn = G0_*xn;
MikamiUitOpen 15:fac50dd1de44 44 for (int k=0; k<ORDER2_; k++) yn = hk_[k].Execute(yn);
MikamiUitOpen 15:fac50dd1de44 45 return yn;
MikamiUitOpen 15:fac50dd1de44 46 }
MikamiUitOpen 15:fac50dd1de44 47
MikamiUitOpen 15:fac50dd1de44 48 private:
MikamiUitOpen 15:fac50dd1de44 49 const int ORDER2_; // 次数/2
MikamiUitOpen 15:fac50dd1de44 50 const float G0_; // 利得定数
MikamiUitOpen 15:fac50dd1de44 51
MikamiUitOpen 15:fac50dd1de44 52 Array<Biquad> hk_; // 2 次の IIR フィルタのオブジェクトの配列
MikamiUitOpen 15:fac50dd1de44 53
MikamiUitOpen 15:fac50dd1de44 54 // disallow copy constructor and assignment operator
MikamiUitOpen 15:fac50dd1de44 55 IIR_Cascade(const IIR_Cascade&);
MikamiUitOpen 15:fac50dd1de44 56 IIR_Cascade& operator=(const IIR_Cascade&);
MikamiUitOpen 15:fac50dd1de44 57 };
MikamiUitOpen 15:fac50dd1de44 58 }
MikamiUitOpen 15:fac50dd1de44 59 #endif // IIR_CASCADE_HPP