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 #include "mbed.h"
MikamiUitOpen 0:97d46bd73383 7
MikamiUitOpen 0:97d46bd73383 8 //#define USING_POLYNORMIAL // 多項式近似を使う場合このコメントを有効にする
MikamiUitOpen 0:97d46bd73383 9 #define USING_ADD_THEOREM // 加法定理を使う場合このコメントを有効にする
MikamiUitOpen 0:97d46bd73383 10 //#define USING_2ND_ORDER_IIR // IIR フィルタを使う場合このコメントを有効にする
MikamiUitOpen 0:97d46bd73383 11 const int TS_ = 10; // 標本化間隔:10 μs
MikamiUitOpen 0:97d46bd73383 12 const int F0_ = 5000; // 8 kHz
MikamiUitOpen 0:97d46bd73383 13
MikamiUitOpen 0:97d46bd73383 14 #ifdef USING_POLYNORMIAL
MikamiUitOpen 0:97d46bd73383 15 #include "QuadOscPoly.hpp"
MikamiUitOpen 0:97d46bd73383 16 QuadOscPoly osc_(F0_, TS_); // 460 ns
MikamiUitOpen 0:97d46bd73383 17 #endif // USING_POLYNORMIAL
MikamiUitOpen 0:97d46bd73383 18
MikamiUitOpen 0:97d46bd73383 19 #ifdef USING_ADD_THEOREM
MikamiUitOpen 0:97d46bd73383 20 #include "QuadOscAddFixed.hpp"
MikamiUitOpen 0:97d46bd73383 21 QuadOscAddTheorem osc_(F0_, TS_); // 300 ns
MikamiUitOpen 0:97d46bd73383 22 #endif // USING_ADDITION_THEOREM
MikamiUitOpen 0:97d46bd73383 23
MikamiUitOpen 0:97d46bd73383 24 #ifdef USING_2ND_ORDER_IIR
MikamiUitOpen 0:97d46bd73383 25 #include "QuadOscIirFixed.hpp"
MikamiUitOpen 0:97d46bd73383 26 QuadOscIIR osc_(F0_, TS_); // 250 ns
MikamiUitOpen 0:97d46bd73383 27 #endif // USING_2ND_ORDER_IIR
MikamiUitOpen 0:97d46bd73383 28
MikamiUitOpen 0:97d46bd73383 29 Ticker timer_;
MikamiUitOpen 0:97d46bd73383 30 AnalogOut da1_(A2);
MikamiUitOpen 0:97d46bd73383 31 AnalogOut da2_(D13);
MikamiUitOpen 0:97d46bd73383 32 DigitalOut dOut_(D2);
MikamiUitOpen 0:97d46bd73383 33
MikamiUitOpen 0:97d46bd73383 34 void TimerIsr()
MikamiUitOpen 0:97d46bd73383 35 {
MikamiUitOpen 0:97d46bd73383 36 int16_t sn1, sn2;
MikamiUitOpen 0:97d46bd73383 37 dOut_ = 1;
MikamiUitOpen 0:97d46bd73383 38 osc_.Generate(sn1, sn2);
MikamiUitOpen 0:97d46bd73383 39 dOut_ = 0;
MikamiUitOpen 0:97d46bd73383 40 da1_.write_u16(sn1+32768);
MikamiUitOpen 0:97d46bd73383 41 da2_.write_u16(sn2+32768);
MikamiUitOpen 0:97d46bd73383 42 }
MikamiUitOpen 0:97d46bd73383 43
MikamiUitOpen 0:97d46bd73383 44 int main()
MikamiUitOpen 0:97d46bd73383 45 {
MikamiUitOpen 0:97d46bd73383 46 timer_.attach_us(&TimerIsr, TS_);
MikamiUitOpen 0:97d46bd73383 47
MikamiUitOpen 0:97d46bd73383 48 while (true) {}
MikamiUitOpen 0:97d46bd73383 49 }