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:
DominiqueC
Date:
Thu Oct 16 12:31:01 2014 +0000
Revision:
16:40d61297a7e1
Parent:
15:0c3fb81707a7
Child:
17:969e8c86dc7a
notch aangepast coefficienten

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 10:1efe8b0cddd0 19 HIDScope scope(5);
Daanmk 4:c8ec56d87a5b 20
Daanmk 4:c8ec56d87a5b 21 arm_biquad_casd_df1_inst_f32 notch;
Daanmk 4:c8ec56d87a5b 22 //constants for 50Hz notch
DominiqueC 15:0c3fb81707a7 23 float notch_const[] = {0.9695312529087462, -0.0, 0.9695312529087462, 1, -0.0, 0.9390625058174924};
Daanmk 0:68c8cf9a1f96 24 //state values
Daanmk 4:c8ec56d87a5b 25 float notch_states[4];
DominiqueC 16:40d61297a7e1 26 //arm_biquad_casd_df1_inst_f32 highpass;
Daanmk 3:9d5879b64f3c 27 //constants for 5Hz highpass
DominiqueC 16:40d61297a7e1 28 //float highpass_const[] = {0.8948577513857248, -1.7897155027714495, 0.8948577513857248, 1, -1.7786300789392977, 0.8008009266036016};
Daanmk 0:68c8cf9a1f96 29 //state values
DominiqueC 16:40d61297a7e1 30 //float highpass_states[4];
DominiqueC 12:8a30e43337bb 31 //constants for 80Hz lowpass
DominiqueC 13:1f0ac2425368 32 //arm_biquad_casd_df1_inst_f32 lowpass;
DominiqueC 15:0c3fb81707a7 33 //float lowpass_const[] = {0.6389437261127493, 1.2778874522254986, 0.6389437261127493, 1, 1.1429772843080919, 0.41279762014290533};
DominiqueC 12:8a30e43337bb 34 //state values
DominiqueC 13:1f0ac2425368 35 //float lowpass_states[4];
DominiqueC 11:a598cb27907f 36
Daanmk 4:c8ec56d87a5b 37
Daanmk 0:68c8cf9a1f96 38 void looper()
Daanmk 0:68c8cf9a1f96 39 {
Daanmk 0:68c8cf9a1f96 40 /*variable to store value in*/
Daanmk 0:68c8cf9a1f96 41 uint16_t emg_value;
Daanmk 0:68c8cf9a1f96 42 float filtered_emg;
Daanmk 10:1efe8b0cddd0 43 float filtered_emg_notch;
Daanmk 10:1efe8b0cddd0 44 float filtered_emg_abs;
Daanmk 0:68c8cf9a1f96 45 float emg_value_f32;
DominiqueC 12:8a30e43337bb 46 float filtered_emg_lowpass;
Daanmk 0:68c8cf9a1f96 47 /*put raw emg value both in red and in emg_value*/
Daanmk 0:68c8cf9a1f96 48 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 49 emg_value_f32 = emg0.read();
Daanmk 4:c8ec56d87a5b 50
Daanmk 0:68c8cf9a1f96 51 //process emg
DominiqueC 16:40d61297a7e1 52 //arm_biquad_cascade_df1_f32(&highpass, &emg_value_f32, &filtered_emg, 1 );
DominiqueC 16:40d61297a7e1 53 arm_biquad_cascade_df1_f32(&notch, &emg_value_f32, &filtered_emg_notch, 1 );
DominiqueC 13:1f0ac2425368 54 //arm_biquad_cascade_df1_f32(&notch, &filtered_emg_notch, &filtered_emg_lowpass, 1 );
DominiqueC 13:1f0ac2425368 55 //filtered_emg_abs = fabs(filtered_emg_lowpass);
DominiqueC 11:a598cb27907f 56
Daanmk 10:1efe8b0cddd0 57
Daanmk 0:68c8cf9a1f96 58 scope.set(0,emg_value); //uint value
Daanmk 0:68c8cf9a1f96 59 scope.set(1,filtered_emg); //processed float
Daanmk 10:1efe8b0cddd0 60 scope.set(2,filtered_emg_notch);
Daanmk 10:1efe8b0cddd0 61 scope.set(3,filtered_emg_abs);
DominiqueC 12:8a30e43337bb 62 scope.set(4,filtered_emg_lowpass);
Daanmk 0:68c8cf9a1f96 63 scope.send();
Daanmk 0:68c8cf9a1f96 64 }
Daanmk 4:c8ec56d87a5b 65
Daanmk 0:68c8cf9a1f96 66 int main()
Daanmk 0:68c8cf9a1f96 67 {
Daanmk 0:68c8cf9a1f96 68 Ticker log_timer;
Daanmk 0:68c8cf9a1f96 69 //set up filters. Use external array for constants
Daanmk 4:c8ec56d87a5b 70 arm_biquad_cascade_df1_init_f32(&notch,1 , notch_const, notch_states);
DominiqueC 16:40d61297a7e1 71 //arm_biquad_cascade_df1_init_f32(&highpass,1 ,highpass_const,highpass_states);
DominiqueC 13:1f0ac2425368 72 //arm_biquad_cascade_df1_init_f32(&lowpass,1 ,lowpass_const,lowpass_states);
Daanmk 0:68c8cf9a1f96 73
Daanmk 0:68c8cf9a1f96 74 log_timer.attach(looper, 0.005);
Daanmk 0:68c8cf9a1f96 75 while(1) //Loop
Daanmk 0:68c8cf9a1f96 76 {
Daanmk 0:68c8cf9a1f96 77 /*Empty!*/
Daanmk 0:68c8cf9a1f96 78 /*Everything is handled by the interrupt routine now!*/
Daanmk 0:68c8cf9a1f96 79 }
Daanmk 0:68c8cf9a1f96 80 }