The experiment using this program is introduced on "Interface" No.3, CQ publishing Co.,Ltd, 2015. 本プログラムを使った実験は,CQ出版社のインターフェース 2015年3月号で紹介しています.
Dependencies: DSProcessingIO mbed
Diff: Echo.cpp
- Revision:
- 0:47656a949b95
- Child:
- 2:61c8a0b0c5b5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Echo.cpp Tue Jul 15 09:26:17 2014 +0000 @@ -0,0 +1,46 @@ +//-------------------------------------------------------------- +// Echo generation system +// Copyright (c) 2014 MIKAMI, Naoki, 2014/06/28 +//-------------------------------------------------------------- + +#include "mbed.h" +#include "AdcInternal.hpp" +#include "MCP4922Single.hpp" +#include "ReverbUnit.hpp" + +using namespace Mikami; + +const float FS_ = 10.0e3f; +Adc adc_(A0); +Dac dac_(Dac::DAC_A); + +Ticker timer_; // for timer interrupt + +const float G_C_ = 0.8f; +const float G_A_ = 0.6f; +const float G0_ = 1.0f - G_C_; +CombFilter<887> cmF1(G_C_); +CombFilter<1153> cmF2(G_C_); +CombFilter<1499> cmF3(G_C_); +AllPassFilter<97> apF1(G_A_); +AllPassFilter<131> apF2(G_A_); + +void TimerIsr() +{ + float xn = adc_.Read(); // input + + xn = G0_*xn; + float yn = cmF1.Execute(xn) + cmF2.Execute(xn) + + cmF3.Execute(xn); + yn = apF2.Execute(apF1.Execute(yn)); + yn = yn + xn; // add direct input signal + + dac_.Write(yn); // output +} + +int main() +{ + timer_.attach_us(&TimerIsr, 1.0e6f/FS_); + while (true) {} // infinite loop +} +