Script voor het filteren van het EMG signaal.

Dependencies:   biquadFilter mbed HIDScope

Fork of Filteren by Gerber Loman

Committer:
paulineoonk
Date:
Mon Oct 23 09:45:29 2017 +0000
Revision:
2:7660601f4046
Parent:
1:e108d72cab92
Filtered met hidscope

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Gerber 0:0244fd0a12f0 1 #include "mbed.h"
Gerber 0:0244fd0a12f0 2 #include "BiQuad.h"
paulineoonk 2:7660601f4046 3 #include "HIDScope.h"
Gerber 0:0244fd0a12f0 4
paulineoonk 2:7660601f4046 5 //Hidscope aanmaken
paulineoonk 2:7660601f4046 6 HIDScope scope(2);
paulineoonk 2:7660601f4046 7 //Ticker HIDinticker;
Gerber 0:0244fd0a12f0 8 double maxi = 0.12; // max signal after filtering, 0.1-0.12
Gerber 0:0244fd0a12f0 9
Gerber 0:0244fd0a12f0 10 // Biquad filters van respectievelijk Notch, High-pass en Low-pass filter
Gerber 0:0244fd0a12f0 11 BiQuad N1( 8.63271e-01, -1.39680e+00, 8.63271e-01, -1.39680e+00, 7.26543e-01 );
Gerber 0:0244fd0a12f0 12 BiQuadChain NF;
Gerber 0:0244fd0a12f0 13 BiQuad HP1( 9.63001e-01, -9.62990e-01, 0.00000e+00, -9.62994e-01, 0.00000e+00 );
Gerber 0:0244fd0a12f0 14 BiQuad HP2( 1.00000e+00, -2.00001e+00, 1.00001e+00, -1.96161e+00, 9.63007e-01 );
Gerber 0:0244fd0a12f0 15 BiQuadChain HPF;
Gerber 0:0244fd0a12f0 16 BiQuad LP1( 2.56971e-06, 2.56968e-06, 0.00000e+00, -9.72729e-01, 0.00000e+00 );
Gerber 0:0244fd0a12f0 17 BiQuad LP2( 1.00000e+00, 2.00001e+00, 1.00001e+00, -1.97198e+00, 9.72734e-01 );
Gerber 0:0244fd0a12f0 18 BiQuadChain LPF;
Gerber 0:0244fd0a12f0 19
Gerber 0:0244fd0a12f0 20 float f = 500; // frequency
Gerber 0:0244fd0a12f0 21 float dt = 1/f; // sample frequency
Gerber 0:0244fd0a12f0 22 Ticker emgverwerkticker;
Gerber 0:0244fd0a12f0 23 AnalogIn emg(A0); // EMG lezen
Gerber 0:0244fd0a12f0 24
Gerber 0:0244fd0a12f0 25 void emgverwerk ()
Gerber 0:0244fd0a12f0 26 {
Gerber 0:0244fd0a12f0 27 double emgNotch = NF.step(emg.read() ); // Notch filter
Gerber 0:0244fd0a12f0 28 double emgHP = HPF.step(emgNotch); // High-pass filter: also normalises around 0.
Gerber 0:0244fd0a12f0 29 double emgAbsHP = abs(emgHP); // Take absolute value
Gerber 0:0244fd0a12f0 30 double emgLP = LPF.step(emgAbsHP); // Low-pass filter: creates envelope
Gerber 0:0244fd0a12f0 31 double emgMax = maxi; //(emgLP); // moet waarde 'schatten' voor de max, want je leest de data live. voorbeeld: 0.1, maar mogelijk 0.2 kiezen voor veiligheidsfactor. Dan gaat motor alleen maximaal op 1/2 vermogen.
Gerber 0:0244fd0a12f0 32 double emgFiltered = emgLP/emgMax; // Scale to maximum signal: useful for motor
paulineoonk 2:7660601f4046 33 if (emgFiltered >1)
Gerber 0:0244fd0a12f0 34 {
paulineoonk 2:7660601f4046 35 emgFiltered=1.00;
Gerber 0:0244fd0a12f0 36 }
paulineoonk 2:7660601f4046 37 scope.set(0,emgFiltered);
paulineoonk 2:7660601f4046 38 scope.set(1,emg.read());
paulineoonk 2:7660601f4046 39 scope.send();
paulineoonk 2:7660601f4046 40 }
paulineoonk 2:7660601f4046 41 /*
paulineoonk 2:7660601f4046 42 void ReadFilteredSignal(int emgF )
paulineoonk 2:7660601f4046 43 {
paulineoonk 2:7660601f4046 44 scope.set(0,emgF);
paulineoonk 2:7660601f4046 45 scope.send(); //send what's in the scope memory to PC
Gerber 0:0244fd0a12f0 46 }
paulineoonk 2:7660601f4046 47 */
Gerber 0:0244fd0a12f0 48 int main()
Gerber 0:0244fd0a12f0 49 {
Gerber 0:0244fd0a12f0 50 NF.add( &N1 );
Gerber 0:0244fd0a12f0 51 HPF.add( &HP1 ).add( &HP2 );
Gerber 0:0244fd0a12f0 52 LPF.add( &LP1 ).add( &LP2 );
Gerber 0:0244fd0a12f0 53 emgverwerkticker.attach(&emgverwerk,dt);
paulineoonk 2:7660601f4046 54 //HIDinticker.attach(&ReadFilteredSignal(emgFiltered), 0.01);
Gerber 0:0244fd0a12f0 55 while(true)
Gerber 0:0244fd0a12f0 56 {
Gerber 0:0244fd0a12f0 57 }
Gerber 0:0244fd0a12f0 58
Gerber 0:0244fd0a12f0 59
Gerber 0:0244fd0a12f0 60 }