oldexamplecode
Dependencies: mbed
PSDdetection.cpp
- Committer:
- rik
- Date:
- 2017-03-24
- Revision:
- 0:6863633bf8a4
File content as of revision 0:6863633bf8a4:
#include "PSDdetection.h" Arm::Arm(){ for (int i = 0; i<4; i++) prevEMG[i] = 0; EMGreference = 140; } // Sets a new reference level void Arm::setReference(int reflevel){ this->EMGreference = reflevel; } // Updates the array with a new sample and checks wheter a muscle is active bool Arm::checksample(int emgsample){ bool MuscleIsActive = false; // Shift all the previous values in time for (int i = 3; i>0; i--){ prevEMG[i] = prevEMG[i - 1]; } // Put in the latest sample prevEMG[0] = emgsample; // Weighted average filter to smoothen out the response int average = (prevEMG[0] * 1 + prevEMG[1] * 0.63 + prevEMG[2] * 0.45 + prevEMG[3] * 0.22) / (1 + 0.63 + 0.45 + 0.22); // Check with reference level to determine if it is if (average > (EMGreference + EMGtriggerlevel)){ MuscleIsActive = true; } return MuscleIsActive; } int biquad10(int emgsample){ //initialize filter values float filteredValue,a0,a1,a2,b1,b2; float intermediateValue1[2]intermediateValue2[2]; //filter for 10hz -6bd biquad a0=0.0009446857782217186; a1=0.0018893715564434373; a2=0.0009446857782217186; b1=-1.9111847961312216; b2=0.9149635392441086; //calculations for transposed direct form 2 intermediateValue1[0] = a2*emgsample-b2*filteredValue; intermediateValue2[0] = a2*emgsample-b1*filteredValue+intermediateValue1[1]; filteredValue = a0*filteredValue+intermediateValue2[1]; intermediateValue1[1] = intermediateValue1[0]; intermediateValue2[1] = intermediateValue2[0]; return ((int)filteredValue); }