The experiment using this program is introduced on "Interface" No.3, CQ publishing Co.,Ltd, 2015. 本プログラムを使った実験は,CQ出版社のインターフェース 2015年3月号で紹介しています.

Dependencies:   DSProcessingIO mbed

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
+}
+