생체계측 강의록 Medical instrucmentation#8 2010103821 생체의공학과 최준민 제출일 2014.05.13(화)
디지털신호처리 Programming Analog signal processing Measurand ADC (12bit) Digital signal processing RA LA 마이크로 프로세서 Output 5ms 간격으로 data가 12bit로 표현 RC
Digital Signal Processing 기본개념 #include <stdio.h> . Main() { Initialize(); //모든 변수들의 초기화 작업 While(1) // 전원이 off 될 때 까지의 무한반복문 D=GetECGData(); L=GetContactData(); QRS Detection(); // 생체계측에서 다룰 내용 Update display(); RespondUser(); Alarm(); Send Data(); }
Digital Signal Processing Z transform 이용해 Low pass filter만든다. 신호를 band pass filter → 미분 → 제곱 → 적분 . . . . . . . . . . . . . . . (n-2)Ts (n-1)Ts nTs
Digital Signal Processing H x[n] y[n]
Digital Signal Processing
Digital Signal Processing Int MyFirstDF(int d) { Static int x1, x2, y1, y2; Int y; y=d+(x1<<1)+x2+(y1>>2)-((y2+y2+y2)>>3); x2=x1 x1=d; y2=y; y1=y; return(y); } Static 붙이는 이유는 여기서 선언한 함수들을 이함수 외부에서도 변수로 선언해야 하므로… 오른쪽으로 1bit 이동=제곱 왼쪽으로 2bit이동=1/2제곱 곱셈을 쓰지 않는 이유는 곱셈기가 들어있지 않는 processor의 경우 시간이 오래 걸리는데 그 시간이 5ms 를 초과해버리면 real time이 성립하지 않는다.
Digital Signal Processing LPF의 구성 int QRS_LPF( int d) { static int y1=0, y2=0, x[26], n=12; //x배열은 ring buffer이용 int y; x[n]=x[n+13]=d; y=x[n]-(x[n+6]<<1)+x[n+12]+y1<<1-y2; y2-y1;, y1=y; //real time을 위한 코딩 if(--n<0) n=12; //n이 1만큼 감소하다가 0보다 작아지면 12로 되돌아간다. return(y); }
Digital Signal Processing Ring Buffer y=x[n]-(x[n+6]<<1)+x[n+12]+y1<<1-y2; 왜 x[n+6]이지? x[n-6]이 아니고? → x[n+12]도 자연스럽게 해결 K지점으로부터 n-6이면 6번째 과거값은 Ring buffer를 쓰지 않는다면 12번째에서 다시 0번째로 되돌아가서 3번째인 d값이 된다. 하지만 Ring buffer를 써서 2copy형태로 만든 다면 단지 k에서 오른쪽으로 6번째로 이동하면 d값이 나온다! int QRS_LPF( int d) { static int y1=0, y2=0, x[26], n=12; //x배열은 ring buffer이용 int y; x[n]=x[n+13]=d; y2-y1;, y1=y; //real time을 위한 코딩 if(--n<0) n=12; //n이 1만큼 감소하다가 0보다 작아지면 12로 되돌아간다. return(y); } Data 쓰는 순서 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 a b c d e f g h i j k l m