Cutoff frequency variable LPF by IIR 6th-order Butterworth filter for ST Nucleo F401RE.

Dependencies:   UIT_IIR_Filter UIT_ACM1602NI UITDSP_ADDA mbed UIT_AQM1602

Files at this revision

API Documentation at this revision

Comitter:
MikamiUitOpen
Date:
Fri Sep 11 09:52:06 2015 +0000
Parent:
6:116f72cda0f4
Commit message:
8

Changed in this revision

Biquad.hpp Show diff for this revision Revisions of this file
IIR_Cascade.hpp Show diff for this revision Revisions of this file
UIT_IIR_Filter.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Biquad.hpp	Sat Jul 25 06:41:36 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-//--------------------------------------------------------------
-// Biquad filter for IIR filter of cascade structure
-// 2014/10/21, Copyright (c) 2014 MIKAMI, Naoki
-//--------------------------------------------------------------
-
-#ifndef IIR_BIQUAD_HPP
-#define IIR_BIQUAD_HPP
-
-#include "mbed.h"
-
-// 2nd order IIR filter
-class Biquad
-{
-public:
-    struct Coefs { float a1, a2, b1, b2; };
-
-    Biquad() {}     // Default constructore
-
-    Biquad(const Coefs ck)
-        : a1_(ck.a1), a2_(ck.a2), b1_(ck.b1), b2_(ck.b2)
-    { Clear(); }       
-
-    float Execute(float xn)
-    {
-        float un = xn + a1_*un1_ + a2_*un2_;
-        float yn = un + b1_*un1_ + b2_*un2_;
-        
-        un2_ = un1_;
-        un1_ = un;
-        
-        return yn;
-    }
-
-    void Clear() { un1_ = un2_ = 0; }
-
-private:
-    float a1_, a2_, b1_, b2_;
-    float un1_, un2_;
-
-    Biquad(const Biquad&);
-};
-
-#endif  // IIR_BIQUAD_HPP
-
--- a/IIR_Cascade.hpp	Sat Jul 25 06:41:36 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-//--------------------------------------------------------------
-// IIR filter ---- Cascade structure
-// 2014/10/23, Copyright (c) 2014 MIKAMI, Naoki
-//--------------------------------------------------------------
-
-#ifndef IIR_CASCADE_HPP
-#define IIR_CASCADE_HPP
-
-#include "mbed.h"
-#include "Biquad.hpp"
-
-namespace Mikami
-{
-    // IIR filter -- Cascade structure
-    template<int order> class IirCascade
-    {
-    private:
-        Biquad hk_[order];  // Elements of cascade structure
-        float g0_;          // gain factor
-
-        IirCascade(const IirCascade&);
-        IirCascade& operator=(const IirCascade&);
-
-    public:
-        IirCascade() {}
-        IirCascade(float g0, const Biquad::Coefs ck[])
-        { SetCoefs(g0, ck); }
-
-        void SetCoefs(float g0, const Biquad::Coefs ck[])
-        {
-            g0_ = g0;
-            for (int k=0; k<order; k++)
-                hk_[k] = Biquad(ck[k]);
-        }
-
-        float Execute(float xn)
-        {
-            float yn = g0_*xn;
-            for (int k=0; k<order; k++)
-                yn = hk_[k].Execute(yn);
-                
-            return yn;
-        }
-        
-        void Clear()
-        {
-            for (int k=0; k<order; k++)
-                hk_[k].Clear();
-        }
-    };
-}
-#endif  // IIR_CASCADE_HPP
-
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UIT_IIR_Filter.lib	Fri Sep 11 09:52:06 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/MikamiUitOpen/code/UIT_IIR_Filter/#2533ed0150e7
--- a/main.cpp	Sat Jul 25 06:41:36 2015 +0000
+++ b/main.cpp	Fri Sep 11 09:52:06 2015 +0000
@@ -3,7 +3,7 @@
 //      A0: Signal to be filtered
 //      A2: Value which controls cutoff frequency
 //
-// 2015/07/25, Copyright (c) 2015 MIKAMI, Naoki
+// 2015/09/11, Copyright (c) 2015 MIKAMI, Naoki
 //--------------------------------------------------------------
 
 #include "ADC_Interrupt.hpp"    // for ADC using interrupt
@@ -25,11 +25,11 @@
 #endif
 
 const int FS_ = 24000;          // Sampling frequency: 24 kHz
-ADC_Intr myAdc_(A0, FS_, A1, A2);
+ADC_Intr myAdc_(A0, FS_, A2);
 DAC_MCP4921 myDac_;
 
 const int ORDER_ = 8;
-IirCascade<ORDER_/2> iirLpf_;   // IIR filter object
+IirCascade<ORDER_> iirLpf_;     // IIR filter object
 
 DigitalIn sw1_(D2, PullDown);   // 0: disable filter
                                 // 1: enable filter
@@ -41,7 +41,7 @@
 {   
     float xn = myAdc_.Read();   // Read from A0
 
-    myAdc_.Select3rdChannel();  // Select A2   
+    myAdc_.Select2ndChannel();  // Select A2   
     myAdc_.SoftStart();         // ADC start for A2 input
 
     // Execute IIR filter