不韋 呂 / Mbed 2 deprecated DSP_GraphicEqualizerB

Dependencies:   mbed SerialTxRxIntr DSP_MultirateLinearphase

Committer:
MikamiUitOpen
Date:
Fri Feb 25 02:18:16 2022 +0000
Revision:
0:b3c94b253ae5
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:b3c94b253ae5 1 //--------------------------------------------------------------
MikamiUitOpen 0:b3c94b253ae5 2 // グラフィックイコライザのクラス(ヘッダ)
MikamiUitOpen 0:b3c94b253ae5 3 // フィルらの係数を設定しない場合は,出力は出ない
MikamiUitOpen 0:b3c94b253ae5 4 //
MikamiUitOpen 0:b3c94b253ae5 5 // 2022/02/19, Copyright (c) 2022 MIKAMI, Naoki
MikamiUitOpen 0:b3c94b253ae5 6 //--------------------------------------------------------------
MikamiUitOpen 0:b3c94b253ae5 7
MikamiUitOpen 0:b3c94b253ae5 8 #include "Array.hpp"
MikamiUitOpen 0:b3c94b253ae5 9 #include "BiquadGrEq.hpp"
MikamiUitOpen 0:b3c94b253ae5 10
MikamiUitOpen 0:b3c94b253ae5 11 #ifndef GRAPHIC_EQALIZER_HPP
MikamiUitOpen 0:b3c94b253ae5 12 #define GRAPHIC_EQALIZER_HPP
MikamiUitOpen 0:b3c94b253ae5 13
MikamiUitOpen 0:b3c94b253ae5 14 namespace Mikami
MikamiUitOpen 0:b3c94b253ae5 15 {
MikamiUitOpen 0:b3c94b253ae5 16 class GrEqualizer
MikamiUitOpen 0:b3c94b253ae5 17 {
MikamiUitOpen 0:b3c94b253ae5 18 public:
MikamiUitOpen 0:b3c94b253ae5 19 // コンストラクタ
MikamiUitOpen 0:b3c94b253ae5 20 GrEqualizer(int bands, float fs, float qVal = 1.0f/sqrtf(2.0f));
MikamiUitOpen 0:b3c94b253ae5 21 // グラフィック・イコライザの実行
MikamiUitOpen 0:b3c94b253ae5 22 float Execute(float xn) { return (this->*fPtr_)((this->*fPtr2_)(xn)); }
MikamiUitOpen 0:b3c94b253ae5 23
MikamiUitOpen 0:b3c94b253ae5 24 // 指定したチャンネルの係数を設定する
MikamiUitOpen 0:b3c94b253ae5 25 void SetCoefficients(int band, BiquadGrEq::Coefs coefs)
MikamiUitOpen 0:b3c94b253ae5 26 { biquad_[band].SetCoefficients(coefs); }
MikamiUitOpen 0:b3c94b253ae5 27
MikamiUitOpen 0:b3c94b253ae5 28 // グラフィック・イコライザの処理を有効にする
MikamiUitOpen 0:b3c94b253ae5 29 void Validate() { fPtr_ = &GrEqualizer::Filtering; }
MikamiUitOpen 0:b3c94b253ae5 30 // グラフィック・イコライザの処理を無効にする
MikamiUitOpen 0:b3c94b253ae5 31 void Invalidate() { fPtr_ = &GrEqualizer::Through; }
MikamiUitOpen 0:b3c94b253ae5 32 // 出力を On にする
MikamiUitOpen 0:b3c94b253ae5 33 void SetOn() { fPtr2_ = &GrEqualizer::On; }
MikamiUitOpen 0:b3c94b253ae5 34 // 出力を Off にする
MikamiUitOpen 0:b3c94b253ae5 35 void SetOff() { fPtr2_ = &GrEqualizer::Off; }
MikamiUitOpen 0:b3c94b253ae5 36
MikamiUitOpen 0:b3c94b253ae5 37 private:
MikamiUitOpen 0:b3c94b253ae5 38 const int BANDS_; // バンドの数
MikamiUitOpen 0:b3c94b253ae5 39 const float Q_VAL_; // Q 値
MikamiUitOpen 0:b3c94b253ae5 40
MikamiUitOpen 0:b3c94b253ae5 41 Array<BiquadGrEq> biquad_;
MikamiUitOpen 0:b3c94b253ae5 42 Array<float> f0_;
MikamiUitOpen 0:b3c94b253ae5 43
MikamiUitOpen 0:b3c94b253ae5 44 float (GrEqualizer::*fPtr_)(float); // イコライザ処理の有無
MikamiUitOpen 0:b3c94b253ae5 45 float (GrEqualizer::*fPtr2_)(float); // 出力の On/Off
MikamiUitOpen 0:b3c94b253ae5 46
MikamiUitOpen 0:b3c94b253ae5 47 float Through(float xn) { return xn; } // そのまま出力
MikamiUitOpen 0:b3c94b253ae5 48 float Filtering(float xn); // フィルタを実行して出力
MikamiUitOpen 0:b3c94b253ae5 49 float On(float xn) { return xn; } // 出力: On
MikamiUitOpen 0:b3c94b253ae5 50 float Off(float xn) { return 0; } // 出力: Off
MikamiUitOpen 0:b3c94b253ae5 51
MikamiUitOpen 0:b3c94b253ae5 52 // コピー・コンストラクタ,代入演算子禁止禁止のため
MikamiUitOpen 0:b3c94b253ae5 53 GrEqualizer(const GrEqualizer&);
MikamiUitOpen 0:b3c94b253ae5 54 GrEqualizer& operator=(const GrEqualizer&);
MikamiUitOpen 0:b3c94b253ae5 55 };
MikamiUitOpen 0:b3c94b253ae5 56 }
MikamiUitOpen 0:b3c94b253ae5 57 #endif // GRAPHIC_EQALIZER_HPP