filtering biceps en triceps

Dependencies:   HIDScope mbed-dsp mbed

Committer:
DominiqueC
Date:
Fri Oct 17 17:06:59 2014 +0000
Revision:
0:055b4123367c
Child:
1:d4f3f7b24852
alleen biceps

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 0:055b4123367c 19 HIDScope scope(5);
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 0:055b4123367c 40 /*variable to store value in*/
DominiqueC 0:055b4123367c 41 uint16_t emg_value;
DominiqueC 0:055b4123367c 42 float emg_value_f32;
DominiqueC 0:055b4123367c 43 float filtered_emg_notch;
DominiqueC 0:055b4123367c 44 float filtered_emg_notch_highpass;
DominiqueC 0:055b4123367c 45 float filtered_emg_notch_highpass_lowpass;
DominiqueC 0:055b4123367c 46 float filtered_emg_eindsignaal_abs;
DominiqueC 0:055b4123367c 47 /*put raw emg value both in red and in emg_value*/
DominiqueC 0:055b4123367c 48 emg_value = emg0.read_u16(); // read direct ADC result, converted to 16 bit integer (0..2^16 = 0..65536 = 0..3.3V)
DominiqueC 0:055b4123367c 49 emg_value_f32 = emg0.read();
DominiqueC 0:055b4123367c 50
DominiqueC 0:055b4123367c 51 //process emg
DominiqueC 0:055b4123367c 52 arm_biquad_cascade_df1_f32(&notch, &emg_value_f32, &filtered_emg_notch, 1 );
DominiqueC 0:055b4123367c 53 arm_biquad_cascade_df1_f32(&highpass, &filtered_emg_notch, &filtered_emg_notch_highpass, 1 );
DominiqueC 0:055b4123367c 54 arm_biquad_cascade_df1_f32(&lowpass, &filtered_emg_notch_highpass, &filtered_emg_notch_highpass_lowpass, 1 );
DominiqueC 0:055b4123367c 55 filtered_emg_eindsignaal_abs = 10*fabs(filtered_emg_notch_highpass_lowpass);
DominiqueC 0:055b4123367c 56
DominiqueC 0:055b4123367c 57 scope.set(0,emg_value_f32);
DominiqueC 0:055b4123367c 58 scope.set(1,filtered_emg_notch);
DominiqueC 0:055b4123367c 59 scope.set(2,filtered_emg_notch_highpass);
DominiqueC 0:055b4123367c 60 scope.set(3,filtered_emg_notch_highpass_lowpass);
DominiqueC 0:055b4123367c 61 scope.set(4,filtered_emg_eindsignaal_abs);
DominiqueC 0:055b4123367c 62 scope.send();
DominiqueC 0:055b4123367c 63 }
DominiqueC 0:055b4123367c 64
DominiqueC 0:055b4123367c 65 int main()
DominiqueC 0:055b4123367c 66 {
DominiqueC 0:055b4123367c 67 Ticker log_timer;
DominiqueC 0:055b4123367c 68 //set up filters. Use external array for constants
DominiqueC 0:055b4123367c 69 arm_biquad_cascade_df1_init_f32(&notch,1 , notch_const, notch_states);
DominiqueC 0:055b4123367c 70 arm_biquad_cascade_df1_init_f32(&highpass,1 ,highpass_const,highpass_states);
DominiqueC 0:055b4123367c 71 arm_biquad_cascade_df1_init_f32(&lowpass,1 ,lowpass_const,lowpass_states);
DominiqueC 0:055b4123367c 72
DominiqueC 0:055b4123367c 73 log_timer.attach(looper, 0.005);
DominiqueC 0:055b4123367c 74 while(1) //Loop
DominiqueC 0:055b4123367c 75 {
DominiqueC 0:055b4123367c 76 /*Empty!*/
DominiqueC 0:055b4123367c 77 /*Everything is handled by the interrupt routine now!*/
DominiqueC 0:055b4123367c 78 }
DominiqueC 0:055b4123367c 79 }