不韋 呂
/
CQ_FixedPointSinCos
CQ出版社インターフェース誌の2017年10月号で解説している二相発振器のプログラム
main.cpp@0:97d46bd73383, 2017-08-02 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Wed Aug 02 11:50:17 2017 +0000
- Revision:
- 0:97d46bd73383
1
Who changed what in which revision?
User | Revision | Line number | New 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 | } |