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 12:26:39 2014 +0000
Revision:
0:68c8cf9a1f96
Child:
1:a21d78fa1712
Originieel, lowpass, highpass 0.5hz

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 0:68c8cf9a1f96 15
Daanmk 0:68c8cf9a1f96 16 //Define objects
Daanmk 0:68c8cf9a1f96 17 AnalogIn emg0(PTB0); //Biceps
Daanmk 0:68c8cf9a1f96 18 AnalogIn emg1(PTB1); //Triceps
Daanmk 0:68c8cf9a1f96 19 HIDScope scope(2);
Daanmk 0:68c8cf9a1f96 20
Daanmk 0:68c8cf9a1f96 21 arm_biquad_casd_df1_inst_f32 lowpass;
Daanmk 0:68c8cf9a1f96 22 //constants for 5Hz lowpass
Daanmk 0:68c8cf9a1f96 23 float lowpass_const[] = {0.02008337 , 0.04016673 , 0.02008337 , 1.56101808 , -0.64135154};
Daanmk 0:68c8cf9a1f96 24 //state values
Daanmk 0:68c8cf9a1f96 25 float lowpass_states[4];
Daanmk 0:68c8cf9a1f96 26 arm_biquad_casd_df1_inst_f32 highpass;
Daanmk 0:68c8cf9a1f96 27 //constants for 0.5Hz highpass
Daanmk 0:68c8cf9a1f96 28 float highpass_const[] = {0.97803048, -1.95606096, 0.97803048, 1.95557824 , -0.95654368};
Daanmk 0:68c8cf9a1f96 29 //state values
Daanmk 0:68c8cf9a1f96 30 float highpass_states[4];
Daanmk 0:68c8cf9a1f96 31
Daanmk 0:68c8cf9a1f96 32 void looper()
Daanmk 0:68c8cf9a1f96 33 {
Daanmk 0:68c8cf9a1f96 34 /*variable to store value in*/
Daanmk 0:68c8cf9a1f96 35 uint16_t emg_value;
Daanmk 0:68c8cf9a1f96 36 float filtered_emg;
Daanmk 0:68c8cf9a1f96 37 float emg_value_f32;
Daanmk 0:68c8cf9a1f96 38 /*put raw emg value both in red and in emg_value*/
Daanmk 0:68c8cf9a1f96 39 emg_value = emg0.read_u16(); // read direct ADC result, converted to 16 bit integer (0..2^16 = 0..65536 = 0..3.3V)
Daanmk 0:68c8cf9a1f96 40 emg_value_f32 = emg0.read();
Daanmk 0:68c8cf9a1f96 41
Daanmk 0:68c8cf9a1f96 42 //process emg
Daanmk 0:68c8cf9a1f96 43 arm_biquad_cascade_df1_f32(&highpass, &emg_value_f32, &filtered_emg, 1 );
Daanmk 0:68c8cf9a1f96 44 filtered_emg = fabs(filtered_emg);
Daanmk 0:68c8cf9a1f96 45 arm_biquad_cascade_df1_f32(&lowpass, &filtered_emg, &filtered_emg, 1 );
Daanmk 0:68c8cf9a1f96 46
Daanmk 0:68c8cf9a1f96 47 /*send value to PC. */
Daanmk 0:68c8cf9a1f96 48 scope.set(0,emg_value); //uint value
Daanmk 0:68c8cf9a1f96 49 scope.set(1,filtered_emg); //processed float
Daanmk 0:68c8cf9a1f96 50 scope.send();
Daanmk 0:68c8cf9a1f96 51
Daanmk 0:68c8cf9a1f96 52 }
Daanmk 0:68c8cf9a1f96 53
Daanmk 0:68c8cf9a1f96 54 int main()
Daanmk 0:68c8cf9a1f96 55 {
Daanmk 0:68c8cf9a1f96 56 Ticker log_timer;
Daanmk 0:68c8cf9a1f96 57 //set up filters. Use external array for constants
Daanmk 0:68c8cf9a1f96 58 arm_biquad_cascade_df1_init_f32(&lowpass,1 , lowpass_const, lowpass_states);
Daanmk 0:68c8cf9a1f96 59 arm_biquad_cascade_df1_init_f32(&highpass,1 ,highpass_const,highpass_states);
Daanmk 0:68c8cf9a1f96 60
Daanmk 0:68c8cf9a1f96 61 log_timer.attach(looper, 0.005);
Daanmk 0:68c8cf9a1f96 62 while(1) //Loop
Daanmk 0:68c8cf9a1f96 63 {
Daanmk 0:68c8cf9a1f96 64 /*Empty!*/
Daanmk 0:68c8cf9a1f96 65 /*Everything is handled by the interrupt routine now!*/
Daanmk 0:68c8cf9a1f96 66 }
Daanmk 0:68c8cf9a1f96 67 }