Infinite impulse response filter

Dependents:   WIPV

Revision:
3:7191d27f4855
Parent:
2:0bae37b297f4
--- a/IIR.h	Tue Jan 10 19:45:40 2017 +0000
+++ b/IIR.h	Fri Feb 10 18:25:55 2017 +0000
@@ -27,46 +27,14 @@
     int ind; // The index of the newest element
 
 public:
-    Circular_buffer(){
-        n = 0;
-        ind = 0;
-    }
-    Circular_buffer(int n_in){
-        n = n_in;
-        A.resize(n);
-        for (size_t i=0; i< A.size(); i++)
-            A[i] = 0;
-
-        ind = 0;
-    }
-
-    void Init(int n_in){ // Input: buffer size
-        n = n_in;
-        A.resize(n);
-        for (size_t i=0; i< A.size(); i++)
-            A[i] = 0;
-        ind = 0;
-    }
-
-    float Get(int i){ // Get the value of the (t-i)th element, where t stands for the current sample
-        int ind_e = ind-i;
-        while (ind_e < 0){
-            ind_e += A.size();
-        }
-        return A[ind_e];
-    }
-    void Insert(float x_new){ // Pop the oldest element and push a new element
-        ind++;
-        while (ind >= A.size()){
-            ind -= A.size();
-        }
-        A[ind] = x_new;
-    }
-    void reset(float val){ // Reset all elements to val
-        for (size_t i = 0; i< A.size(); i++)
-            A[i] = val;
-        ind = 0;
-    }
+    Circular_buffer();
+    Circular_buffer(int n_in);
+    //
+    void Init(int n_in);
+    //
+    float Get(int i); // Get the value of the (t-i)th element, where t stands for the current sample
+    void Insert(float x_new); // Pop the oldest element and push a new element
+    void reset(float val); // Reset all elements to val
 };
 
 class IIR{
@@ -80,42 +48,13 @@
     float gain;
 
 public:
-    IIR(int m, int n): m(m),n(n) {
-        x.Init(m+1);
-        y.Init(n);
-    }
-    void Assign_parameters(float b_in[], float a_in[], float gain_in){
-        //b.assign(b_in,b_in+m+1);
-        // a.assign(a_in,a_in+n);
-        b.resize(m+1);
-        a.resize(n);
-        for (size_t i = 0; i < n; i++){
-            a[i] = a_in[i+1];
-        }
-        gain = gain_in;
-        for (size_t i = 0; i < b.size(); i++){
-            b[i] = gain*b_in[i];
-        }
-    }
-    float Iterate_once(float x_in){
-        x.Insert(x_in);
-        float y_new = 0;
-        // Numerator
-        for (int i = 0; i <= m; i++ ){
-            y_new += b[i]*x.Get(i);
-        }
-
-        // Denominator
-        for (int i = 0; i < n; i++){
-            y_new -= a[i]*y.Get(i);
-        }
-        y.Insert(y_new);
-        return y_new;
-    }
-    void Reset(float val){ // Rest all elements to val
-        x.reset(val);
-        y.reset(val);
-    }
+    //
+    IIR(int m, int n);
+    //
+    void Assign_parameters(float b_in[], float a_in[], float gain_in);
+    //
+    float Iterate_once(float x_in);
+    void Reset(float val);
 };
 
 #endif