revised version of F746_SD_GraphicEqualizer
Dependencies: BSP_DISCO_F746NG F746_GUI F746_SAI_IO FrequencyResponseDrawer LCD_DISCO_F746NG SDFileSystem_Warning_Fixed TS_DISCO_F746NG mbed
Fork of F746_SD_GraphicEqualizer by
Diff: MyClasses_Functions/GrEqParamsCalculator.hpp
- Revision:
- 0:e953eb392151
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MyClasses_Functions/GrEqParamsCalculator.hpp Wed Apr 27 13:56:39 2016 +0000 @@ -0,0 +1,44 @@ +//------------------------------------------------------------------------------ +// Parameters calculator class of buquad unit for graphic equalizer +// グラフィックイコライザで使う biquad フィルタの係数を計算するクラス +// +// 2016/04/27, Copyright (c) 2016 MIKAMI, Naoki +//------------------------------------------------------------------------------ + +#ifndef GRAPHIC_EQALIZER_PARAMETER_CALCULATOR_HPP +#define GRAPHIC_EQALIZER_PARAMETER_CALCULATOR_HPP + +#include "mbed.h" +#include "BiquadGrEq.hpp" + +namespace Mikami +{ + class GrEqParamsCalculator + { + public: + // Constructor + GrEqParamsCalculator(float fs) : FS_(fs) {} + + // 係数を計算する + BiquadGrEq::Coefs Execute(float f0, float gDb, float qVal) + { + const float PI = 3.1415926536f; + BiquadGrEq::Coefs coefs; + + float g_sqrt = sqrtf(powf(10, gDb/20.0f)); + float w0 = 2.0f*PI*f0/FS_; + float alpha = sinf(w0)/(2.0f*qVal); + float a0 = 1.0f + alpha/g_sqrt; + coefs.a1 = 2.0f*cosf(w0)/a0; + coefs.a2 = -(1.0f - alpha/g_sqrt)/a0; + coefs.b0 = (1.0f + alpha*g_sqrt)/a0; + coefs.b1 = -coefs.a1; + coefs.b2 = (1.0f - alpha*g_sqrt)/a0; + return coefs; + } + + private: + const float FS_; + }; +} +#endif // GRAPHIC_EQALIZER_PARAMETER_CALCULATOR_HPP