Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: HIDScope biquadFilter mbed
Fork of frdm_calibratie_maximum by
main.cpp@3:339b19905505, 2016-10-21 (annotated)
- 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?
User | Revision | Line number | New 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 | } |