Nucleo-F446 による遮断周波数可変 LPF/HPF .DA変換器にデータを送る際は 4 倍にアップ・サンプリング.

Dependencies:   mbed SerialTxRxIntr F446_AD_DA_MultirateSWI

Committer:
MikamiUitOpen
Date:
Tue Jun 05 11:20:57 2018 +0000
Revision:
0:89d173001e82
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:89d173001e82 1 //------------------------------------------------------------------------
MikamiUitOpen 0:89d173001e82 2 // 双一次z変換によるバタワースフィルタの設計(ヘッダ)
MikamiUitOpen 0:89d173001e82 3 // LPF, HPF のみ
MikamiUitOpen 0:89d173001e82 4 //
MikamiUitOpen 0:89d173001e82 5 // 2018/05/14, Copyright (c) 2018 MIKAMI, Naoki
MikamiUitOpen 0:89d173001e82 6 //------------------------------------------------------------------------
MikamiUitOpen 0:89d173001e82 7
MikamiUitOpen 0:89d173001e82 8 #ifndef BILINEAR_BUTTERWORTH_HPP
MikamiUitOpen 0:89d173001e82 9 #define BILINEAR_BUTTERWORTH_HPP
MikamiUitOpen 0:89d173001e82 10
MikamiUitOpen 0:89d173001e82 11 #include "mbed.h"
MikamiUitOpen 0:89d173001e82 12 #include <complex> // requisite
MikamiUitOpen 0:89d173001e82 13 #include "Array.hpp"
MikamiUitOpen 0:89d173001e82 14 #include "Biquad.hpp"
MikamiUitOpen 0:89d173001e82 15
MikamiUitOpen 0:89d173001e82 16 namespace Mikami
MikamiUitOpen 0:89d173001e82 17 {
MikamiUitOpen 0:89d173001e82 18 typedef complex<float> Complex; // "Complex" を定義する
MikamiUitOpen 0:89d173001e82 19
MikamiUitOpen 0:89d173001e82 20 class BilinearDesign
MikamiUitOpen 0:89d173001e82 21 {
MikamiUitOpen 0:89d173001e82 22 public:
MikamiUitOpen 0:89d173001e82 23 enum Type { LPF, HPF };
MikamiUitOpen 0:89d173001e82 24
MikamiUitOpen 0:89d173001e82 25 // コンストラクタ
MikamiUitOpen 0:89d173001e82 26 BilinearDesign(int order, float fs)
MikamiUitOpen 0:89d173001e82 27 : PI_FS_(PI_/fs), ORDER_(order),
MikamiUitOpen 0:89d173001e82 28 sP_(order/2), zP_(order/2), ck_(order/2) {}
MikamiUitOpen 0:89d173001e82 29
MikamiUitOpen 0:89d173001e82 30 // デストラクタ
MikamiUitOpen 0:89d173001e82 31 virtual ~BilinearDesign() {}
MikamiUitOpen 0:89d173001e82 32
MikamiUitOpen 0:89d173001e82 33 // 設計の実行
MikamiUitOpen 0:89d173001e82 34 void Execute(float fc, Type pb, Biquad::Coefs c[], float& g);
MikamiUitOpen 0:89d173001e82 35
MikamiUitOpen 0:89d173001e82 36 private:
MikamiUitOpen 0:89d173001e82 37 static const float PI_ = 3.1415926536f;
MikamiUitOpen 0:89d173001e82 38 const float PI_FS_;
MikamiUitOpen 0:89d173001e82 39 const int ORDER_;
MikamiUitOpen 0:89d173001e82 40
MikamiUitOpen 0:89d173001e82 41 Array<Complex> sP_; // s 平面上の極
MikamiUitOpen 0:89d173001e82 42 Array<Complex> zP_; // z 平面上の極
MikamiUitOpen 0:89d173001e82 43 Array<Biquad::Coefs> ck_; // Biquad構造の部分の係数
MikamiUitOpen 0:89d173001e82 44 float gain_; // 利得定数
MikamiUitOpen 0:89d173001e82 45
MikamiUitOpen 0:89d173001e82 46 void Butterworth();
MikamiUitOpen 0:89d173001e82 47 void Bilinear(float fc);
MikamiUitOpen 0:89d173001e82 48 void ToCascade(Type pb);
MikamiUitOpen 0:89d173001e82 49 void GetGain(Type pb);
MikamiUitOpen 0:89d173001e82 50 void GetCoefs(Biquad::Coefs c[], float& gain);
MikamiUitOpen 0:89d173001e82 51 };
MikamiUitOpen 0:89d173001e82 52 }
MikamiUitOpen 0:89d173001e82 53 #endif // BILINEAR_BUTTERWORTH_HPP