Reverb system using singlae allpass filter class for ST Nucleo F401RE.

Dependencies:   UIT_ADDA mbed

Committer:
MikamiUitOpen
Date:
Sat Nov 15 06:31:26 2014 +0000
Revision:
3:fe6f1798a71e
Parent:
0:ff3a8918b1ad
4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:ff3a8918b1ad 1 //--------------------------------------------------------------
MikamiUitOpen 0:ff3a8918b1ad 2 // All-pass filter
MikamiUitOpen 0:ff3a8918b1ad 3 // 2014/10/23, Copyright (c) 2014 MIKAMI, Naoki
MikamiUitOpen 0:ff3a8918b1ad 4 //--------------------------------------------------------------
MikamiUitOpen 0:ff3a8918b1ad 5
MikamiUitOpen 0:ff3a8918b1ad 6 #ifndef ALLPASS_FILTER_HPP
MikamiUitOpen 0:ff3a8918b1ad 7 #define ALLPASS_FILTER_HPP
MikamiUitOpen 0:ff3a8918b1ad 8
MikamiUitOpen 0:ff3a8918b1ad 9 #include "mbed.h"
MikamiUitOpen 0:ff3a8918b1ad 10
MikamiUitOpen 0:ff3a8918b1ad 11 template<int delay> class AllpassFilter
MikamiUitOpen 0:ff3a8918b1ad 12 {
MikamiUitOpen 0:ff3a8918b1ad 13 private:
MikamiUitOpen 0:ff3a8918b1ad 14 const float G0_;
MikamiUitOpen 0:ff3a8918b1ad 15 int ptr_;
MikamiUitOpen 0:ff3a8918b1ad 16 float un_[delay]; // for delay
MikamiUitOpen 0:ff3a8918b1ad 17 float Get() { return un_[ptr_]; }
MikamiUitOpen 0:ff3a8918b1ad 18 void Set(float x)
MikamiUitOpen 0:ff3a8918b1ad 19 {
MikamiUitOpen 0:ff3a8918b1ad 20 un_[ptr_] = x;
MikamiUitOpen 0:ff3a8918b1ad 21 if (++ptr_ >= delay) ptr_ = 0;
MikamiUitOpen 0:ff3a8918b1ad 22 }
MikamiUitOpen 0:ff3a8918b1ad 23 public:
MikamiUitOpen 0:ff3a8918b1ad 24 // Constructor
MikamiUitOpen 0:ff3a8918b1ad 25 AllpassFilter(float g) : G0_(g), ptr_(0) {}
MikamiUitOpen 0:ff3a8918b1ad 26
MikamiUitOpen 0:ff3a8918b1ad 27 // Execute comb filter
MikamiUitOpen 0:ff3a8918b1ad 28 float Execute(float x)
MikamiUitOpen 0:ff3a8918b1ad 29 {
MikamiUitOpen 0:ff3a8918b1ad 30 float un = x + G0_*Get();
MikamiUitOpen 0:ff3a8918b1ad 31 float yn = -G0_*un + Get();
MikamiUitOpen 0:ff3a8918b1ad 32 Set(un);
MikamiUitOpen 0:ff3a8918b1ad 33 return yn;
MikamiUitOpen 0:ff3a8918b1ad 34 }
MikamiUitOpen 0:ff3a8918b1ad 35
MikamiUitOpen 0:ff3a8918b1ad 36 // Clear internal delay elements
MikamiUitOpen 0:ff3a8918b1ad 37 void Clear()
MikamiUitOpen 0:ff3a8918b1ad 38 { for (int n=0; n<delay; n++) un_[n] = 0; }
MikamiUitOpen 0:ff3a8918b1ad 39 };
MikamiUitOpen 0:ff3a8918b1ad 40 #endif // ALLPASS_FILTER_HPP
MikamiUitOpen 0:ff3a8918b1ad 41
MikamiUitOpen 0:ff3a8918b1ad 42