The experiment using this program is introduced on "Interface" No.3, CQ publishing Co.,Ltd, 2015. 本プログラムを使った実験は,CQ出版社のインターフェース 2015年3月号で紹介しています.
Dependencies: DSProcessingIO mbed
Echo.cpp@3:e8fff6901dcd, 2014-08-24 (annotated)
- Committer:
- CQpub0Mikami
- Date:
- Sun Aug 24 10:19:58 2014 +0000
- Revision:
- 3:e8fff6901dcd
- Parent:
- 2:61c8a0b0c5b5
2
Who changed what in which revision?
User | Revision | Line number | New 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 | } |