![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Two-phase sinusoidal wave generator using digital filter for ST Nucleo F401RE.
Diff: TwoPhaseGenerator.hpp
- Revision:
- 0:5b53b74d1fb7
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TwoPhaseGenerator.hpp Thu Oct 23 00:41:02 2014 +0000 @@ -0,0 +1,42 @@ +//-------------------------------------------------------------- +// Two phase sin generator class +// 2014/10/22, Copyright (c) 2014 MIKAMI, Naoki +//-------------------------------------------------------------- + +#ifndef TWO_PHASE_GENERATOR_HPP +#define TWO_PHASE_GENERATOR_HPP + +#include "mbed.h" + +namespace Mikami +{ + class TwoPhaseGenerator + { + public: + // Constructor + TwoPhaseGenerator(float f0, float fs) + : a1_(cosf(6.283185f*f0/fs)), + b1_(sinf(6.283185f*f0/fs)), + xn1_(1.0f), yn1_(0.0f) {} + + // -1.0f <= x1, x2 <= 1.0f + void Generate(float& xn, float& yn) + { + yn = a1_*yn1_ + b1_*xn1_; // sin + xn = -b1_*yn1_ + a1_*xn1_; // cos + + float c1 = 1.5f - 0.5f*(xn*xn + yn*yn); + + xn1_ = c1*xn; + yn1_ = c1*yn; + } + + private: + const float a1_, b1_; + float xn1_, yn1_; + + TwoPhaseGenerator(const TwoPhaseGenerator&); + TwoPhaseGenerator& operator=(const TwoPhaseGenerator&); + }; +} +#endif // TWO_PHASE_GENERATOR_HPP