Emg filter function script for a uni project. Made by Teun van der Molen

Dependencies:   HIDScope MODSERIAL mbed

Fork of frdm_EMG by Teun van der Molen

main.cpp

Committer:
teunman
Date:
2015-09-21
Revision:
4:1baefd1397d6
Parent:
3:499c71ca30a0
Child:
5:56725d9362ee

File content as of revision 4:1baefd1397d6:

#include "mbed.h"
#include "HIDScope.h"
#include "math.h" 
// Define the HIDScope and Ticker object
HIDScope    scope(3);
Ticker      scopeTimer;
Ticker      biquadTicker;

double v1=0, v2=0, u=0, y=0,     fy=0, fv1=0, fv2=0, fu=0;

//const double b0 = 0.9999999999999999,b1 = 1.9999999999999998,b2 = 0.9999999999999999, a1 = 1.9999999999999998 ,a2 = 0.9999999999999998; //low-pass Fc = 50hz
const double fb0 = 0.02008333102602092 ,fb1 = 0.04016666205204184 ,fb2 = 0.02008333102602092, fa1 = -1.5610153912536877 ,fa2 = 0.6413487153577715; //low-pass Fc = 5hz
//const double b0 = 0.8005910266528649,b1 = -1.6011820533057297,b2 = 0.8005910266528649,a1 = -1.5610153912536877,a2 = 0.6413487153577715; //high-pass Fc = 5hz
//const double b0 = 0.007820199259120319,b1 = 0.015640398518240638,b2 = 0.007820199259120319,a1 = -1.7347238224240125,a2 = 0.7660046194604936; //low-pass Fc = 3hz
//const double b0 = 0.0009446914586925257,b1 = 0.0018893829173850514,b2 = 0.0009446914586925257,a1 = -1.911196288237583,a2 = 0.914975054072353; //low-pass Fc = 1hz
const double b0 = 0.956542835577484, b1 = -1.913085671154968, b2 = 0.956542835577484, a1 = -1.911196288237583, a2 = 0.914975054072353; //high-pass Fc  =  1hz





// Read the analog input
AnalogIn    an_in(A0);

AnalogOut   an_out(DAC0_OUT); 
// The data read and send function
void scopeSend()
{
    scope.set(0,y);
    scope.set(1,fy);
    scope.set(2,an_in);
   
    scope.send();
}
 
 void computeBiquad(){
    double v = an_in - a1*v1 - a2*v2;
    y= b0*v + b1*v1 +b2*v2;
    v2=v1;
    v1=v;
     
     double fv = y - fa1*fv1 - fa2*fv2;
    fy= fb0*fv + fb1*fv1 + fb2*fv2;
    fv2=fv1;
    fv1=fv;
}
 
 
int main()
{
    // Attach the data read and send function at 100 Hz
    scopeTimer.attach_us(&scopeSend, 1e4);   
    biquadTicker.attach(&computeBiquad,0.01f);
     //float i = 1;
    while(1) {
      
    }
}