werkend filter: 50 hz notch 20 hz hoogdoorlaat 80 hz laagdoorlaat geabsoluteerd vermenigvuldigd met 10

Dependencies:   HIDScope mbed-dsp mbed

Fork of Project5-filtering2 by Dominique Clevers

Committer:
Daanmk
Date:
Thu Oct 09 13:59:08 2014 +0000
Revision:
5:b96b7b8facbf
Parent:
4:c8ec56d87a5b
Child:
6:168e7e03e166
Triceps toegevoegd aan werkende variant

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Daanmk 0:68c8cf9a1f96 1 /***************************************/
Daanmk 0:68c8cf9a1f96 2 /* */
Daanmk 0:68c8cf9a1f96 3 /* BRONCODE GROEP 5, MODULE 9, 2014 */
Daanmk 0:68c8cf9a1f96 4 /* *****-THE SLAP-****** */
Daanmk 0:68c8cf9a1f96 5 /* */
Daanmk 0:68c8cf9a1f96 6 /* -Dominique Clevers */
Daanmk 0:68c8cf9a1f96 7 /* -Rianne van Dommelen */
Daanmk 0:68c8cf9a1f96 8 /* -Daan de Muinck Keizer */
Daanmk 0:68c8cf9a1f96 9 /* -David den Houting */
Daanmk 0:68c8cf9a1f96 10 /* -Marjolein Thijssen */
Daanmk 0:68c8cf9a1f96 11 /***************************************/
Daanmk 0:68c8cf9a1f96 12 #include "mbed.h"
Daanmk 0:68c8cf9a1f96 13 #include "HIDScope.h"
Daanmk 0:68c8cf9a1f96 14 #include "arm_math.h"
Daanmk 4:c8ec56d87a5b 15
Daanmk 0:68c8cf9a1f96 16 //Define objects
Daanmk 0:68c8cf9a1f96 17 AnalogIn emg0(PTB0); //Biceps
Daanmk 0:68c8cf9a1f96 18 AnalogIn emg1(PTB1); //Triceps
Daanmk 5:b96b7b8facbf 19 HIDScope scope(4);
Daanmk 4:c8ec56d87a5b 20
Daanmk 4:c8ec56d87a5b 21 arm_biquad_casd_df1_inst_f32 notch;
Daanmk 4:c8ec56d87a5b 22 //constants for 50Hz notch
Daanmk 4:c8ec56d87a5b 23 float notch_const[] = {0.5857841106784856, -1.3007020142696517e-16, 0.5857841106784856, -1.3007020142696517e-16, 0.17156822135697122};
Daanmk 0:68c8cf9a1f96 24 //state values
Daanmk 4:c8ec56d87a5b 25 float notch_states[4];
Daanmk 0:68c8cf9a1f96 26 arm_biquad_casd_df1_inst_f32 highpass;
Daanmk 3:9d5879b64f3c 27 //constants for 5Hz highpass
Daanmk 3:9d5879b64f3c 28 float highpass_const[] = {0.8948577513857248, -1.7897155027714495, 0.8948577513857248, 0.8008009266036016};
Daanmk 0:68c8cf9a1f96 29 //state values
Daanmk 0:68c8cf9a1f96 30 float highpass_states[4];
Daanmk 4:c8ec56d87a5b 31
Daanmk 0:68c8cf9a1f96 32 void looper()
Daanmk 0:68c8cf9a1f96 33 {
Daanmk 0:68c8cf9a1f96 34 /*variable to store value in*/
Daanmk 5:b96b7b8facbf 35 uint16_t emg_value0;
Daanmk 5:b96b7b8facbf 36 uint16_t emg_value1;
Daanmk 5:b96b7b8facbf 37 float filtered_emg0;
Daanmk 5:b96b7b8facbf 38 float filtered_emg1;
Daanmk 5:b96b7b8facbf 39 float emg_value0_f32;
Daanmk 5:b96b7b8facbf 40 float emg_value1_f32;
Daanmk 0:68c8cf9a1f96 41 /*put raw emg value both in red and in emg_value*/
Daanmk 5:b96b7b8facbf 42 emg_value0 = emg0.read_u16(); // read direct ADC result, converted to 16 bit integer (0..2^16 = 0..65536 = 0..3.3V) BICEPS
Daanmk 5:b96b7b8facbf 43 emg_value0_f32 = emg0.read();
Daanmk 5:b96b7b8facbf 44 emg_value1 = emg1.read_u16(); // read direct ADC result, converted to 16 bit integer (0..2^16 = 0..65536 = 0..3.3V) TRICEPS
Daanmk 5:b96b7b8facbf 45 emg_value1_f32 = emg1.read();
Daanmk 4:c8ec56d87a5b 46
Daanmk 0:68c8cf9a1f96 47 //process emg
Daanmk 5:b96b7b8facbf 48 arm_biquad_cascade_df1_f32(&highpass, &emg_value0_f32, &filtered_emg0, 1 );
Daanmk 5:b96b7b8facbf 49 filtered_emg0 = fabs(filtered_emg0);
Daanmk 5:b96b7b8facbf 50 arm_biquad_cascade_df1_f32(&notch, &filtered_emg0, &filtered_emg0, 1 );
Daanmk 5:b96b7b8facbf 51
Daanmk 5:b96b7b8facbf 52 arm_biquad_cascade_df1_f32(&highpass, &emg_value1_f32, &filtered_emg1, 1 );
Daanmk 5:b96b7b8facbf 53 filtered_emg1 = fabs(filtered_emg1);
Daanmk 5:b96b7b8facbf 54 arm_biquad_cascade_df1_f32(&notch, &filtered_emg1, &filtered_emg1, 1 );
Daanmk 0:68c8cf9a1f96 55
Daanmk 0:68c8cf9a1f96 56 /*send value to PC. */
Daanmk 5:b96b7b8facbf 57 scope.set(0,emg_value0); //uint value
Daanmk 5:b96b7b8facbf 58 scope.set(1,filtered_emg0); //processed float
Daanmk 5:b96b7b8facbf 59 scope.set(2,emg_value1); //uint value
Daanmk 5:b96b7b8facbf 60 scope.set(3,filtered_emg1); //processed float
Daanmk 0:68c8cf9a1f96 61 scope.send();
Daanmk 4:c8ec56d87a5b 62
Daanmk 0:68c8cf9a1f96 63 }
Daanmk 4:c8ec56d87a5b 64
Daanmk 0:68c8cf9a1f96 65 int main()
Daanmk 0:68c8cf9a1f96 66 {
Daanmk 0:68c8cf9a1f96 67 Ticker log_timer;
Daanmk 0:68c8cf9a1f96 68 //set up filters. Use external array for constants
Daanmk 4:c8ec56d87a5b 69 arm_biquad_cascade_df1_init_f32(&notch,1 , notch_const, notch_states);
Daanmk 0:68c8cf9a1f96 70 arm_biquad_cascade_df1_init_f32(&highpass,1 ,highpass_const,highpass_states);
Daanmk 0:68c8cf9a1f96 71
Daanmk 0:68c8cf9a1f96 72 log_timer.attach(looper, 0.005);
Daanmk 0:68c8cf9a1f96 73 while(1) //Loop
Daanmk 0:68c8cf9a1f96 74 {
Daanmk 0:68c8cf9a1f96 75 /*Empty!*/
Daanmk 0:68c8cf9a1f96 76 /*Everything is handled by the interrupt routine now!*/
Daanmk 0:68c8cf9a1f96 77 }
Daanmk 0:68c8cf9a1f96 78 }