Marieke M / Mbed 2 deprecated frdm_calibratie_maximum

Dependencies:   mbed HIDScope biquadFilter

Committer:
Marieke
Date:
Fri Oct 21 15:01:44 2016 +0000
Revision:
4:ebb36bf9feb8
Parent:
3:339b19905505
Child:
5:df782fe787f0
filter script with everything working, no calibration anymore, second low pass filter is removed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Marieke 0:4d69864f1002 1 #include "mbed.h"
Marieke 2:27081b83a58e 2 #include "BiQuad.h"
Marieke 3:339b19905505 3 #include "HIDScope.h"
Marieke 4:ebb36bf9feb8 4 #include <math.h>
Marieke 3:339b19905505 5
Marieke 3:339b19905505 6 //#define SERIAL_BAUD 115200
Marieke 0:4d69864f1002 7
Marieke 0:4d69864f1002 8 AnalogIn emg0( A0 );
Marieke 0:4d69864f1002 9 AnalogIn emg1( A1 );
Marieke 3:339b19905505 10 //Serial pc(USBTX,USBRX);
Marieke 0:4d69864f1002 11
Marieke 0:4d69864f1002 12 Ticker sample_timer, average_timer, filter_timer, t;
Marieke 3:339b19905505 13 HIDScope scope( 6 );
Marieke 0:4d69864f1002 14 DigitalOut led1(LED_RED);
Marieke 0:4d69864f1002 15 DigitalOut led2(LED_BLUE);
Marieke 0:4d69864f1002 16
Marieke 0:4d69864f1002 17 volatile int time_passed = 0;
Marieke 0:4d69864f1002 18 volatile bool filter_timer_go=false;
Marieke 1:278677bb6b99 19
Marieke 2:27081b83a58e 20 double EMGright, EMGleft, inR;
Marieke 2:27081b83a58e 21 double averageEMGr =0;
Marieke 2:27081b83a58e 22 double averageEMGl =0;
Marieke 3:339b19905505 23
Marieke 2:27081b83a58e 24 void filter_timer_act(){filter_timer_go=true;};
Marieke 0:4d69864f1002 25
Marieke 3:339b19905505 26 BiQuadChain bcq1;
Marieke 3:339b19905505 27 BiQuadChain bcq2;
Marieke 0:4d69864f1002 28 // Notch filter wo=50; bw=wo/35
Marieke 3:339b19905505 29 BiQuad bq1(9.9821e-01,-1.9807e+00,9.9821e-01,-1.9807e+00,9.9642e-01);
Marieke 0:4d69864f1002 30 // High pass Butterworth filter 2nd order, Fc=10;
Marieke 3:339b19905505 31 BiQuad bq2(9.8239e-01,-1.9648e+00,9.8239e-01,-1.9645e+00,9.6508e-01);
Marieke 0:4d69864f1002 32 // Low pass Butterworth filter 2nd order, Fc = 8;
Marieke 3:339b19905505 33 BiQuad bq3(5.6248e-05,1.1250e-04,5.6248e-05,-1.9787e+00,9.7890e-01);
Marieke 4:ebb36bf9feb8 34
Marieke 0:4d69864f1002 35
Marieke 0:4d69864f1002 36 void KeepTrackOfTime()
Marieke 0:4d69864f1002 37 {
Marieke 0:4d69864f1002 38 time_passed++;
Marieke 0:4d69864f1002 39 }
Marieke 0:4d69864f1002 40
Marieke 0:4d69864f1002 41 // In the following: R is used for right arm, L is used for left arm!
Marieke 3:339b19905505 42 void FilteredSample()
Marieke 0:4d69864f1002 43 {
Marieke 3:339b19905505 44 double inR = emg0.read();
Marieke 3:339b19905505 45 double inL = emg1.read();
Marieke 4:ebb36bf9feb8 46
Marieke 4:ebb36bf9feb8 47 double outRfilter1 = bcq1.step(inR);
Marieke 4:ebb36bf9feb8 48 double outRrect= fabs(outRfilter1);
Marieke 4:ebb36bf9feb8 49 double outRenvelope= bcq2.step(outRrect);
Marieke 0:4d69864f1002 50
Marieke 4:ebb36bf9feb8 51 double outLfilter1 = bcq1.step(inL);
Marieke 4:ebb36bf9feb8 52 double outLrect = fabs(outLfilter1);
Marieke 4:ebb36bf9feb8 53 double outLenvelope= bcq2.step(outLrect);
Marieke 4:ebb36bf9feb8 54
Marieke 3:339b19905505 55 //pc.printf("Detrend EMG = %f\n\r",inR);
Marieke 3:339b19905505 56 //pc.printf("EMG signal= %f\n\r",emg0.read());
Marieke 3:339b19905505 57 //pc.printf("average EMG right = %f\n\r",averageEMGr);
Marieke 2:27081b83a58e 58
Marieke 3:339b19905505 59 scope.set(0, inR);
Marieke 0:4d69864f1002 60 scope.set(1, inL);
Marieke 4:ebb36bf9feb8 61 scope.set(2, outRenvelope);
Marieke 4:ebb36bf9feb8 62 scope.set(3, outLenvelope);
Marieke 0:4d69864f1002 63
Marieke 0:4d69864f1002 64 scope.send();
Marieke 2:27081b83a58e 65 // To indicate that the function is working, the LED is toggled*/
Marieke 3:339b19905505 66 led2 = !led2;
Marieke 0:4d69864f1002 67 }
Marieke 0:4d69864f1002 68
Marieke 0:4d69864f1002 69 int main()
Marieke 0:4d69864f1002 70 {
Marieke 3:339b19905505 71 //pc.baud(115200);
Marieke 0:4d69864f1002 72 led1=1;
Marieke 0:4d69864f1002 73 led2=1;
Marieke 3:339b19905505 74 led2=!led2;
Marieke 3:339b19905505 75 //t.attach(&KeepTrackOfTime,1.0); //taking the time in seconds
Marieke 0:4d69864f1002 76
Marieke 3:339b19905505 77 bcq1.add(&bq1).add(&bq2);
Marieke 4:ebb36bf9feb8 78 bcq2.add(&bq3);
Marieke 3:339b19905505 79
Marieke 0:4d69864f1002 80
Marieke 3:339b19905505 81 filter_timer.attach(&filter_timer_act, 0.0004); //2500Hz (same as with filter coefficients on matlab!!! Thus adjust!)
Marieke 3:339b19905505 82 //pc.printf("\rMain-loop\n\r");
Marieke 2:27081b83a58e 83 //pc.printf("Detrend EMG = %f\n\r",inR);
Marieke 0:4d69864f1002 84
Marieke 3:339b19905505 85 while(1)
Marieke 3:339b19905505 86 {
Marieke 3:339b19905505 87 if (filter_timer_go){
Marieke 0:4d69864f1002 88 filter_timer_go=false;
Marieke 3:339b19905505 89 FilteredSample();}
Marieke 2:27081b83a58e 90 }
Marieke 0:4d69864f1002 91 }