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: biquadFilter mbed
emg-utils.cpp
- Committer:
- ofosakar
- Date:
- 2016-11-02
- Revision:
- 2:8b790c03a760
- Parent:
- 1:984b6b6812c7
File content as of revision 2:8b790c03a760:
//#include "mbed.h" //#include "HIDScope.h" //#include "BiQuad.h" //#include "math.h" //#include "emg-utils.h" // // //AnalogIn emg1(A0); //AnalogIn emg2(A1); // //HIDScope scope(6); //Ticker ticker; // //BiQuadChain bqc1; //BiQuadChain bqc2; // //// EMG BIQUAD 1 ////Bandpass butterworth filter + Notch butterworth filter. ////Bandpass: 10 --- 500 Hz ////No Bandpass filters ////Nothc: 50 +- 2 Hz //BiQuad bq11( 9.93756e-01, -1.89024e+00, 9.93756e-01, -1.89024e+00, 9.87512e-01 ); // //// EMG BIQUAD 2 ////Bandpass butterworth filter + Notch butterworth filter. ////Bandpass: 10 --- 500 Hz ////No Bandpass filters ////Nothc: 50 +- 2 Hz //BiQuad bq12( 9.93756e-01, -1.89024e+00, 9.93756e-01, -1.89024e+00, 9.87512e-01 ); // // //volatile float TOTAL_SAMPLE_SUM = 0; //volatile long NUMBER_SAMPLES = 0; // //const int numEmgCache = 50; //float emgCache1[numEmgCache]; //sorted from new to old; //float emgCache2[numEmgCache]; //sorted from new to old; // //void addFirst(float newValue, float array[], int size) { // for (int i = size - 2; i >= 0; i--) { // array[i+1] = array[i]; // } // array[0] = newValue; //} // //float average(float newValue, float array[], int size) { // float sum = 0; // for (int i = size - 2; i >= 0; i--) { // sum += array[i]; // } // // array[0] = newValue; // sum += newValue; // return sum / size; //} // ////shifts the array by adding the new emg value up front. ////returns the new calculated average //float movingAverage(float newValue, float array[], int size) { // float sum = 0; // for (int i = size - 2; i >= 0; i--) { // array[i+1] = array[i]; // sum += array[i]; // } // array[0] = newValue; // sum += newValue; // return sum / size; //} // //float sum(float array[], int size) { // float sum = 0; // for (int i = 0; i < size; i++) { // sum += array[i]; // } // return sum; //} // //float mean(float array[], int size) { // return sum(array, size) / size; //} // //float meanSquare(float array[], int size) { // float naam[size]; // for(int i = 0; i < size; i++) { // naam[i] = pow(array[i], 2); // } // return sum(naam, size) / size; //} // //float variance(float array[], int size, float avg) { // float squaredDifferences[size]; // for (int i = 0; i < size; i++) { // float difference = array[i] - avg; // squaredDifferences[i] = difference*difference; // } // return mean(squaredDifferences, size); //} // //float standardDeviation(float array[], int size, float avg) { // return sqrt(variance(array, size, avg)); //} // //int decide(float value, float threshold) { // return value < threshold ? 0 : 1; //} // //float rectifier(float value) { // return fabs(value - 0.5f)*2.0f; //} // //void processEMG() { // float emgOne = emg1.read(); // scope.set(0, emgOne); // float notch1 = bqc1.step( emgOne ); // // float emgTwo = emg2.read(); // scope.set(1, emgTwo); // float notch2 = bqc2.step( emgTwo ); // // // // float rect1 = rectifier(notch1); //// scope.set(2, rect1); // // float rect2 = rectifier(notch2); //// scope.set(3, rect2); // // // float filtered1 = movingAverage( rect1, emgCache1, numEmgCache); // scope.set(2, filtered1); // // float filtered2 = movingAverage( rect2, emgCache2, numEmgCache); // scope.set(3, filtered2); // // float threshold1 = 0.114318; // float threshold2 = 0.118785; // int decide1 = decide(filtered1 , threshold1); // scope.set(4, decide1); // // int decide2 = decide(filtered2 , threshold2); // scope.set(5, decide2); // // // scope.send(); //} //// ////int main() ////{ //// bqc1.add( &bq11 ); //// bqc2.add( &bq12 ); //// //// ////// bqc1.add( &bq11 ); ////// bqc2.add( &bq12 ); //// // 500 HZ Ticker //// ticker.attach(&processEMG, 0.002); //// while (true); ////}