不韋 呂
/
CQ_FixedPointSinCos
CQ出版社インターフェース誌の2017年10月号で解説している二相発振器のプログラム
Diff: main.cpp
- Revision:
- 0:97d46bd73383
diff -r 000000000000 -r 97d46bd73383 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Aug 02 11:50:17 2017 +0000 @@ -0,0 +1,49 @@ +//---------------------------------------------------------------------- +// 二相発振器(多項式近似を使う方法,加法定理を使う方法,IIR フィルタを使う方法) +// +// 2017/03/02, Copyright (c) 2017 MIKAMI, Naoki +//---------------------------------------------------------------------- +#include "mbed.h" + +//#define USING_POLYNORMIAL // 多項式近似を使う場合このコメントを有効にする +#define USING_ADD_THEOREM // 加法定理を使う場合このコメントを有効にする +//#define USING_2ND_ORDER_IIR // IIR フィルタを使う場合このコメントを有効にする +const int TS_ = 10; // 標本化間隔:10 μs +const int F0_ = 5000; // 8 kHz + +#ifdef USING_POLYNORMIAL +#include "QuadOscPoly.hpp" +QuadOscPoly osc_(F0_, TS_); // 460 ns +#endif // USING_POLYNORMIAL + +#ifdef USING_ADD_THEOREM +#include "QuadOscAddFixed.hpp" +QuadOscAddTheorem osc_(F0_, TS_); // 300 ns +#endif // USING_ADDITION_THEOREM + +#ifdef USING_2ND_ORDER_IIR +#include "QuadOscIirFixed.hpp" +QuadOscIIR osc_(F0_, TS_); // 250 ns +#endif // USING_2ND_ORDER_IIR + +Ticker timer_; +AnalogOut da1_(A2); +AnalogOut da2_(D13); +DigitalOut dOut_(D2); + +void TimerIsr() +{ + int16_t sn1, sn2; + dOut_ = 1; + osc_.Generate(sn1, sn2); + dOut_ = 0; + da1_.write_u16(sn1+32768); + da2_.write_u16(sn2+32768); +} + +int main() +{ + timer_.attach_us(&TimerIsr, TS_); + + while (true) {} +}