filtering biceps en triceps

Dependencies:   HIDScope mbed-dsp mbed

Committer:
DominiqueC
Date:
Fri Oct 17 17:49:44 2014 +0000
Revision:
3:70f9de0ba6e0
Parent:
2:566f1af9d37d
Child:
4:ba04bae0f6fc
alleen biceps alle filters

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DominiqueC 0:055b4123367c 1 /***************************************/
DominiqueC 0:055b4123367c 2 /* */
DominiqueC 0:055b4123367c 3 /* BRONCODE GROEP 5, MODULE 9, 2014 */
DominiqueC 0:055b4123367c 4 /* *****-THE SLAP-****** */
DominiqueC 0:055b4123367c 5 /* */
DominiqueC 0:055b4123367c 6 /* -Dominique Clevers */
DominiqueC 0:055b4123367c 7 /* -Rianne van Dommelen */
DominiqueC 0:055b4123367c 8 /* -Daan de Muinck Keizer */
DominiqueC 0:055b4123367c 9 /* -David den Houting */
DominiqueC 0:055b4123367c 10 /* -Marjolein Thijssen */
DominiqueC 0:055b4123367c 11 /***************************************/
DominiqueC 0:055b4123367c 12 #include "mbed.h"
DominiqueC 0:055b4123367c 13 #include "HIDScope.h"
DominiqueC 0:055b4123367c 14 #include "arm_math.h"
DominiqueC 0:055b4123367c 15
DominiqueC 0:055b4123367c 16 //Define objects
DominiqueC 0:055b4123367c 17 AnalogIn emg0(PTB0); //Biceps
DominiqueC 0:055b4123367c 18 AnalogIn emg1(PTB1); //Triceps
DominiqueC 3:70f9de0ba6e0 19 HIDScope scope(4);
DominiqueC 0:055b4123367c 20
DominiqueC 0:055b4123367c 21 arm_biquad_casd_df1_inst_f32 notch;
DominiqueC 0:055b4123367c 22 //constants for 50Hz notch
DominiqueC 0:055b4123367c 23 float notch_const[] = {0.9695312529087462, -0.0, 0.9695312529087462, 0.0, -0.9390625058174924};
DominiqueC 0:055b4123367c 24 //state values
DominiqueC 0:055b4123367c 25 float notch_states[4];
DominiqueC 0:055b4123367c 26 arm_biquad_casd_df1_inst_f32 highpass;
DominiqueC 0:055b4123367c 27 //constants for 20Hz highpass
DominiqueC 0:055b4123367c 28 float highpass_const[] = {0.638945525159022, -1.277891050318045, 0.638945525159022, 1.142980502539901, -0.412801598096189};
DominiqueC 0:055b4123367c 29 //state values
DominiqueC 0:055b4123367c 30 float highpass_states[4];
DominiqueC 0:055b4123367c 31 //constants for 80Hz lowpass
DominiqueC 0:055b4123367c 32 arm_biquad_casd_df1_inst_f32 lowpass;
DominiqueC 0:055b4123367c 33 float lowpass_const[] = {0.638945525159022, 1.277891050318045, 0.638945525159022, -1.142980502539901, -0.412801598096189};
DominiqueC 0:055b4123367c 34 //state values
DominiqueC 0:055b4123367c 35 float lowpass_states[4];
DominiqueC 0:055b4123367c 36
DominiqueC 0:055b4123367c 37
DominiqueC 0:055b4123367c 38 void looper()
DominiqueC 0:055b4123367c 39 {
DominiqueC 1:d4f3f7b24852 40 /*variable to store value in for biceps*/
DominiqueC 1:d4f3f7b24852 41 uint16_t emg0_value;
DominiqueC 1:d4f3f7b24852 42 float emg0_value_f32;
DominiqueC 2:566f1af9d37d 43 float filtered_emg0_notch;
DominiqueC 2:566f1af9d37d 44 float filtered_emg0_notch_highpass;
DominiqueC 2:566f1af9d37d 45 float filtered_emg0_notch_highpass_lowpass;
DominiqueC 1:d4f3f7b24852 46 float filtered_emg0_eindsignaal_abs;
DominiqueC 1:d4f3f7b24852 47
DominiqueC 1:d4f3f7b24852 48 /*variable to store value in for triceps*/
DominiqueC 1:d4f3f7b24852 49 uint16_t emg1_value;
DominiqueC 1:d4f3f7b24852 50 float emg1_value_f32;
DominiqueC 2:566f1af9d37d 51 float filtered_emg1_notch;
DominiqueC 2:566f1af9d37d 52 float filtered_emg1_notch_highpass;
DominiqueC 2:566f1af9d37d 53 float filtered_emg1_notch_highpass_lowpass;
DominiqueC 1:d4f3f7b24852 54 float filtered_emg1_eindsignaal_abs;
DominiqueC 1:d4f3f7b24852 55
DominiqueC 0:055b4123367c 56 /*put raw emg value both in red and in emg_value*/
DominiqueC 1:d4f3f7b24852 57 emg0_value = emg0.read_u16(); // read direct ADC result, converted to 16 bit integer (0..2^16 = 0..65536 = 0..3.3V)
DominiqueC 1:d4f3f7b24852 58 emg0_value_f32 = emg0.read(); //?????moet hiet eindsignaal ook bij staan???????
DominiqueC 1:d4f3f7b24852 59
DominiqueC 1:d4f3f7b24852 60 emg1_value = emg1.read_u16(); // read direct ADC result, converted to 16 bit integer (0..2^16 = 0..65536 = 0..3.3V)
DominiqueC 1:d4f3f7b24852 61 emg1_value_f32 = emg1.read();
DominiqueC 0:055b4123367c 62
DominiqueC 1:d4f3f7b24852 63 //process emg biceps
DominiqueC 1:d4f3f7b24852 64 arm_biquad_cascade_df1_f32(&notch, &emg0_value_f32, &filtered_emg0_notch, 1 );
DominiqueC 1:d4f3f7b24852 65 arm_biquad_cascade_df1_f32(&highpass, &filtered_emg0_notch, &filtered_emg0_notch_highpass, 1 );
DominiqueC 1:d4f3f7b24852 66 arm_biquad_cascade_df1_f32(&lowpass, &filtered_emg0_notch_highpass, &filtered_emg0_notch_highpass_lowpass, 1 );
DominiqueC 1:d4f3f7b24852 67 filtered_emg0_eindsignaal_abs = 10*fabs(filtered_emg0_notch_highpass_lowpass);
DominiqueC 0:055b4123367c 68
DominiqueC 1:d4f3f7b24852 69 //process emg triceps
DominiqueC 1:d4f3f7b24852 70 arm_biquad_cascade_df1_f32(&notch, &emg1_value_f32, &filtered_emg1_notch, 1 );
DominiqueC 1:d4f3f7b24852 71 arm_biquad_cascade_df1_f32(&highpass, &filtered_emg1_notch, &filtered_emg1_notch_highpass, 1 );
DominiqueC 1:d4f3f7b24852 72 arm_biquad_cascade_df1_f32(&lowpass, &filtered_emg1_notch_highpass, &filtered_emg1_notch_highpass_lowpass, 1 );
DominiqueC 1:d4f3f7b24852 73 filtered_emg1_eindsignaal_abs = 10*fabs(filtered_emg1_notch_highpass_lowpass);
DominiqueC 1:d4f3f7b24852 74
DominiqueC 1:d4f3f7b24852 75 //send to PC
DominiqueC 1:d4f3f7b24852 76 scope.set(0,emg0_value_f32);
DominiqueC 3:70f9de0ba6e0 77 scope.set(1,filtered_emg0_notch);
DominiqueC 3:70f9de0ba6e0 78 scope.set(2,filtered_emg0_notch_highpass);
DominiqueC 3:70f9de0ba6e0 79 scope.set(3,filtered_emg0_notch_highpass_lowpass);
DominiqueC 3:70f9de0ba6e0 80 scope.set(4,filtered_emg0_eindsignaal_abs);
DominiqueC 0:055b4123367c 81 scope.send();
DominiqueC 0:055b4123367c 82 }
DominiqueC 3:70f9de0ba6e0 83 //scope.set(0,emg0_value_f32);
DominiqueC 3:70f9de0ba6e0 84 //scope.set(1,filtered_emg0_eindsignaal_abs);
DominiqueC 3:70f9de0ba6e0 85 //scope.set(3,emg1_value_f32);
DominiqueC 3:70f9de0ba6e0 86 //scope.set(4,filtered_emg1_eindsignaal_abs);
DominiqueC 3:70f9de0ba6e0 87 //scope.send();
DominiqueC 3:70f9de0ba6e0 88 //}
DominiqueC 0:055b4123367c 89
DominiqueC 0:055b4123367c 90 int main()
DominiqueC 0:055b4123367c 91 {
DominiqueC 0:055b4123367c 92 Ticker log_timer;
DominiqueC 0:055b4123367c 93 //set up filters. Use external array for constants
DominiqueC 0:055b4123367c 94 arm_biquad_cascade_df1_init_f32(&notch,1 , notch_const, notch_states);
DominiqueC 0:055b4123367c 95 arm_biquad_cascade_df1_init_f32(&highpass,1 ,highpass_const,highpass_states);
DominiqueC 0:055b4123367c 96 arm_biquad_cascade_df1_init_f32(&lowpass,1 ,lowpass_const,lowpass_states);
DominiqueC 0:055b4123367c 97
DominiqueC 0:055b4123367c 98 log_timer.attach(looper, 0.005);
DominiqueC 0:055b4123367c 99 while(1) //Loop
DominiqueC 0:055b4123367c 100 {
DominiqueC 0:055b4123367c 101 /*Empty!*/
DominiqueC 0:055b4123367c 102 /*Everything is handled by the interrupt routine now!*/
DominiqueC 0:055b4123367c 103 }
DominiqueC 0:055b4123367c 104 }