CQ出版社インターフェース誌の2017年10月号で解説している二相発振器のプログラム

Dependencies:   mbed

Committer:
MikamiUitOpen
Date:
Wed Aug 02 11:50:17 2017 +0000
Revision:
0:97d46bd73383
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:97d46bd73383 1 //--------------------------------------------------------------
MikamiUitOpen 0:97d46bd73383 2 // IIR フィルタを利用する二相発振器のクラス
MikamiUitOpen 0:97d46bd73383 3 //
MikamiUitOpen 0:97d46bd73383 4 // 2017/03/02, Copyright (c) 2017 MIKAMI, Naoki
MikamiUitOpen 0:97d46bd73383 5 //--------------------------------------------------------------
MikamiUitOpen 0:97d46bd73383 6
MikamiUitOpen 0:97d46bd73383 7 #include "mbed.h"
MikamiUitOpen 0:97d46bd73383 8 #include "FixedFloat.hpp"
MikamiUitOpen 0:97d46bd73383 9
MikamiUitOpen 0:97d46bd73383 10 #ifndef QUAD_PHASE_OSC_IIR_FIXED_HPP
MikamiUitOpen 0:97d46bd73383 11 #define QUAD_PHASE_OSC_IIR_FIXED_HPP
MikamiUitOpen 0:97d46bd73383 12
MikamiUitOpen 0:97d46bd73383 13 class QuadOscIIR
MikamiUitOpen 0:97d46bd73383 14 {
MikamiUitOpen 0:97d46bd73383 15 public:
MikamiUitOpen 0:97d46bd73383 16 // Constructor
MikamiUitOpen 0:97d46bd73383 17 QuadOscIIR(float f0, float ts)
MikamiUitOpen 0:97d46bd73383 18 : A1_(ToFixed14(2.0f*cosf(6.283185f*f0*ts*1.0E-6f))),
MikamiUitOpen 0:97d46bd73383 19 B1S_(ToFixed14(sinf(6.283185f*f0*ts*1.0E-6f))),
MikamiUitOpen 0:97d46bd73383 20 B1C_(ToFixed14(-cosf(6.283185f*f0*ts*1.0E-6f))),
MikamiUitOpen 0:97d46bd73383 21 un1_(ToFixed14(1.0f)), un2_(0) {}
MikamiUitOpen 0:97d46bd73383 22
MikamiUitOpen 0:97d46bd73383 23 void Generate(int16_t &sinX, int16_t &cosX)
MikamiUitOpen 0:97d46bd73383 24 {
MikamiUitOpen 0:97d46bd73383 25 // u[n] = a1*u[n-1] - u[n-2]
MikamiUitOpen 0:97d46bd73383 26 int32_t un = Round14(A1_*un1_) - un2_;
MikamiUitOpen 0:97d46bd73383 27
MikamiUitOpen 0:97d46bd73383 28 sinX = Round14(B1S_*un1_);
MikamiUitOpen 0:97d46bd73383 29 cosX = un + Round14(B1C_*un1_);
MikamiUitOpen 0:97d46bd73383 30
MikamiUitOpen 0:97d46bd73383 31 un2_ = un1_; // u[n-2] ← u[n-1]
MikamiUitOpen 0:97d46bd73383 32 un1_ = un; // u[n-1] ← u[n]
MikamiUitOpen 0:97d46bd73383 33 }
MikamiUitOpen 0:97d46bd73383 34 private:
MikamiUitOpen 0:97d46bd73383 35 const int16_t A1_, B1S_, B1C_;
MikamiUitOpen 0:97d46bd73383 36 int32_t un1_, un2_;
MikamiUitOpen 0:97d46bd73383 37 };
MikamiUitOpen 0:97d46bd73383 38 #endif // QUAD_PHASE_OSC_IIR_FIXED_HPP