aanpassing met notch

Dependencies:   Encoder HIDScope MODSERIAL mbed

Fork of TEST by Daan

Committer:
DominiqueC
Date:
Thu Oct 09 13:22:31 2014 +0000
Revision:
4:81448a7baf64
Parent:
3:ef4d1423db92
Samenvoeging highpass en notch filter

Who changed what in which revision?

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