Biorobotics
/
piano_robot
newest version,
read_filter_emg.h@2:b90bb3ef67cf, 2015-10-26 (annotated)
- Committer:
- NickDGreg
- Date:
- Mon Oct 26 10:55:48 2015 +0000
- Revision:
- 2:b90bb3ef67cf
- Parent:
- 1:5c1fc4e9401a
read_filter needs to be rewritten into the main loop as passing analogin to the constructor function is not working
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
NickDGreg | 0:fc6fa085d591 | 1 | /* |
NickDGreg | 0:fc6fa085d591 | 2 | * read_filter_emg.h |
NickDGreg | 0:fc6fa085d591 | 3 | * |
NickDGreg | 0:fc6fa085d591 | 4 | * Created on: Oct 14, 2015 |
NickDGreg | 0:fc6fa085d591 | 5 | * Author: User |
NickDGreg | 0:fc6fa085d591 | 6 | */ |
NickDGreg | 0:fc6fa085d591 | 7 | |
NickDGreg | 0:fc6fa085d591 | 8 | #ifndef READ_FILTER_EMG_H_ |
NickDGreg | 0:fc6fa085d591 | 9 | #define READ_FILTER_EMG_H_ |
NickDGreg | 0:fc6fa085d591 | 10 | |
NickDGreg | 0:fc6fa085d591 | 11 | class EMG { |
NickDGreg | 0:fc6fa085d591 | 12 | public: |
NickDGreg | 0:fc6fa085d591 | 13 | //create instance of the EMG class |
NickDGreg | 1:5c1fc4e9401a | 14 | EMG(AnalogIn &aI_, double &v1_, double &v2_); |
NickDGreg | 2:b90bb3ef67cf | 15 | AnalogIn aI(pinName); |
NickDGreg | 0:fc6fa085d591 | 16 | double v1; |
NickDGreg | 0:fc6fa085d591 | 17 | double v2; |
NickDGreg | 0:fc6fa085d591 | 18 | double input_sample; |
NickDGreg | 0:fc6fa085d591 | 19 | double filtered_sample; |
NickDGreg | 0:fc6fa085d591 | 20 | |
NickDGreg | 0:fc6fa085d591 | 21 | //reads emg value and saves as input_sample |
NickDGreg | 0:fc6fa085d591 | 22 | void sample(); |
NickDGreg | 0:fc6fa085d591 | 23 | |
NickDGreg | 0:fc6fa085d591 | 24 | /*general biquad function to be used in the filtering |
NickDGreg | 0:fc6fa085d591 | 25 | biquad coefficients are in the filter functions */ |
NickDGreg | 0:fc6fa085d591 | 26 | double biquad(double u, double &v1, double &v2, const double a1, |
NickDGreg | 0:fc6fa085d591 | 27 | const double a2, const double b0, const double b1, const double b2); |
NickDGreg | 0:fc6fa085d591 | 28 | |
NickDGreg | 0:fc6fa085d591 | 29 | //20 hz highpass filter contains 3 biquads. Returns filtered value |
NickDGreg | 0:fc6fa085d591 | 30 | double highpass_filter(double hpInput); |
NickDGreg | 0:fc6fa085d591 | 31 | |
NickDGreg | 0:fc6fa085d591 | 32 | //Rectify the input (take absolute value). Input is output of highpass |
NickDGreg | 0:fc6fa085d591 | 33 | double rectify(double rcInput); |
NickDGreg | 0:fc6fa085d591 | 34 | |
NickDGreg | 0:fc6fa085d591 | 35 | //6 hz low pass filter, contains 3 biquads, input output of rectify |
NickDGreg | 0:fc6fa085d591 | 36 | double lowpass_filter(double lpInput); |
NickDGreg | 0:fc6fa085d591 | 37 | |
NickDGreg | 0:fc6fa085d591 | 38 | //function containing all three filter steps. Input raw signal value, output is filtered envelope value |
NickDGreg | 0:fc6fa085d591 | 39 | double filter(double input); |
NickDGreg | 0:fc6fa085d591 | 40 | }; |
NickDGreg | 0:fc6fa085d591 | 41 | |
NickDGreg | 0:fc6fa085d591 | 42 | #endif /* READ_FILTER_EMG_H_ */ |
NickDGreg | 0:fc6fa085d591 | 43 |