Gerhard Berman / Mbed 2 deprecated frdm_calibratie_maximum2

Dependencies:   HIDScope biquadFilter mbed

Fork of frdm_calibratie_maximum by Marieke M

Committer:
Marieke
Date:
Fri Oct 21 13:22:31 2016 +0000
Revision:
3:339b19905505
Parent:
2:27081b83a58e
Child:
4:9f4501eb226b
filter script, without calibration and filtered signal times factor 10 caused by "fabs".

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