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 // Frequency converter
CQpub0Mikami 0:a5a171eda3f8 3 // Copyright (c) 2014 MIKAMI, Naoki, 2014/06/23
CQpub0Mikami 0:a5a171eda3f8 4 //--------------------------------------------------------------
CQpub0Mikami 0:a5a171eda3f8 5
CQpub0Mikami 0:a5a171eda3f8 6 #include "mbed.h"
CQpub0Mikami 0:a5a171eda3f8 7 #include "AdcInternal.hpp"
CQpub0Mikami 0:a5a171eda3f8 8 #include "MCP4922Single.hpp"
CQpub0Mikami 0:a5a171eda3f8 9 #include "HilbertTransform.hpp"
CQpub0Mikami 0:a5a171eda3f8 10 #include "coefsHilbert94.hpp"
CQpub0Mikami 0:a5a171eda3f8 11 #include "DC_Cut_Coefficients.hpp"
CQpub0Mikami 0:a5a171eda3f8 12 #include "Biquad.hpp"
CQpub0Mikami 0:a5a171eda3f8 13 #include "TwoPhaseGenerator.hpp"
CQpub0Mikami 0:a5a171eda3f8 14
CQpub0Mikami 0:a5a171eda3f8 15 using namespace Mikami;
CQpub0Mikami 0:a5a171eda3f8 16
CQpub0Mikami 0:a5a171eda3f8 17 const float FS_ = 10.0e3f;
CQpub0Mikami 0:a5a171eda3f8 18 Adc adc_(A0);
CQpub0Mikami 0:a5a171eda3f8 19 Dac dac_(Dac::DAC_A);
CQpub0Mikami 0:a5a171eda3f8 20
CQpub0Mikami 0:a5a171eda3f8 21 Ticker timer_; // for timer interrupt
CQpub0Mikami 0:a5a171eda3f8 22
CQpub0Mikami 0:a5a171eda3f8 23 Hilbert<ORDER_> ht(hm_);
CQpub0Mikami 0:a5a171eda3f8 24 Biquad DcCut(c1_); // DC cut filter
CQpub0Mikami 0:a5a171eda3f8 25 TwoPhaseGenerator sinCos_(100.0f, FS_); // 100.0 Hz
CQpub0Mikami 0:a5a171eda3f8 26
CQpub0Mikami 0:a5a171eda3f8 27 void TimerIsr()
CQpub0Mikami 0:a5a171eda3f8 28 {
CQpub0Mikami 0:a5a171eda3f8 29 float yI, yQ, cosx, sinx;
CQpub0Mikami 0:a5a171eda3f8 30
CQpub0Mikami 0:a5a171eda3f8 31 float xn = adc_.Read(); // input
CQpub0Mikami 0:a5a171eda3f8 32
CQpub0Mikami 0:a5a171eda3f8 33 xn = DcCut.Execute(g0_*xn); // DC cut
CQpub0Mikami 0:a5a171eda3f8 34 ht.Execute(xn, yI, yQ); // Hilbert transform
CQpub0Mikami 0:a5a171eda3f8 35 sinCos_.Generate(cosx, sinx); // cos and sin generator
CQpub0Mikami 0:a5a171eda3f8 36 float yn = yI*cosx - yQ*sinx; // conversion
CQpub0Mikami 0:a5a171eda3f8 37
CQpub0Mikami 0:a5a171eda3f8 38 dac_.Write(yn); // output
CQpub0Mikami 0:a5a171eda3f8 39 }
CQpub0Mikami 0:a5a171eda3f8 40
CQpub0Mikami 0:a5a171eda3f8 41 int main()
CQpub0Mikami 0:a5a171eda3f8 42 {
CQpub0Mikami 0:a5a171eda3f8 43 timer_.attach_us(&TimerIsr, 1.0e6f/FS_);
CQpub0Mikami 0:a5a171eda3f8 44 while (true) {} // infinite loop
CQpub0Mikami 0:a5a171eda3f8 45 }
CQpub0Mikami 0:a5a171eda3f8 46