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:
Sun Aug 24 10:19:58 2014 +0000
Revision:
3:e8fff6901dcd
Parent:
2:61c8a0b0c5b5
2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CQpub0Mikami 0:47656a949b95 1 //--------------------------------------------------------------
CQpub0Mikami 0:47656a949b95 2 // Echo generation system
CQpub0Mikami 2:61c8a0b0c5b5 3 // Copyright (c) 2014 MIKAMI, Naoki, 2014/08/24
CQpub0Mikami 0:47656a949b95 4 //--------------------------------------------------------------
CQpub0Mikami 0:47656a949b95 5
CQpub0Mikami 0:47656a949b95 6 #include "mbed.h"
CQpub0Mikami 0:47656a949b95 7 #include "AdcInternal.hpp"
CQpub0Mikami 0:47656a949b95 8 #include "MCP4922Single.hpp"
CQpub0Mikami 0:47656a949b95 9 #include "ReverbUnit.hpp"
CQpub0Mikami 0:47656a949b95 10
CQpub0Mikami 0:47656a949b95 11 using namespace Mikami;
CQpub0Mikami 0:47656a949b95 12
CQpub0Mikami 0:47656a949b95 13 const float FS_ = 10.0e3f;
CQpub0Mikami 0:47656a949b95 14 Adc adc_(A0);
CQpub0Mikami 0:47656a949b95 15 Dac dac_(Dac::DAC_A);
CQpub0Mikami 0:47656a949b95 16
CQpub0Mikami 0:47656a949b95 17 Ticker timer_; // for timer interrupt
CQpub0Mikami 0:47656a949b95 18
CQpub0Mikami 0:47656a949b95 19 const float G_C_ = 0.8f;
CQpub0Mikami 0:47656a949b95 20 const float G_A_ = 0.6f;
CQpub0Mikami 0:47656a949b95 21 const float G0_ = 1.0f - G_C_;
CQpub0Mikami 0:47656a949b95 22 CombFilter<887> cmF1(G_C_);
CQpub0Mikami 0:47656a949b95 23 CombFilter<1153> cmF2(G_C_);
CQpub0Mikami 0:47656a949b95 24 CombFilter<1499> cmF3(G_C_);
CQpub0Mikami 0:47656a949b95 25 AllPassFilter<97> apF1(G_A_);
CQpub0Mikami 0:47656a949b95 26 AllPassFilter<131> apF2(G_A_);
CQpub0Mikami 0:47656a949b95 27
CQpub0Mikami 0:47656a949b95 28 void TimerIsr()
CQpub0Mikami 0:47656a949b95 29 {
CQpub0Mikami 0:47656a949b95 30 float xn = adc_.Read(); // input
CQpub0Mikami 0:47656a949b95 31
CQpub0Mikami 0:47656a949b95 32 xn = G0_*xn;
CQpub0Mikami 0:47656a949b95 33 float yn = cmF1.Execute(xn) + cmF2.Execute(xn)
CQpub0Mikami 0:47656a949b95 34 + cmF3.Execute(xn);
CQpub0Mikami 0:47656a949b95 35 yn = apF2.Execute(apF1.Execute(yn));
CQpub0Mikami 0:47656a949b95 36 yn = yn + xn; // add direct input signal
CQpub0Mikami 0:47656a949b95 37
CQpub0Mikami 0:47656a949b95 38 dac_.Write(yn); // output
CQpub0Mikami 0:47656a949b95 39 }
CQpub0Mikami 0:47656a949b95 40
CQpub0Mikami 0:47656a949b95 41 int main()
CQpub0Mikami 0:47656a949b95 42 {
CQpub0Mikami 0:47656a949b95 43 timer_.attach_us(&TimerIsr, 1.0e6f/FS_);
CQpub0Mikami 0:47656a949b95 44 while (true) {} // infinite loop
CQpub0Mikami 0:47656a949b95 45 }