Integrated program of 4 different kinds of application programs for processing sound signal. 4種類のサウンド信号処理を統合したプログラム.

Dependencies:   F746_GUI F746_SAI_IO FrequencyResponseDrawer SD_PlayerSkeleton UIT_FFT_Real

Committer:
MikamiUitOpen
Date:
Thu Apr 27 23:55:53 2017 +0000
Revision:
16:d60e5187fd31
Parent:
15:fac50dd1de44
17

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 15:fac50dd1de44 1 //--------------------------------------------------------------
MikamiUitOpen 15:fac50dd1de44 2 // Weaver 変調器
MikamiUitOpen 15:fac50dd1de44 3 // 入力信号の帯域: 0.1 kHz ---- 6.9 kHz
MikamiUitOpen 15:fac50dd1de44 4 // 帯域中央の周波数: 3.5 kHz
MikamiUitOpen 15:fac50dd1de44 5 // 低域通過フィルタの遮断周波数: 3.4 kHz
MikamiUitOpen 15:fac50dd1de44 6 //
MikamiUitOpen 15:fac50dd1de44 7 // 2017/04/10, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 15:fac50dd1de44 8 //--------------------------------------------------------------
MikamiUitOpen 15:fac50dd1de44 9
MikamiUitOpen 15:fac50dd1de44 10 #ifndef WEAVER_MODULATOR_HPP
MikamiUitOpen 15:fac50dd1de44 11 #define WEAVER_MODULATOR_HPP
MikamiUitOpen 15:fac50dd1de44 12
MikamiUitOpen 15:fac50dd1de44 13 #include "ProcessingBase.hpp"
MikamiUitOpen 15:fac50dd1de44 14 #include "IIR_Cascade.hpp"
MikamiUitOpen 15:fac50dd1de44 15 #include "Coefficients.hpp" // Coeffisients of BPF and LPF
MikamiUitOpen 15:fac50dd1de44 16
MikamiUitOpen 15:fac50dd1de44 17 namespace Mikami
MikamiUitOpen 15:fac50dd1de44 18 {
MikamiUitOpen 15:fac50dd1de44 19 class WeaverMod : public ProcessingBase
MikamiUitOpen 15:fac50dd1de44 20 {
MikamiUitOpen 15:fac50dd1de44 21 public:
MikamiUitOpen 15:fac50dd1de44 22 WeaverMod(float fS, float fShift = 0)
MikamiUitOpen 15:fac50dd1de44 23 : bpf_(ORDER_BPF_, ckBpf_, g0Bpf_),
MikamiUitOpen 15:fac50dd1de44 24 lpfC_(ORDER_, ck_, g0Lpf_), lpfS_(ORDER_, ck_, g0Lpf_),
MikamiUitOpen 15:fac50dd1de44 25 FS_(fS), PI2_(3.1415926536f*2), F_B0_(3500),
MikamiUitOpen 15:fac50dd1de44 26 phi1_(0), dPhi1_(F_B0_*PI2_/FS_), phi2_(0)
MikamiUitOpen 15:fac50dd1de44 27 { SetFrequency(fShift); }
MikamiUitOpen 15:fac50dd1de44 28
MikamiUitOpen 15:fac50dd1de44 29 virtual float Execute(float xn)
MikamiUitOpen 15:fac50dd1de44 30 {
MikamiUitOpen 15:fac50dd1de44 31 float un = bpf_.Execute(xn); // 帯域通過フィルタ(BPF)
MikamiUitOpen 15:fac50dd1de44 32
MikamiUitOpen 15:fac50dd1de44 33 float mpyC = un*cosf(phi1_);
MikamiUitOpen 15:fac50dd1de44 34 float mpyS = un*sinf(phi1_);
MikamiUitOpen 15:fac50dd1de44 35
MikamiUitOpen 15:fac50dd1de44 36 // 低域通過フィルタ(LPF)
MikamiUitOpen 15:fac50dd1de44 37 float mpyC_Lpf = lpfC_.Execute(mpyC);
MikamiUitOpen 15:fac50dd1de44 38 float mpyS_Lpf = lpfS_.Execute(mpyS);
MikamiUitOpen 15:fac50dd1de44 39
MikamiUitOpen 15:fac50dd1de44 40 float mpyC_C = mpyC_Lpf*cosf(phi2_);
MikamiUitOpen 15:fac50dd1de44 41 float mpyS_S = mpyS_Lpf*sinf(phi2_);
MikamiUitOpen 15:fac50dd1de44 42
MikamiUitOpen 15:fac50dd1de44 43 float yn = 2.0f*(mpyC_C + mpyS_S);
MikamiUitOpen 15:fac50dd1de44 44
MikamiUitOpen 15:fac50dd1de44 45 phi1_ = phi1_ + dPhi1_;
MikamiUitOpen 15:fac50dd1de44 46 if (phi1_ > PI2_) phi1_ = phi1_ - PI2_;
MikamiUitOpen 15:fac50dd1de44 47 phi2_ = phi2_ + dPhi2_;
MikamiUitOpen 15:fac50dd1de44 48 if (phi2_ > PI2_) phi2_ = phi2_ - PI2_;
MikamiUitOpen 15:fac50dd1de44 49
MikamiUitOpen 15:fac50dd1de44 50 return yn;
MikamiUitOpen 15:fac50dd1de44 51 }
MikamiUitOpen 15:fac50dd1de44 52
MikamiUitOpen 15:fac50dd1de44 53 // 周波数のシフト量を設定
MikamiUitOpen 15:fac50dd1de44 54 void SetFrequency(float fShift)
MikamiUitOpen 15:fac50dd1de44 55 { dPhi2_ = (fShift + F_B0_)*PI2_/FS_; }
MikamiUitOpen 15:fac50dd1de44 56
MikamiUitOpen 15:fac50dd1de44 57 private:
MikamiUitOpen 15:fac50dd1de44 58 // 帯域通過フィルタ
MikamiUitOpen 15:fac50dd1de44 59 IIR_Cascade bpf_;
MikamiUitOpen 15:fac50dd1de44 60 // Weaver 変調器で使う低域通過フィルタ
MikamiUitOpen 15:fac50dd1de44 61 IIR_Cascade lpfC_, lpfS_;
MikamiUitOpen 15:fac50dd1de44 62
MikamiUitOpen 15:fac50dd1de44 63 const float FS_;
MikamiUitOpen 15:fac50dd1de44 64 const float PI2_;
MikamiUitOpen 15:fac50dd1de44 65 const float F_B0_; // 中心周波数
MikamiUitOpen 15:fac50dd1de44 66
MikamiUitOpen 15:fac50dd1de44 67 float phi1_, dPhi1_;
MikamiUitOpen 15:fac50dd1de44 68 float phi2_, dPhi2_;
MikamiUitOpen 15:fac50dd1de44 69
MikamiUitOpen 15:fac50dd1de44 70 // disallow copy constructor and assignment operator
MikamiUitOpen 15:fac50dd1de44 71 WeaverMod(const WeaverMod& );
MikamiUitOpen 15:fac50dd1de44 72 WeaverMod& operator=(const WeaverMod& );
MikamiUitOpen 15:fac50dd1de44 73 };
MikamiUitOpen 15:fac50dd1de44 74 }
MikamiUitOpen 15:fac50dd1de44 75 #endif // WEAVER_MODULATOR_HPP