Medical Instrumentation 생체의공학과 2011104943 김태산
QRS Detector Digital filter BPF ECG Signal LPF HPF 𝑑 𝑑𝑡 ( ) 2 𝑑𝑡 ( ) 2 𝑑𝑡 thresholding decision Digital filter BPF
Low pass filter Low pass필터의 전달함수가 이와 같이 결정 되었을 때, 미분 방정식을 구하면 Int QRS_LPF(int x) { static int y1=0, y2=0, x[26], p=12; //p 는 배열에서 현재의n값을 지칭한다.// int y; x[p] = x[p+13] =x; y=x[p]-(x[p+6]<<1)+x[p+12]+(y1<<1)-y2; y2=y1; y1=y; if(--p<0) p=12; return(y>>5); //LPF의 이득을 없애기 위해 32로 나눈다.// }
High pass filter High pass필터의 미분 방정식이 이와 같이 결정 되었을 때, Int QRS_HPF(int x) { static int l1=0; x[66], p=32; int l; x[p] = x[p+33]=x; l=l1+x[p]-x[p+32]; l1=l; if(--p<0) p=32; return(x[p+16] – (l>>5)); }
위와 같이 변수 업데이트 실수를 하기 쉬우니 주의 하여야 한다. 미분 미분은 두 가지의 방법으로 표현 할 수 있다. 으로 으로 Two point derivation이다. Int QRS_derivative(int x) { static int x1=0; int y =0; y= x –x1; x1= x; return(y); } 2. 으로 Int QRS_derivative(int x) { static x1, x2. x3, x4; int y; y = [(x<<1)+x1-x3-(x4<<1)]>>3; x4=x3; x3=x2; x2=x1; x1=x; return(y); } x2=x1; x1=x2; x3=x2; or x2=x3; x4=x3; x3=x4; 위와 같이 변수 업데이트 실수를 하기 쉬우니 주의 하여야 한다.
제곱 (양수화) 값 비싼 processor에서는 곱하기의 처리 속도가 빠르나 보통의 processor는 5ms이상의 시간이 걸리므로 제곱을 사용 할 시 real time으로 정보를 제공할 수 없게 된다. Int QRS_squre(int x) { return( 𝑥 2 ) } Int QRS_ADS(int x) { if(x<0) return(-x); else return(x); } 절대값을 취함으로써 양수화의 효과를 볼 수 있다.
Moving window integral Int QRS_moving_window_integral(int x) { static int x[32], p=0; static long sum=0; long ly; // sum값이 int범위를 초과할 수 있으므로// int y; if(++p=32)p=0; sum - =x[p]; // 가장 오래된 값을 빼는 과정// sum + =x; //새로운 값을 더하는 과정// x[p]=x; ly=(sum>>5); if(ly>32400) y= 32400; else y=(int)ly; return (y); } 샘플링 freq. 200Hz은 샘플링 간격 5ms 이므로 2의 배수로 정한다. 즉, 16개 -> 80ms 32개 -> 160ms 으로 구해지는데 QRS폭 의 평균은 100ms이므로 32개의 window가 적당하다.
주의사항. d1=GetDatach1(); d2=GetDatach2(); d1=GetDatach1(); l1=myLPF1(d1); l2=myLPF2(d2); Int myLPF1(int x) { static int x1,x2; x2=x1; x1=x; return(y); } Int myLPF2(int x) d1=GetDatach1(); d2=GetDatach2(); l1=myLPF(d1); l2=myLPF(d2); Int myLPF(int x) { static int x1,x2; x2=x1; x1=x; return(y); } 이와 같이 같은 필터를 쓰게 되더라도 따로 함수를 생성하여 각각의 data를 집어넣어야 한다. 이와 같이 했을 때, Static 변수 값이 l1 일 때와 l2일 때 의 변수가 서로 섞이게 된다. 즉. 이와 같이 코드를 짜면 안 된다.