Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: F746_GUI F746_SAI_IO FrequencyResponseDrawer SD_PlayerSkeleton UIT_FFT_Real
MyGraphicEqualizer/GrEqParamsCalculator.hpp@2:fcba17e3d573, 2016-09-26 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Mon Sep 26 07:07:05 2016 +0000
- Revision:
- 2:fcba17e3d573
- Parent:
- 0:224dccbc4edd
3
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| MikamiUitOpen | 0:224dccbc4edd | 1 | //------------------------------------------------------------------------------ |
| MikamiUitOpen | 0:224dccbc4edd | 2 | // Parameters calculator class of buquad unit for graphic equalizer |
| MikamiUitOpen | 0:224dccbc4edd | 3 | // グラフィックイコライザで使う biquad フィルタの係数を計算するクラス |
| MikamiUitOpen | 0:224dccbc4edd | 4 | // |
| MikamiUitOpen | 0:224dccbc4edd | 5 | // 2016/05/09, Copyright (c) 2016 MIKAMI, Naoki |
| MikamiUitOpen | 0:224dccbc4edd | 6 | //------------------------------------------------------------------------------ |
| MikamiUitOpen | 0:224dccbc4edd | 7 | |
| MikamiUitOpen | 0:224dccbc4edd | 8 | #ifndef GRAPHIC_EQALIZER_PARAMETER_CALCULATOR_HPP |
| MikamiUitOpen | 0:224dccbc4edd | 9 | #define GRAPHIC_EQALIZER_PARAMETER_CALCULATOR_HPP |
| MikamiUitOpen | 0:224dccbc4edd | 10 | |
| MikamiUitOpen | 0:224dccbc4edd | 11 | #include "mbed.h" |
| MikamiUitOpen | 0:224dccbc4edd | 12 | #include "BiquadGrEq.hpp" |
| MikamiUitOpen | 0:224dccbc4edd | 13 | |
| MikamiUitOpen | 0:224dccbc4edd | 14 | namespace Mikami |
| MikamiUitOpen | 0:224dccbc4edd | 15 | { |
| MikamiUitOpen | 0:224dccbc4edd | 16 | class GrEqParams |
| MikamiUitOpen | 0:224dccbc4edd | 17 | { |
| MikamiUitOpen | 0:224dccbc4edd | 18 | public: |
| MikamiUitOpen | 0:224dccbc4edd | 19 | // Constructor |
| MikamiUitOpen | 0:224dccbc4edd | 20 | GrEqParams(int bands, float fs) : BANDS_(bands), FS_(fs) {} |
| MikamiUitOpen | 0:224dccbc4edd | 21 | |
| MikamiUitOpen | 0:224dccbc4edd | 22 | // 係数を計算する |
| MikamiUitOpen | 2:fcba17e3d573 | 23 | // gDb : 利得(dB単位) |
| MikamiUitOpen | 0:224dccbc4edd | 24 | BiquadGrEq::Coefs Execute(int band, float f0, float gDb, float qVal) |
| MikamiUitOpen | 0:224dccbc4edd | 25 | { |
| MikamiUitOpen | 0:224dccbc4edd | 26 | const float PI = 3.1415926536f; |
| MikamiUitOpen | 0:224dccbc4edd | 27 | BiquadGrEq::Coefs coefs; |
| MikamiUitOpen | 0:224dccbc4edd | 28 | |
| MikamiUitOpen | 0:224dccbc4edd | 29 | float gSqrt = sqrtf(powf(10, gDb/20.0f)); |
| MikamiUitOpen | 0:224dccbc4edd | 30 | float w0 = 2.0f*PI*f0/FS_; |
| MikamiUitOpen | 0:224dccbc4edd | 31 | |
| MikamiUitOpen | 2:fcba17e3d573 | 32 | if ( (band != 0) && (band != BANDS_-1) ) // ピーキングフィルタ |
| MikamiUitOpen | 0:224dccbc4edd | 33 | { |
| MikamiUitOpen | 0:224dccbc4edd | 34 | float alpha = sinf(w0)/(2.0f*qVal); |
| MikamiUitOpen | 2:fcba17e3d573 | 35 | float a00 = 1.0f + alpha/gSqrt; |
| MikamiUitOpen | 2:fcba17e3d573 | 36 | coefs.a1 = 2.0f*cosf(w0)/a00; |
| MikamiUitOpen | 2:fcba17e3d573 | 37 | coefs.a2 = -(1.0f - alpha/gSqrt)/a00; |
| MikamiUitOpen | 2:fcba17e3d573 | 38 | coefs.b0 = (1.0f + alpha*gSqrt)/a00; |
| MikamiUitOpen | 0:224dccbc4edd | 39 | coefs.b1 = -coefs.a1; |
| MikamiUitOpen | 2:fcba17e3d573 | 40 | coefs.b2 = (1.0f - alpha*gSqrt)/a00; |
| MikamiUitOpen | 0:224dccbc4edd | 41 | } |
| MikamiUitOpen | 2:fcba17e3d573 | 42 | else // シェルビングフィルタ |
| MikamiUitOpen | 2:fcba17e3d573 | 43 | { // Q は固定 |
| MikamiUitOpen | 0:224dccbc4edd | 44 | w0 = (band == 0) ? w0*1.414f : w0/1.414f; |
| MikamiUitOpen | 0:224dccbc4edd | 45 | float alpha = sinf(w0)/sqrtf(2.0f); // Q = 1/sqrt(2) |
| MikamiUitOpen | 0:224dccbc4edd | 46 | float g_a = sqrtf(gSqrt); |
| MikamiUitOpen | 0:224dccbc4edd | 47 | float cosW0 = cosf(w0); |
| MikamiUitOpen | 0:224dccbc4edd | 48 | float gSqrtP1 = gSqrt+1.0f; |
| MikamiUitOpen | 0:224dccbc4edd | 49 | float gSqrtM1 = gSqrt-1.0f; |
| MikamiUitOpen | 0:224dccbc4edd | 50 | if (band == 0) |
| MikamiUitOpen | 0:224dccbc4edd | 51 | { |
| MikamiUitOpen | 2:fcba17e3d573 | 52 | float a00 = gSqrtP1 + gSqrtM1*cosW0 |
| MikamiUitOpen | 0:224dccbc4edd | 53 | + 2.0f*g_a*alpha; |
| MikamiUitOpen | 2:fcba17e3d573 | 54 | coefs.a1 = 2.0f*(gSqrtM1 + gSqrtP1*cosW0)/a00; |
| MikamiUitOpen | 0:224dccbc4edd | 55 | coefs.a2 = -(gSqrtP1 + gSqrtM1*cosW0 |
| MikamiUitOpen | 2:fcba17e3d573 | 56 | - 2.0f*g_a*alpha)/a00; |
| MikamiUitOpen | 0:224dccbc4edd | 57 | coefs.b0 = gSqrt*(gSqrtP1 - gSqrtM1*cosW0 |
| MikamiUitOpen | 2:fcba17e3d573 | 58 | + 2.0f*g_a*alpha)/a00; |
| MikamiUitOpen | 0:224dccbc4edd | 59 | coefs.b1 = 2.0f*gSqrt*(gSqrtM1 |
| MikamiUitOpen | 2:fcba17e3d573 | 60 | - gSqrtP1*cosW0)/a00; |
| MikamiUitOpen | 0:224dccbc4edd | 61 | coefs.b2 = gSqrt*(gSqrtP1 - gSqrtM1*cosW0 |
| MikamiUitOpen | 2:fcba17e3d573 | 62 | - 2.0f*g_a*alpha)/a00; |
| MikamiUitOpen | 0:224dccbc4edd | 63 | } |
| MikamiUitOpen | 0:224dccbc4edd | 64 | else |
| MikamiUitOpen | 0:224dccbc4edd | 65 | { |
| MikamiUitOpen | 2:fcba17e3d573 | 66 | float a00 = gSqrtP1 - gSqrtM1*cosW0 |
| MikamiUitOpen | 0:224dccbc4edd | 67 | + 2.0f*g_a*alpha; |
| MikamiUitOpen | 2:fcba17e3d573 | 68 | coefs.a1 = -2.0f*(gSqrtM1 - gSqrtP1*cosW0)/a00; |
| MikamiUitOpen | 0:224dccbc4edd | 69 | coefs.a2 = -(gSqrtP1 - gSqrtM1*cosW0 |
| MikamiUitOpen | 2:fcba17e3d573 | 70 | - 2.0f*g_a*alpha)/a00; |
| MikamiUitOpen | 0:224dccbc4edd | 71 | coefs.b0 = gSqrt*(gSqrtP1 + gSqrtM1*cosW0 |
| MikamiUitOpen | 2:fcba17e3d573 | 72 | + 2.0f*g_a*alpha)/a00; |
| MikamiUitOpen | 2:fcba17e3d573 | 73 | coefs.b1 = -2.0f*gSqrt*(gSqrtM1 + gSqrtP1*cosW0)/a00; |
| MikamiUitOpen | 0:224dccbc4edd | 74 | coefs.b2 = gSqrt*(gSqrtP1 + gSqrtM1*cosW0 |
| MikamiUitOpen | 2:fcba17e3d573 | 75 | - 2.0f*g_a*alpha)/a00; |
| MikamiUitOpen | 0:224dccbc4edd | 76 | } |
| MikamiUitOpen | 0:224dccbc4edd | 77 | } |
| MikamiUitOpen | 0:224dccbc4edd | 78 | |
| MikamiUitOpen | 0:224dccbc4edd | 79 | return coefs; |
| MikamiUitOpen | 0:224dccbc4edd | 80 | } |
| MikamiUitOpen | 0:224dccbc4edd | 81 | |
| MikamiUitOpen | 0:224dccbc4edd | 82 | private: |
| MikamiUitOpen | 0:224dccbc4edd | 83 | const int BANDS_; |
| MikamiUitOpen | 0:224dccbc4edd | 84 | const float FS_; |
| MikamiUitOpen | 0:224dccbc4edd | 85 | }; |
| MikamiUitOpen | 0:224dccbc4edd | 86 | } |
| MikamiUitOpen | 0:224dccbc4edd | 87 | #endif // GRAPHIC_EQALIZER_PARAMETER_CALCULATOR_HPP |