:)
Dependencies: HIDScope MODSERIAL mbed-dsp mbed
Fork of emg_filter by
Revision 26:b93c82fb6e1d, committed 2014-10-17
- Comitter:
- s1340735
- Date:
- Fri Oct 17 08:32:39 2014 +0000
- Parent:
- 25:cfd6db9b4b5d
- Child:
- 27:24e73fd36859
- Commit message:
- filter coefficienten;
Changed in this revision
EMGfilter.cpp | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show diff for this revision Revisions of this file |
--- a/EMGfilter.cpp Wed Oct 15 13:43:20 2014 +0000 +++ b/EMGfilter.cpp Fri Oct 17 08:32:39 2014 +0000 @@ -11,19 +11,19 @@ MODSERIAL pc(USBTX,USBRX); -HIDScope scope(2);//WHAT IS THIS +HIDScope scope(4);//uitgang scherm arm_biquad_casd_df1_inst_f32 lowpass; //constants for 50Hz lowpass -float lowpass_const[] = {-0.2924 , 0.1085 , 0 , 0.5587 , 0.2573};//{a1 a2 b0 b1 b2} normalized coefficients (a0=1) +float lowpass_const[] = {0.2928920553, 0.5857841107, 0.2928920554, -0, -0.17156822136};//{a0 a1 a2 -b1 -b2} van online calculator //state values -float lowpass_states[4];//WHAT IS THIS +float lowpass_states[4]; arm_biquad_casd_df1_inst_f32 highpass; //constants for 10Hz highpass -float highpass_const[] = {-1.562, 0.6413, 1, -1.958 , 0.9576};//{a1 a2 b0 b1 b2} normalized coefficients (a0=1) +float highpass_const[] = {0.8005910267, -1.6011820533, 0.8005910267, 1.5610153913, -0.6413487154};//{a0 a1 a2 -b1 -b2} //state values -float highpass_states[4];//WHAT IS THIS +float highpass_states[4]; /** Looper function
--- a/main.cpp Wed Oct 15 13:43:20 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,74 +0,0 @@ -#include "mbed.h" -#include "HIDScope.h" - -#include "arm_math.h" - -//Define objects -AnalogIn emg0(PTB1); //Analog input -HIDScope scope(2); - -arm_biquad_casd_df1_inst_f32 lowpass; -//constants for 5Hz lowpass -float lowpass_const[] = {0.02008337 , 0.04016673 , 0.02008337 , 1.56101808 , -0.64135154}; -//state values -float lowpass_states[4]; -arm_biquad_casd_df1_inst_f32 highpass; -//constants for 0.5Hz highpass -float highpass_const[] = {0.97803048, -1.95606096, 0.97803048, 1.95557824 , -0.95654368}; -//state values -float highpass_states[4]; - - -/** Looper function -* functions used for Ticker and Timeout should be of type void <name>(void) -* i.e. no input arguments, no output arguments. -* if you want to change a variable that you use in other places (for example in main) -* you will have to make that variable global in order to be able to reach it both from -* the function called at interrupt time, and in the main function. -* To make a variable global, define it under the includes. -* variables that are changed in the interrupt routine (written to) should be made -* 'volatile' to let the compiler know that those values may change outside the current context. -* i.e.: "volatile uint16_t emg_value;" instead of "uint16_t emg_value" -* in the example below, the variable is not re-used in the main function, and is thus declared -* local in the looper function only. -**/ -void looper() -{ - /*variable to store value in*/ - uint16_t emg_value; - float filtered_emg; - float emg_value_f32; - /*put raw emg value both in red and in emg_value*/ - emg_value = emg0.read_u16(); // read direct ADC result, converted to 16 bit integer (0..2^16 = 0..65536 = 0..3.3V) - emg_value_f32 = emg0.read(); - - //process emg - arm_biquad_cascade_df1_f32(&highpass, &emg_value_f32, &filtered_emg, 1 ); - filtered_emg = fabs(filtered_emg); - arm_biquad_cascade_df1_f32(&lowpass, &filtered_emg, &filtered_emg, 1 ); - - /*send value to PC. */ - scope.set(0,emg_value); //uint value - scope.set(1,filtered_emg); //processed float - scope.send(); - -} - -int main() -{ - Ticker log_timer; - //set up filters. Use external array for constants - arm_biquad_cascade_df1_init_f32(&lowpass,1 , lowpass_const, lowpass_states); - arm_biquad_cascade_df1_init_f32(&highpass,1 ,highpass_const,highpass_states); - - /**Here you attach the 'void looper(void)' function to the Ticker object - * The looper() function will be called every 0.01 seconds. - * Please mind that the parentheses after looper are omitted when using attach. - */ - log_timer.attach(looper, 0.005); - while(1) //Loop - { - /*Empty!*/ - /*Everything is handled by the interrupt routine now!*/ - } -} \ No newline at end of file