Reverb system using singlae allpass filter for ST Nucleo F401RE.

Dependencies:   UIT_ADDA mbed

Committer:
MikamiUitOpen
Date:
Fri Oct 31 08:12:49 2014 +0000
Revision:
0:29f3efdfaee8
Child:
1:8f8550f46b19
1

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 0:29f3efdfaee8 3 // 2014/10/31, 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 #include "ScfClockTim3.hpp" // for clock supplied to SCF
MikamiUitOpen 0:29f3efdfaee8 11
MikamiUitOpen 0:29f3efdfaee8 12 using namespace Mikami;
MikamiUitOpen 0:29f3efdfaee8 13
MikamiUitOpen 0:29f3efdfaee8 14 const int FS_ = 12000; // Sampling frequency: 12 kHz
MikamiUitOpen 0:29f3efdfaee8 15 ADC_Base adc_(A0, FS_); // for AD
MikamiUitOpen 0:29f3efdfaee8 16 DAC_MCP4922 myDac_; // for DA
MikamiUitOpen 0:29f3efdfaee8 17
MikamiUitOpen 0:29f3efdfaee8 18 const float G_A_ = 0.6f;
MikamiUitOpen 0:29f3efdfaee8 19 const int M1 = 1153;
MikamiUitOpen 0:29f3efdfaee8 20 float unD[M1];
MikamiUitOpen 0:29f3efdfaee8 21
MikamiUitOpen 0:29f3efdfaee8 22 DigitalIn sw_(D2, PullDown);
MikamiUitOpen 0:29f3efdfaee8 23
MikamiUitOpen 0:29f3efdfaee8 24 int main()
MikamiUitOpen 0:29f3efdfaee8 25 {
MikamiUitOpen 0:29f3efdfaee8 26 ScfClockTim3(500000); // cutoff frequency: 5 kHz
MikamiUitOpen 0:29f3efdfaee8 27
MikamiUitOpen 0:29f3efdfaee8 28 for (int n=0; n<M1; n++) unD[n] = 0.0f;
MikamiUitOpen 0:29f3efdfaee8 29 int nD = 0;
MikamiUitOpen 0:29f3efdfaee8 30
MikamiUitOpen 0:29f3efdfaee8 31 while (true)
MikamiUitOpen 0:29f3efdfaee8 32 {
MikamiUitOpen 0:29f3efdfaee8 33 float xn = adc_.Read(); // Read from A0
MikamiUitOpen 0:29f3efdfaee8 34 //-----------------------------------------------
MikamiUitOpen 0:29f3efdfaee8 35
MikamiUitOpen 0:29f3efdfaee8 36 float yn;
MikamiUitOpen 0:29f3efdfaee8 37 if (sw_.read() == 1)
MikamiUitOpen 0:29f3efdfaee8 38 {
MikamiUitOpen 0:29f3efdfaee8 39 float un = xn + G_A_*unD[nD];
MikamiUitOpen 0:29f3efdfaee8 40 yn = -G_A_*un + unD[nD];
MikamiUitOpen 0:29f3efdfaee8 41 unD[nD++] = un;
MikamiUitOpen 0:29f3efdfaee8 42 if (nD >= M1) nD = 0;
MikamiUitOpen 0:29f3efdfaee8 43 }
MikamiUitOpen 0:29f3efdfaee8 44 else
MikamiUitOpen 0:29f3efdfaee8 45 yn = xn;
MikamiUitOpen 0:29f3efdfaee8 46
MikamiUitOpen 0:29f3efdfaee8 47 //-----------------------------------------------
MikamiUitOpen 0:29f3efdfaee8 48 myDac_.Write(yn); // Write to DAC
MikamiUitOpen 0:29f3efdfaee8 49 }
MikamiUitOpen 0:29f3efdfaee8 50 }
MikamiUitOpen 0:29f3efdfaee8 51