The experiment using this program is introduced on "Interface" No.3, CQ publishing Co.,Ltd, 2015. 本プログラムを使った実験は,CQ出版社のインターフェース 2015年3月号で紹介しています.

Dependencies:   DSProcessingIO mbed

Committer:
CQpub0Mikami
Date:
Sat Dec 27 07:01:43 2014 +0000
Revision:
2:0b15cd2b79e3
Parent:
0:a5a171eda3f8
3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CQpub0Mikami 0:a5a171eda3f8 1 //--------------------------------------------------------------
CQpub0Mikami 0:a5a171eda3f8 2 // Two phase sin generator class
CQpub0Mikami 0:a5a171eda3f8 3 // Copyright (c) 2014 MIKAMI, Naoki, 2014/06/23
CQpub0Mikami 0:a5a171eda3f8 4 //--------------------------------------------------------------
CQpub0Mikami 0:a5a171eda3f8 5
CQpub0Mikami 0:a5a171eda3f8 6 #ifndef TWO_PHASE_GENERATOR_HPP
CQpub0Mikami 0:a5a171eda3f8 7 #define TWO_PHASE_GENERATOR_HPP
CQpub0Mikami 0:a5a171eda3f8 8
CQpub0Mikami 0:a5a171eda3f8 9 #include "mbed.h"
CQpub0Mikami 0:a5a171eda3f8 10
CQpub0Mikami 0:a5a171eda3f8 11 namespace Mikami
CQpub0Mikami 0:a5a171eda3f8 12 {
CQpub0Mikami 0:a5a171eda3f8 13 class TwoPhaseGenerator
CQpub0Mikami 0:a5a171eda3f8 14 {
CQpub0Mikami 0:a5a171eda3f8 15 public:
CQpub0Mikami 0:a5a171eda3f8 16 // Constructor
CQpub0Mikami 0:a5a171eda3f8 17 TwoPhaseGenerator(float f0, float fs)
CQpub0Mikami 0:a5a171eda3f8 18 : a1_(cosf(6.283185f*f0/fs)),
CQpub0Mikami 0:a5a171eda3f8 19 b1_(sinf(6.283185f*f0/fs)),
CQpub0Mikami 0:a5a171eda3f8 20 xn1_(1.0f), yn1_(0.0f) {}
CQpub0Mikami 0:a5a171eda3f8 21
CQpub0Mikami 0:a5a171eda3f8 22 // -1.0f <= x1, x2 <= 1.0f
CQpub0Mikami 0:a5a171eda3f8 23 void Generate(float& xn, float& yn)
CQpub0Mikami 0:a5a171eda3f8 24 {
CQpub0Mikami 0:a5a171eda3f8 25 yn = a1_*yn1_ + b1_*xn1_; // sin
CQpub0Mikami 0:a5a171eda3f8 26 xn = -b1_*yn1_ + a1_*xn1_; // cos
CQpub0Mikami 0:a5a171eda3f8 27
CQpub0Mikami 0:a5a171eda3f8 28 float c1 = 1.5f - 0.5f*(xn*xn + yn*yn);
CQpub0Mikami 0:a5a171eda3f8 29
CQpub0Mikami 0:a5a171eda3f8 30 xn1_ = c1*xn;
CQpub0Mikami 0:a5a171eda3f8 31 yn1_ = c1*yn;
CQpub0Mikami 0:a5a171eda3f8 32 }
CQpub0Mikami 0:a5a171eda3f8 33
CQpub0Mikami 0:a5a171eda3f8 34 private:
CQpub0Mikami 0:a5a171eda3f8 35 const float a1_, b1_;
CQpub0Mikami 0:a5a171eda3f8 36 float xn1_, yn1_;
CQpub0Mikami 0:a5a171eda3f8 37
CQpub0Mikami 0:a5a171eda3f8 38 TwoPhaseGenerator(const TwoPhaseGenerator&);
CQpub0Mikami 0:a5a171eda3f8 39 TwoPhaseGenerator& operator=(const TwoPhaseGenerator&);
CQpub0Mikami 0:a5a171eda3f8 40 };
CQpub0Mikami 0:a5a171eda3f8 41 }
CQpub0Mikami 0:a5a171eda3f8 42 #endif // TWO_PHASE_GENERATOR_HPP