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 // 三角関数の加法定理を使う二相発振器のクラス
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_ADDTHEOREM_FIXED_HPP
MikamiUitOpen 0:97d46bd73383 11 #define QUAD_PHASE_OSC_ADDTHEOREM_FIXED_HPP
MikamiUitOpen 0:97d46bd73383 12
MikamiUitOpen 0:97d46bd73383 13 class QuadOscAddTheorem
MikamiUitOpen 0:97d46bd73383 14 {
MikamiUitOpen 0:97d46bd73383 15 public:
MikamiUitOpen 0:97d46bd73383 16 // Constructor
MikamiUitOpen 0:97d46bd73383 17 QuadOscAddTheorem(float f0, float ts)
MikamiUitOpen 0:97d46bd73383 18 : A1_(ToFixed14(cosf(6.283185f*f0*ts*1.0E-6f))),
MikamiUitOpen 0:97d46bd73383 19 B1_(ToFixed14(sinf(6.283185f*f0*ts*1.0E-6f))),
MikamiUitOpen 0:97d46bd73383 20 xn1_(ToFixed14(1.0f)), yn1_(0) {}
MikamiUitOpen 0:97d46bd73383 21
MikamiUitOpen 0:97d46bd73383 22 void Generate(int16_t &yn, int16_t &xn)
MikamiUitOpen 0:97d46bd73383 23 {
MikamiUitOpen 0:97d46bd73383 24 yn = Round14( A1_*yn1_ + B1_*xn1_); // sin
MikamiUitOpen 0:97d46bd73383 25 xn = Round14(-B1_*yn1_ + A1_*xn1_); // cos
MikamiUitOpen 0:97d46bd73383 26
MikamiUitOpen 0:97d46bd73383 27 // 振幅の補正
MikamiUitOpen 0:97d46bd73383 28 int16_t c1 = Q14_1p5 -
MikamiUitOpen 0:97d46bd73383 29 ((Round14(xn*xn + yn*yn) + 1) >> 1);
MikamiUitOpen 0:97d46bd73383 30 xn = Round14(c1*xn);
MikamiUitOpen 0:97d46bd73383 31 yn = Round14(c1*yn);
MikamiUitOpen 0:97d46bd73383 32
MikamiUitOpen 0:97d46bd73383 33 xn1_ = xn;
MikamiUitOpen 0:97d46bd73383 34 yn1_ = yn;
MikamiUitOpen 0:97d46bd73383 35 }
MikamiUitOpen 0:97d46bd73383 36
MikamiUitOpen 0:97d46bd73383 37 private:
MikamiUitOpen 0:97d46bd73383 38 const int16_t A1_, B1_;
MikamiUitOpen 0:97d46bd73383 39 static const int16_t Q14_1p5 = 0x6000; // 1.5Q14
MikamiUitOpen 0:97d46bd73383 40 int16_t xn1_, yn1_;
MikamiUitOpen 0:97d46bd73383 41 };
MikamiUitOpen 0:97d46bd73383 42 #endif // QUAD_PHASE_OSC_ADDTHEOREM_FIXED_HPP