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
Diff: emg-utils.cpp
- Revision:
- 2:8b790c03a760
- Parent:
- 1:984b6b6812c7
diff -r 984b6b6812c7 -r 8b790c03a760 emg-utils.cpp --- a/emg-utils.cpp Wed Nov 02 13:19:42 2016 +0000 +++ b/emg-utils.cpp Wed Nov 02 16:09:55 2016 +0000 @@ -1,157 +1,157 @@ -#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(); -} +//#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; +//} // -//int main() -//{ -// bqc1.add( &bq11 ); -// bqc2.add( &bq12 ); +////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 ); +// // // -//// bqc1.add( &bq11 ); -//// bqc2.add( &bq12 ); -// // 500 HZ Ticker -// ticker.attach(&processEMG, 0.002); -// while (true); -//} \ No newline at end of file +// 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); +////} \ No newline at end of file