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 mbed-dsp mbed
Fork of Project5-filteringBiceps by
Revision 31:6b6f60f64cb6, committed 2014-10-20
- Comitter:
- DominiqueC
- Date:
- Mon Oct 20 08:40:39 2014 +0000
- Parent:
- 30:2162f7a82fc7
- Commit message:
- toevoeging movag
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon Oct 20 07:47:41 2014 +0000
+++ b/main.cpp Mon Oct 20 08:40:39 2014 +0000
@@ -12,11 +12,13 @@
#include "mbed.h"
#include "HIDScope.h"
#include "arm_math.h"
+#define TSAMP 0.005 // sampletijd 200 Hz
//Define objects
AnalogIn emg0(PTB0); //Biceps
AnalogIn emg1(PTB1); //Triceps
HIDScope scope(5);
+int const windowsamples = 60; //aantal samples waaruit het window voor MOVAG bestaat
arm_biquad_casd_df1_inst_f32 notch;
//constants for 50Hz notch
@@ -34,16 +36,15 @@
//state values
float lowpass_states[4];
-
+//state values looper
+float emg_value_f32,filtered_emg_notch,filtered_emg_notch_highpass,filtered_emg_notch_highpass_lowpass,filtered_emg_eindsignaal_abs;
+float xpos_max,xpos_min,xneg_max,xneg_min; // kalibratiewaardes
+float emg_biceps [windowsamples];
+
void looper()
{
/*variable to store value in*/
uint16_t emg_value;
- float emg_value_f32;
- float filtered_emg_notch;
- float filtered_emg_notch_highpass;
- float filtered_emg_notch_highpass_lowpass;
- float filtered_emg_eindsignaal_abs;
/*put raw emg value both in red and in emg_value*/
emg_value = emg0.read_u16(); // read direct ADC result, converted to 16 bit integer (0..2^16 = 0..65536 = 0..3.3V)
emg_value_f32 = emg0.read();
@@ -53,44 +54,8 @@
arm_biquad_cascade_df1_f32(&highpass, &filtered_emg_notch, &filtered_emg_notch_highpass, 1 );
arm_biquad_cascade_df1_f32(&lowpass, &filtered_emg_notch_highpass, &filtered_emg_notch_highpass_lowpass, 1 );
filtered_emg_eindsignaal_abs = 10*fabs(filtered_emg_notch_highpass_lowpass); //gelijkrichter
-
- //(Movag) Median berekenen
-
- int compare (const void * a, const void * b)
-{
- return ( *(int*)a - *(int*)b );
-}
-
-int main() {
-
- float samples[5]={};
- float med[5]={};
- int count = 0;
- float sensval;
- while(1)
- {
- count += 1;
- sensval = input;
- med[4] = med[3];
- med[3] = med[2];
- med[2] = med[1];
- med[1] = med[0];
- med[0] = sensval;
-
- samples[4] = med[4];
- samples[3] = med[3];
- samples[2] = med[2];
- samples[1] = med[1];
- samples[0] = med[0];
-
- qsort (samples, 5, sizeof(int), compare);
-
- // show the averages
- pc.printf("\n%i %f %f",count,sensval,samples[2]);
- }
-}
- //eind
-
+ emg_biceps []= filtered_emg_eindsignaal_abs;
+
scope.set(0,emg_value_f32);
scope.set(1,filtered_emg_notch);
scope.set(2,filtered_emg_notch_highpass);
@@ -99,15 +64,44 @@
scope.send();
}
+ // movag berekenen
+void movag() {
+ //Variabelen voor berekenen gemiddelden
+ float avg1,avg2;
+ avg1=avg2=0;
+
+ //Inhoud van een buffer (=gefilterd signaal) optellen
+ for(int x=0; x<windowsamples; x++) {
+ avg1 = avg1 + (emg_biceps[x]);
+// avg2 = avg2 + (filtered_emg1_eindsignaal_abs[x]);
+ }
+
+ //Gemiddelde berekenen en relativeren tov maximum voluntary contraction
+ avg1 = avg1/windowsamples/xpos_max;
+ avg2 = avg2/windowsamples/xneg_max;
+ }
+
+//eind
+
int main()
{
+ //referentiewaarden bepalen (ergo kalibreren)
+ xpos_max = 0.25;
+ xpos_min = 0.1/xpos_max;
+ xneg_max = 0.20;
+ xneg_min = 0.1/xneg_max;
+
+ // Tickers
Ticker log_timer;
- //set up filters. Use external array for constants
+ Ticker window;
+
+ //set up filters. Use external array for constants
arm_biquad_cascade_df1_init_f32(¬ch,1 , notch_const, notch_states);
arm_biquad_cascade_df1_init_f32(&highpass,1 ,highpass_const,highpass_states);
arm_biquad_cascade_df1_init_f32(&lowpass,1 ,lowpass_const,lowpass_states);
- log_timer.attach(looper, 0.005);
+ log_timer.attach(looper, TSAMP);
+ window.attach(movag, TSAMP);
while(1) //Loop
{
/*Empty!*/
