Reverb system using singlae allpass filter for ST Nucleo F401RE.

Dependencies:   UIT_ADDA mbed

Committer:
MikamiUitOpen
Date:
Sat Nov 15 05:59:58 2014 +0000
Revision:
3:4202e6fc38f7
Parent:
2:5f1857345ea9
4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:29f3efdfaee8 1 //--------------------------------------------------------------
MikamiUitOpen 0:29f3efdfaee8 2 // Reverb system using all-pass filter
MikamiUitOpen 2:5f1857345ea9 3 // 2014/11/12, Copyright (c) 2014 MIKAMI, Naoki
MikamiUitOpen 0:29f3efdfaee8 4 //--------------------------------------------------------------
MikamiUitOpen 0:29f3efdfaee8 5
MikamiUitOpen 0:29f3efdfaee8 6 #include "mbed.h"
MikamiUitOpen 0:29f3efdfaee8 7
MikamiUitOpen 0:29f3efdfaee8 8 #include "ADC_Base.hpp" // for ADC not using interrupt
MikamiUitOpen 0:29f3efdfaee8 9 #include "DAC_MCP4922.hpp" // for DAC MCP4922
MikamiUitOpen 0:29f3efdfaee8 10
MikamiUitOpen 0:29f3efdfaee8 11 using namespace Mikami;
MikamiUitOpen 0:29f3efdfaee8 12
MikamiUitOpen 0:29f3efdfaee8 13 const int FS_ = 12000; // Sampling frequency: 12 kHz
MikamiUitOpen 0:29f3efdfaee8 14 ADC_Base adc_(A0, FS_); // for AD
MikamiUitOpen 0:29f3efdfaee8 15 DAC_MCP4922 myDac_; // for DA
MikamiUitOpen 0:29f3efdfaee8 16
MikamiUitOpen 0:29f3efdfaee8 17 const float G_A_ = 0.6f;
MikamiUitOpen 0:29f3efdfaee8 18 const int M1 = 1153;
MikamiUitOpen 0:29f3efdfaee8 19 float unD[M1];
MikamiUitOpen 0:29f3efdfaee8 20
MikamiUitOpen 0:29f3efdfaee8 21 DigitalIn sw_(D2, PullDown);
MikamiUitOpen 0:29f3efdfaee8 22
MikamiUitOpen 0:29f3efdfaee8 23 int main()
MikamiUitOpen 0:29f3efdfaee8 24 {
MikamiUitOpen 2:5f1857345ea9 25 myDac_.ScfClockTim3(500000); // cutoff frequency: 5 kHz
MikamiUitOpen 0:29f3efdfaee8 26
MikamiUitOpen 0:29f3efdfaee8 27 for (int n=0; n<M1; n++) unD[n] = 0.0f;
MikamiUitOpen 0:29f3efdfaee8 28 int nD = 0;
MikamiUitOpen 0:29f3efdfaee8 29
MikamiUitOpen 0:29f3efdfaee8 30 while (true)
MikamiUitOpen 0:29f3efdfaee8 31 {
MikamiUitOpen 0:29f3efdfaee8 32 float xn = adc_.Read(); // Read from A0
MikamiUitOpen 0:29f3efdfaee8 33 //-----------------------------------------------
MikamiUitOpen 0:29f3efdfaee8 34
MikamiUitOpen 0:29f3efdfaee8 35 float yn;
MikamiUitOpen 0:29f3efdfaee8 36 if (sw_.read() == 1)
MikamiUitOpen 0:29f3efdfaee8 37 {
MikamiUitOpen 0:29f3efdfaee8 38 float un = xn + G_A_*unD[nD];
MikamiUitOpen 0:29f3efdfaee8 39 yn = -G_A_*un + unD[nD];
MikamiUitOpen 0:29f3efdfaee8 40 unD[nD++] = un;
MikamiUitOpen 0:29f3efdfaee8 41 if (nD >= M1) nD = 0;
MikamiUitOpen 0:29f3efdfaee8 42 }
MikamiUitOpen 0:29f3efdfaee8 43 else
MikamiUitOpen 0:29f3efdfaee8 44 yn = xn;
MikamiUitOpen 0:29f3efdfaee8 45
MikamiUitOpen 0:29f3efdfaee8 46 //-----------------------------------------------
MikamiUitOpen 0:29f3efdfaee8 47 myDac_.Write(yn); // Write to DAC
MikamiUitOpen 0:29f3efdfaee8 48 }
MikamiUitOpen 0:29f3efdfaee8 49 }