00001 #ifndef ALLPASS_1
00002 #define ALLPASS_1
00003 #include <delay.h>
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 namespace SPUC {
00032
00033
00034
00035
00036
00037
00038
00039 template <class Numeric> class allpass_1
00040 {
00041 protected:
00043 long size;
00044 Numeric gain;
00045 delay<Numeric> mult;
00046 delay<Numeric> sum;
00047
00048 public:
00050 allpass_1(Numeric Gain=0, long s=1) {
00051 gain = Gain;
00052 size = s;
00053 mult.set_size(size);
00054 sum.set_size(size);
00055 }
00057 void reset() {
00058 mult.reset();
00059 sum.reset();
00060 }
00062 void init(Numeric Gain, long s) {
00063 gain = Gain;
00064 size = s;
00065 mult.set_size(size);
00066 sum.set_size(size);
00067 }
00069 Numeric clock(Numeric input) {
00070 Numeric current_sum, current_mult,out;
00071
00072 out = sum.check(size-1);
00073 current_sum = input + mult.check(size-1);
00074 current_mult = -gain*current_sum;
00075 out -= current_mult;
00076
00077 mult.input(current_mult);
00078 sum.input(current_sum);
00079 return(out);
00080 }
00081 };
00082 }
00083 #endif