Project Paint / Mbed 2 deprecated EMG-Processing

Dependencies:   biquadFilter mbed

Committer:
Jankoekenpan
Date:
Thu Nov 03 10:01:14 2016 +0000
Revision:
5:dd261ba7b047
Parent:
2:8b790c03a760
working test version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ofosakar 2:8b790c03a760 1 //#include "mbed.h"
ofosakar 2:8b790c03a760 2 //#include "HIDScope.h"
ofosakar 2:8b790c03a760 3 //#include "BiQuad.h"
ofosakar 2:8b790c03a760 4 //#include "math.h"
ofosakar 2:8b790c03a760 5 //#include "emg-utils.h"
ofosakar 2:8b790c03a760 6 //
ofosakar 2:8b790c03a760 7 //
ofosakar 2:8b790c03a760 8 //AnalogIn emg1(A0);
ofosakar 2:8b790c03a760 9 //AnalogIn emg2(A1);
ofosakar 2:8b790c03a760 10 //
ofosakar 2:8b790c03a760 11 //HIDScope scope(6);
ofosakar 2:8b790c03a760 12 //Ticker ticker;
ofosakar 2:8b790c03a760 13 //
ofosakar 2:8b790c03a760 14 //BiQuadChain bqc1;
ofosakar 2:8b790c03a760 15 //BiQuadChain bqc2;
ofosakar 2:8b790c03a760 16 //
ofosakar 2:8b790c03a760 17 //// EMG BIQUAD 1
ofosakar 2:8b790c03a760 18 ////Bandpass butterworth filter + Notch butterworth filter.
ofosakar 2:8b790c03a760 19 ////Bandpass: 10 --- 500 Hz
ofosakar 2:8b790c03a760 20 ////No Bandpass filters
ofosakar 2:8b790c03a760 21 ////Nothc: 50 +- 2 Hz
ofosakar 2:8b790c03a760 22 //BiQuad bq11( 9.93756e-01, -1.89024e+00, 9.93756e-01, -1.89024e+00, 9.87512e-01 );
ofosakar 2:8b790c03a760 23 //
ofosakar 2:8b790c03a760 24 //// EMG BIQUAD 2
ofosakar 2:8b790c03a760 25 ////Bandpass butterworth filter + Notch butterworth filter.
ofosakar 2:8b790c03a760 26 ////Bandpass: 10 --- 500 Hz
ofosakar 2:8b790c03a760 27 ////No Bandpass filters
ofosakar 2:8b790c03a760 28 ////Nothc: 50 +- 2 Hz
ofosakar 2:8b790c03a760 29 //BiQuad bq12( 9.93756e-01, -1.89024e+00, 9.93756e-01, -1.89024e+00, 9.87512e-01 );
ofosakar 2:8b790c03a760 30 //
ofosakar 2:8b790c03a760 31 //
ofosakar 2:8b790c03a760 32 //volatile float TOTAL_SAMPLE_SUM = 0;
ofosakar 2:8b790c03a760 33 //volatile long NUMBER_SAMPLES = 0;
ofosakar 2:8b790c03a760 34 //
ofosakar 2:8b790c03a760 35 //const int numEmgCache = 50;
ofosakar 2:8b790c03a760 36 //float emgCache1[numEmgCache]; //sorted from new to old;
ofosakar 2:8b790c03a760 37 //float emgCache2[numEmgCache]; //sorted from new to old;
ofosakar 2:8b790c03a760 38 //
ofosakar 2:8b790c03a760 39 //void addFirst(float newValue, float array[], int size) {
ofosakar 2:8b790c03a760 40 // for (int i = size - 2; i >= 0; i--) {
ofosakar 2:8b790c03a760 41 // array[i+1] = array[i];
ofosakar 2:8b790c03a760 42 // }
ofosakar 2:8b790c03a760 43 // array[0] = newValue;
ofosakar 2:8b790c03a760 44 //}
ofosakar 2:8b790c03a760 45 //
ofosakar 2:8b790c03a760 46 //float average(float newValue, float array[], int size) {
ofosakar 2:8b790c03a760 47 // float sum = 0;
ofosakar 2:8b790c03a760 48 // for (int i = size - 2; i >= 0; i--) {
ofosakar 2:8b790c03a760 49 // sum += array[i];
ofosakar 2:8b790c03a760 50 // }
ofosakar 2:8b790c03a760 51 // // array[0] = newValue;
ofosakar 2:8b790c03a760 52 // sum += newValue;
ofosakar 2:8b790c03a760 53 // return sum / size;
ofosakar 2:8b790c03a760 54 //}
ofosakar 1:984b6b6812c7 55 //
ofosakar 2:8b790c03a760 56 ////shifts the array by adding the new emg value up front.
ofosakar 2:8b790c03a760 57 ////returns the new calculated average
ofosakar 2:8b790c03a760 58 //float movingAverage(float newValue, float array[], int size) {
ofosakar 2:8b790c03a760 59 // float sum = 0;
ofosakar 2:8b790c03a760 60 // for (int i = size - 2; i >= 0; i--) {
ofosakar 2:8b790c03a760 61 // array[i+1] = array[i];
ofosakar 2:8b790c03a760 62 // sum += array[i];
ofosakar 2:8b790c03a760 63 // }
ofosakar 2:8b790c03a760 64 // array[0] = newValue;
ofosakar 2:8b790c03a760 65 // sum += newValue;
ofosakar 2:8b790c03a760 66 // return sum / size;
ofosakar 2:8b790c03a760 67 //}
ofosakar 2:8b790c03a760 68 //
ofosakar 2:8b790c03a760 69 //float sum(float array[], int size) {
ofosakar 2:8b790c03a760 70 // float sum = 0;
ofosakar 2:8b790c03a760 71 // for (int i = 0; i < size; i++) {
ofosakar 2:8b790c03a760 72 // sum += array[i];
ofosakar 2:8b790c03a760 73 // }
ofosakar 2:8b790c03a760 74 // return sum;
ofosakar 2:8b790c03a760 75 //}
ofosakar 2:8b790c03a760 76 //
ofosakar 2:8b790c03a760 77 //float mean(float array[], int size) {
ofosakar 2:8b790c03a760 78 // return sum(array, size) / size;
ofosakar 2:8b790c03a760 79 //}
ofosakar 2:8b790c03a760 80 //
ofosakar 2:8b790c03a760 81 //float meanSquare(float array[], int size) {
ofosakar 2:8b790c03a760 82 // float naam[size];
ofosakar 2:8b790c03a760 83 // for(int i = 0; i < size; i++) {
ofosakar 2:8b790c03a760 84 // naam[i] = pow(array[i], 2);
ofosakar 2:8b790c03a760 85 // }
ofosakar 2:8b790c03a760 86 // return sum(naam, size) / size;
ofosakar 2:8b790c03a760 87 //}
ofosakar 2:8b790c03a760 88 //
ofosakar 2:8b790c03a760 89 //float variance(float array[], int size, float avg) {
ofosakar 2:8b790c03a760 90 // float squaredDifferences[size];
ofosakar 2:8b790c03a760 91 // for (int i = 0; i < size; i++) {
ofosakar 2:8b790c03a760 92 // float difference = array[i] - avg;
ofosakar 2:8b790c03a760 93 // squaredDifferences[i] = difference*difference;
ofosakar 2:8b790c03a760 94 // }
ofosakar 2:8b790c03a760 95 // return mean(squaredDifferences, size);
ofosakar 2:8b790c03a760 96 //}
ofosakar 2:8b790c03a760 97 //
ofosakar 2:8b790c03a760 98 //float standardDeviation(float array[], int size, float avg) {
ofosakar 2:8b790c03a760 99 // return sqrt(variance(array, size, avg));
ofosakar 2:8b790c03a760 100 //}
ofosakar 2:8b790c03a760 101 //
ofosakar 2:8b790c03a760 102 //int decide(float value, float threshold) {
ofosakar 2:8b790c03a760 103 // return value < threshold ? 0 : 1;
ofosakar 2:8b790c03a760 104 //}
ofosakar 2:8b790c03a760 105 //
ofosakar 2:8b790c03a760 106 //float rectifier(float value) {
ofosakar 2:8b790c03a760 107 // return fabs(value - 0.5f)*2.0f;
ofosakar 2:8b790c03a760 108 //}
ofosakar 2:8b790c03a760 109 //
ofosakar 2:8b790c03a760 110 //void processEMG() {
ofosakar 2:8b790c03a760 111 // float emgOne = emg1.read();
ofosakar 2:8b790c03a760 112 // scope.set(0, emgOne);
ofosakar 2:8b790c03a760 113 // float notch1 = bqc1.step( emgOne );
ofosakar 2:8b790c03a760 114 //
ofosakar 2:8b790c03a760 115 // float emgTwo = emg2.read();
ofosakar 2:8b790c03a760 116 // scope.set(1, emgTwo);
ofosakar 2:8b790c03a760 117 // float notch2 = bqc2.step( emgTwo );
ofosakar 2:8b790c03a760 118 //
ofosakar 1:984b6b6812c7 119 //
ofosakar 1:984b6b6812c7 120 //
ofosakar 2:8b790c03a760 121 // float rect1 = rectifier(notch1);
ofosakar 2:8b790c03a760 122 //// scope.set(2, rect1);
ofosakar 2:8b790c03a760 123 //
ofosakar 2:8b790c03a760 124 // float rect2 = rectifier(notch2);
ofosakar 2:8b790c03a760 125 //// scope.set(3, rect2);
ofosakar 2:8b790c03a760 126 //
ofosakar 2:8b790c03a760 127 //
ofosakar 2:8b790c03a760 128 // float filtered1 = movingAverage( rect1, emgCache1, numEmgCache);
ofosakar 2:8b790c03a760 129 // scope.set(2, filtered1);
ofosakar 2:8b790c03a760 130 //
ofosakar 2:8b790c03a760 131 // float filtered2 = movingAverage( rect2, emgCache2, numEmgCache);
ofosakar 2:8b790c03a760 132 // scope.set(3, filtered2);
ofosakar 2:8b790c03a760 133 //
ofosakar 2:8b790c03a760 134 // float threshold1 = 0.114318;
ofosakar 2:8b790c03a760 135 // float threshold2 = 0.118785;
ofosakar 2:8b790c03a760 136 // int decide1 = decide(filtered1 , threshold1);
ofosakar 2:8b790c03a760 137 // scope.set(4, decide1);
ofosakar 2:8b790c03a760 138 //
ofosakar 2:8b790c03a760 139 // int decide2 = decide(filtered2 , threshold2);
ofosakar 2:8b790c03a760 140 // scope.set(5, decide2);
ofosakar 2:8b790c03a760 141 //
ofosakar 2:8b790c03a760 142 //
ofosakar 2:8b790c03a760 143 // scope.send();
ofosakar 2:8b790c03a760 144 //}
ofosakar 2:8b790c03a760 145 ////
ofosakar 2:8b790c03a760 146 ////int main()
ofosakar 2:8b790c03a760 147 ////{
ofosakar 2:8b790c03a760 148 //// bqc1.add( &bq11 );
ofosakar 2:8b790c03a760 149 //// bqc2.add( &bq12 );
ofosakar 2:8b790c03a760 150 ////
ofosakar 2:8b790c03a760 151 ////
ofosakar 2:8b790c03a760 152 ////// bqc1.add( &bq11 );
ofosakar 2:8b790c03a760 153 ////// bqc2.add( &bq12 );
ofosakar 2:8b790c03a760 154 //// // 500 HZ Ticker
ofosakar 2:8b790c03a760 155 //// ticker.attach(&processEMG, 0.002);
ofosakar 2:8b790c03a760 156 //// while (true);
ofosakar 2:8b790c03a760 157 ////}