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
WeaverModulator.hpp
00001 //-------------------------------------------------------------- 00002 // Weaver 変調器 00003 // 入力信号の帯域: 0.1 kHz ---- 6.9 kHz 00004 // 帯域中央の周波数: 3.5 kHz 00005 // 低域通過フィルタの遮断周波数: 3.4 kHz 00006 // 00007 // 2017/04/10, Copyright (c) 2016 MIKAMI, Naoki 00008 //-------------------------------------------------------------- 00009 00010 #ifndef WEAVER_MODULATOR_HPP 00011 #define WEAVER_MODULATOR_HPP 00012 00013 #include "ProcessingBase.hpp" 00014 #include "IIR_Cascade.hpp" 00015 #include "Coefficients.hpp" // Coeffisients of BPF and LPF 00016 00017 namespace Mikami 00018 { 00019 class WeaverMod : public ProcessingBase 00020 { 00021 public: 00022 WeaverMod(float fS, float fShift = 0) 00023 : bpf_(ORDER_BPF_, ckBpf_, g0Bpf_), 00024 lpfC_(ORDER_, ck_, g0Lpf_), lpfS_(ORDER_, ck_, g0Lpf_), 00025 FS_(fS), PI2_(3.1415926536f*2), F_B0_(3500), 00026 phi1_(0), dPhi1_(F_B0_*PI2_/FS_), phi2_(0) 00027 { SetFrequency(fShift); } 00028 00029 virtual float Execute(float xn) 00030 { 00031 float un = bpf_.Execute(xn); // 帯域通過フィルタ(BPF) 00032 00033 float mpyC = un*cosf(phi1_); 00034 float mpyS = un*sinf(phi1_); 00035 00036 // 低域通過フィルタ(LPF) 00037 float mpyC_Lpf = lpfC_.Execute(mpyC); 00038 float mpyS_Lpf = lpfS_.Execute(mpyS); 00039 00040 float mpyC_C = mpyC_Lpf*cosf(phi2_); 00041 float mpyS_S = mpyS_Lpf*sinf(phi2_); 00042 00043 float yn = 2.0f*(mpyC_C + mpyS_S); 00044 00045 phi1_ = phi1_ + dPhi1_; 00046 if (phi1_ > PI2_) phi1_ = phi1_ - PI2_; 00047 phi2_ = phi2_ + dPhi2_; 00048 if (phi2_ > PI2_) phi2_ = phi2_ - PI2_; 00049 00050 return yn; 00051 } 00052 00053 // 周波数のシフト量を設定 00054 void SetFrequency(float fShift) 00055 { dPhi2_ = (fShift + F_B0_)*PI2_/FS_; } 00056 00057 private: 00058 // 帯域通過フィルタ 00059 IIR_Cascade bpf_; 00060 // Weaver 変調器で使う低域通過フィルタ 00061 IIR_Cascade lpfC_, lpfS_; 00062 00063 const float FS_; 00064 const float PI2_; 00065 const float F_B0_; // 中心周波数 00066 00067 float phi1_, dPhi1_; 00068 float phi2_, dPhi2_; 00069 00070 // disallow copy constructor and assignment operator 00071 WeaverMod(const WeaverMod& ); 00072 WeaverMod& operator=(const WeaverMod& ); 00073 }; 00074 } 00075 #endif // WEAVER_MODULATOR_HPP
Generated on Tue Jul 12 2022 21:58:55 by
1.7.2