Dept of Biomed Eng BME 302 Medical Instrumentation
Dept. of Biomed. Eng. BME 302: Medical Instrumentation Kyung Hee Univ. Biomedical Instrumentation 2010105052 김광우 1 김광우
Dept. of Biomed. Eng. BME 302: Medical Instrumentation Kyung Hee Univ. QRS Detector ECG Signal 제곱 LPF HPF Thresholding 적분 미분 Decision Digital filter 이 과정들은 마이크로프로세서 내부에서 코딩으로 구현가능 2 김광우
Dept. of Biomed. Eng. BME 302: Medical Instrumentation Kyung Hee Univ. Main () { Int y 1, y 2 ………………; d = get. Data; y 1=QRS_LPF ( d ); y 2=QRS_HPF ( y 1 ); y 3=QRS_Derivative ( y 2); y 4=QRS_Square ( y 3 ); y 5=QRS_MWI ( y 4 ); …………………. . } 3 김광우
Dept. of Biomed. Eng. BME 302: Medical Instrumentation Kyung Hee Univ. LPF int QRS_LPF (int x) //y[n]=x[n]-2 x[n-6]+x[n-12]+2 y[n-1]-y[n-2] { 함수가 끝나도 남아있도록 static int y 1=0, y 2=0, x[26], p=12; int y; Ring-buffer 뒤부터 저장 x[p]=x[p+13]=x; y 2; } y=x[p]-(x[p+6]<<1)+x[p+12]+(y 1<<1)y 2=y 1; y 1=y; if(--p<0) p=12; return (y>>5); 이득 32 배 4 김광우
Dept. of Biomed. Eng. HPF BME 302: Medical Instrumentation Kyung Hee Univ. LPF의 출력을 HPF의 입력으로 이용 int QRS_HPF (int x) //y[n]=x[n-16]-1/32(l[n-1]+x[n]-x[n-32]) { static int l 1=0, x[66], p=32; int l; x[p]=x[p+33]=x; All pass filter 에서 Low pass filter 를 빼면 High pass filter 가 된다. l=l 1+x[p]-x[n+32]; l 1=l; } if(--p<0) p=32; return (x[p+16]-(l>>5)); 5 김광우
Dept. of Biomed. Eng. Derivative_ver 1 BME 302: Medical Instrumentation HPF의 출력을 Derivative의 입력으로 이용 int QRS_Derivative (int x) //y[n]=x[n]-x[n-1] { Kyung Hee Univ. 정말 간단한 미분기 코드이 다. 간단하지만 Signal 의 변화 에 약하다는 단점이 있다. static int x 1; int y; y=x-x 1; x 1=x; } return (y); 6 김광우
Dept. of Biomed. Eng. BME 302: Medical Instrumentation Derivative_ver 2 Kyung Hee Univ. HPF의 출력을 Derivative의 입력으로 이용 int QRS_Derivative (int x) //y[n]=1/8(2 x[n]+x[n-1]-x[n-3]-2 x[n-4]) { Ver 1 에 비해서 Signal 의 변화 추이에 더 좋다. 결과에 영향 을 주는 데이터가 Ver 1 에서는 현재와 그 전 이라면 Ver 2 에 서는 4번째 전 데이터까지 영 향을 미친다. static int x 1, x 2, x 3, x 4; int y; y=((x<<1)+x 1 -x 3 -(x 4<<1))>>3; x 4=x 3; x 3=x 2; x 2=x 1; x 1=x; } 대입하는 순서 매우 중요 return (y); 7 김광우
Dept. of Biomed. Eng. BME 302: Medical Instrumentation Kyung Hee Univ. Moving window Integral int QRS_MWI (int x) // 보통 QRS의 폭은 100 ms(빠른 연산필요) // y[n]=1/32(x[n]+x[n-1]+. . . +x[n-31]) { static int x[3], p=0; static long sum=0; long ly; 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); } 적분 계산이 필요 신호는 계속 입력됨 최근 신호는 더하고 가장 오래된 순으로 데이터를 버리면 적분완성 9 김광우
Dept. of Biomed. Eng. BME 302: Medical Instrumentation 10 Kyung Hee Univ. 김광우
- Slides: 10