![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Demo program of digital signal processing: Variable LPF/HPF, Vocal canceller, Pitch shifter, Reverbrator. ディジタル信号処理のデモプログラム. 遮断周波数可変 LPF/HPF,ボーカルキャンセラ,ピッチシフタ,残響生成器.
Dependencies: Array_Matrix F446_AD_DA UIT_AQM1602 mbed
Diff: SignalProcessing/WeaverModulator.hpp
- Revision:
- 5:503bd366fd73
- Parent:
- 0:fa74b1130cc3
--- a/SignalProcessing/WeaverModulator.hpp Mon Jan 30 13:58:11 2017 +0000 +++ b/SignalProcessing/WeaverModulator.hpp Tue Jan 31 12:52:35 2017 +0000 @@ -4,7 +4,7 @@ // 帯域中央の周波数: 5.0 kHz // 低域通過フィルタの遮断周波数: 4.9 kHz -// 2017/01/28, Copyright (c) 2017 MIKAMI, Naoki +// 2017/01/31, Copyright (c) 2017 MIKAMI, Naoki //-------------------------------------------------------------- #ifndef WEAVER_MODULATOR_HPP @@ -22,7 +22,7 @@ : lpfC_(WEAVER_ORDER_, weaver_g0Lpf_, weaver_ck_), lpfS_(WEAVER_ORDER_, weaver_g0Lpf_, weaver_ck_), dcCut_(weaver_c1_), - FS_(fS), PI2_(3.1415926536f*2), F_B_(5000) + FS_(fS), F_B_(5000) { lpfC_.Clear(); lpfS_.Clear(); @@ -32,22 +32,22 @@ phi1_ = 0; phi2_ = 0; } - + virtual float Execute(float xn1, float xn2) { float xn = (xn1 + xn2)*0.5f; xn = dcCut_.Execute(weaver_g0_*xn); // DC 成分除去 - + float mpyC = xn*cosf(phi1_); float mpyS = xn*sinf(phi1_); - + // LPF float mpyC_Lpf = lpfC_.Execute(mpyC); float mpyS_Lpf = lpfS_.Execute(mpyS); - + float mpyC_C = mpyC_Lpf*cosf(phi2_); float mpyS_S = mpyS_Lpf*sinf(phi2_); - + float yn = 2.0f*(mpyC_C + mpyS_S); phi1_ = phi1_ + dPhi1_; @@ -55,24 +55,24 @@ phi2_ = phi2_ + dPhi2_; if (phi2_ > PI2_) phi2_ = phi2_ - PI2_; - return yn; + return yn; } - + // 周波数のシフト量を設定 void SetFrequensy(float fShift) { dPhi2_ = (fShift + F_B_)*PI2_/FS_; } private: - // Weaver 変調器で使う低域通過フィルタ + // Weaver 変調器で使う低域通過フィルタ IirCascade lpfC_; IirCascade lpfS_; // 直流分除去フィルタ Biquad dcCut_; - + + static const float PI2_ = 3.1415926536f*2; const float FS_; - const float PI2_; const float F_B_; // 中心周波数 - + float phi1_, dPhi1_; float phi2_, dPhi2_; };