pour daan

Dependencies:   HIDScope mbed-dsp mbed

Fork of Project5-filteringBiceps by Dominique Clevers

Files at this revision

API Documentation at this revision

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(&notch,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!*/