Programming을 이용한 ECG증폭기 설계

Slides:



Advertisements
Similar presentations
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Advertisements

마이크로 시스템 1 선 덕 한선 덕 한 lecture7. LCD 구동. 마이크로 시스템 2 강의 목표 현재 디스플레이 장치로써 가장 널리 사용되어지는 LCD 을 프로세서 에서 어떻게 제어 하는지 알아본다.
Vision System Lab, Sang-Hun Han
제 3 장 변수와 자료형.
Recursion SANGJI University KO Kwangman
CHAP 1:자료구조와 알고리즘.
C++ Espresso 제1장 기초 사항.
제 1장 C 언어의 소개.
C++ Espresso 제2장 제어문과 함수.
Smart IoT 설계 시스템 Lecture 07. 센서와 액츄에이터 실습.
Signal 자연계에 존재하는 모든 정보전달의 수단 신호의 공학적 표현 물소리, 바람소리, 새소리 짐승소리,불,연기,봉화…
CHAP 1:자료구조와 알고리즘 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
디지털 신호처리
C 프로그래밍.
Analog Signal 의 PWM 출력 By hyaoo.
제5장 이산시간 신호와 시스템의 푸리에 표현.
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
쉽게 풀어쓴 C언어 Express 제9장 함수와 변수 C Express.
7. while 문의 흐름 제어.
연산자 대입 연산자 산술 연산자 관계 연산자 논리 연산자 비트 연산자 콤마 연산자 축약 연산자 sizeof 연산자
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
AVR - Chapter 15 황 지 연.
1 장 서론 목원대학교 정보통신공학과.
11장. 적응 신호처리 11.1 랜덤신호처리 11.2 적응 시스템 11.3 적응 신호처리의 예 11.4 적응 알고리즘
Chapter 06. 선택문.
신호처리 Signal Processing
CHAP 1:자료구조와 알고리즘 C로 쉽게 풀어쓴 자료구조 생능출판사 Slide 1 (of 28)
쉽게 풀어쓴 C언어 Express 제10장 배열 C Express.
전자의료시스템 및 실습 C-언어 구 환 경희대학교 전자정보대학 동서의료공학과.
제 3 장 상수와 변수
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
디지털 신호처리
4장 제어문 선택문: if 문, if – else 문, switch 문
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
adopted from KNK C Programming : A Modern Approach
Medical Instrumentation
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
자전거를 배우려면 안장에 올라가 페달을 밟아라.
다음 주 과제 3장 읽어오기 숙제 해서 제출하기. 자료구조와 알고리즘, 순환 E304호,
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제어문 & 반복문 C스터디 2주차.
CHAP 2:순환.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
마이크로소프트 박종호.
Biomedical Instrumentation
Chapter 2 Time Domain Analysis
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
Fflush 사용이유 및 방법 [이유] 키보드에서 입력된 내용은 입력버퍼에 저장되었다가 Enter 키가 들어오면 프로그램으로 전달됨 이 때 입력버퍼에 있는 Enter 키도 프로그램으로 전달됨 그러므로 아래와 같은 프로그램에서 문자 하나를 입력해도 Enter키도 입력된 것으로.
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
CHAP 1:자료구조와 알고리즘.
(1) 필터 구조마다 유한 정세도 특성(finite precision characteristics)이 다름.
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
생체계측 강의록 Medical instrucmentation#8
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
생체 신호의 실시간 디지털 처리 7조 홍윤호( )-1등
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
01. ‘한글뷰어’ 설치 전 준비사항.
대림대학교 2017년도 1학기 강의 왕보현 순서도와 스크래치 6주차 대림대학교 2017년도 1학기 강의 왕보현
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
C.
어서와 C언어는 처음이지 제22장.
배열, 포인터, 함수 Review & 과제 1, 2.
PHP 기초문법 PHP를 공부하는데 있어 가장 기초가 되는 PHP기초문법에 대해서 배워 봅니다.
프로그래밍 기법 최적화 프로그래밍.
Presentation transcript:

Programming을 이용한 ECG증폭기 설계 6조

- 목차 - 과제 순위 생체신호의 실시간DSP 신호처리의 순서도 Digital Filter 신호처리부의 중요개념 신호처리부분의 프로그래밍

과제 순위 2004200459 장재필 2004200456 임명준 2007102856 임영민 2007102854 이준관 2005200439 이지민

생체신호의 실시간 DSP - “Setting” + Embedded Software : 특정한 기능을 하는 전자제품에 ECG 증폭기 ADC Micro processor Start Stop H.R : 75bpm Embedded Software : 특정한 기능을 하는 전자제품에 ( = Firmware) 들어있는 Software

Digital Signal Processing 신호처리의 순서도 START Initialization Key? Mode = Key Digital Signal Processing Display Yes No

Digital Filter * Digital filter H[n] X[n] Y[n] (1) FIR필터의 특징 ⓐ 선형위상특성을 정확히 그리고 용이하게 실현할 수 있다. 이러한 성질은 데이터 전송과 같은 파형정보를 중요시하는 응용에 필수적인 성질. ⓑ 귀환이 없기 때문에 항상 안정하다. ⓒ 주파수 영역에서 급 준한 감쇠특성을 실현할 때는 높은 차수의 필터 필요 (2) IIR필터의 특징 ⓐ FIR필터보다 적은 차수로 급 준한 감쇠특성을 실현할 수 있다. ⓑ 선형위상특성을 실현하기 어렵다. ⓒ 귀환이 있기 때문에 항상 안정하다고는 할 수 없다. 그러므로 시스템이 안정한가를 항상 판별해야 한다. 목적 : 신호처리의 가장 기본적인 목적의 하나로 본래의 신호에 잡음이 첨가될 경우 주어진 측정신호로부터 본래의 신호를 찾아내고자 하는 경우 정의 : 관측된 신호에 어떠한 처리를 하여 그 중에서 필요한 성분만 추출해 내어야 하는데 이와 같은 필터링(filtering) 종류 : 임펄스 응답이 유한인가 무한인가라는 관점에서 FIR(Finite Impulse Response)과 IIR(Infinite Impulse Response)디지털필터로 분류 Y[n]=a0x[n]+a1x[n-1]+…+anx[n-n] -b1y[n-1]-b2y[n-2]-…-bny[n-n] 위의 식에서 bi의 값이 모두 0이면 =>FIR bi의 값이 하나라도 0이 아니면 =>IIR

프로그램에 쓰이는 파일 monitor.c GetADC.c Dsp.c my_def.h Initialization.c Key.c

Monitor.c & GetADC.c // monitor.c #include my_def.h Int main(){ Init(); while(1){ mode = Key(); switch(mode){ case start; d = GetADCData(); dn = Dsp(d); Display signal(d); Display HR(dn); break; default : } return 0; //GetADC.c #include my_def.h Int GetADCData(void) { int d; // Read Data from ADC … return 0; } // my_def.h # define START 0xff; # define STOP 0x00; # define FALSE 0; # define TRUE 1; // 자주 쓰이는 값들을 하나의 헤더파일에 저장

Initialization.c & Key.c & Dsp.c Void Init(void) { … } // 프로그램의 초기값들을 저장 // Dsp.c #include my_def.h Int Dsp(int d) { int d1, d2, d3, d4; d1 = lpf(d); d2 = hpf(d1); d3 = differentiate(d2); d4 = absolute(d3); d5 = mwi(d4); d6 = threshould(d5); d7 = RR_interval(d6); d8 = computeHR(d7); return (d8); } //데이터를 처리해주는 부분, 각각의 함수를 호출하여 연산을 거친 값을 반환한다. // Key.c #inlcude my_def.h Unsigned char key(void) { if(key_value == 1) return (START); else return (STOP); } 새로 키가 눌려지기 전에는 이전의 키 값으로 return 해주는 program을 짜야한다.

lpf() & hpf() h[n] x[n] y[n] h[n] x[n] y[n] y[n] = {x[n] + 2x[n-1] + x[n-2]} / 4 y[n]=x[n]-2y[n-1] //lpf() Int lpf(int x) { Int y; static int x1,x2; // x1, x2는 함수 호출시 마다 저장 y={x+(x1<<1)+x2}>>2; // 프로그램의 성능을 빠르게 하기 위하여 << 시프트 연산자 사용 x2=x1; x1=x; return (y); } //hpf() int hpf(int d) { Int y; static int y1; y=d-(y1<<1); y1=y; return (d); } 왼쪽의 함수는 High Pass Filter로 왼쪽함수에서 사용된 식은 Y[n]=x[n]-2y[n-1] 의 식이다. 위의 함수는 Low Pass Filter로 왼쪽함수에서 사용된 식은 Y[n]={X[n]+2X[n-1]+X[n-2]}/4 의 식이다.

Differentiate() & absolute() *미분 Sampling interval ex) y[n] = x[n] – x[n-1] // Differentiate() Int differentiate (int d) { int y; static int d1; y=d-d1; d1=d; return (y); } 왼쪽의 함수는 Data값을 받아 미분하는 함수이다. 왼쪽의 미분치 식을 보면 Ts는 고정된 값이므로 미분을 f(n) – f(n-1)로 표현할 수 있는 것을 볼 수 있다. //Absolute() Int absolute (int d) { if(d<0) return (-d); else return (d); } 왼쪽의 함수는 Data의 값이 음의 값을 가지게 되면 그값에 음수를 취하여 줌으로써 모든 Data의 값을 양의 값을 가지도록 하는 함수이다. Ts는 고정된 값

mwi() y[n] = ∑x[n-i] = x[n] + x[n-1] + … + x[n-29] // i=0 ~ 29 Int mwi(int x) { int y1; static int y, p, x[30]; if(++p==30) P=0; y=y-x[p]+x; // y:running sum x[p] = x; return(y); } y[n] = ∑x[n-i] = x[n] + x[n-1] + … + x[n-29] // i=0 ~ 29 //mwi() – moving window integral Int mwi(int x) { int y; static int x1, x2, x3, … x29; y = x + x1 + x2 + … + x29; x29 = x28; x28 = x27; …. x2 = x1; x1 = x; return (y); } 제일 예전 Data P 제일 예전의 Data에 새로운 Data를 넣는 Program -> Ring buffer 위의 함수는 최근 30개의 Data의 값을 더하여 주는 함수이다. x6 x5 … x

threshould() & computeHR() Int computeHR(int r){ static int hr; if(r==0) return(hr); else{ hr=12000/r; return(hr); } // threshould() Int threshould(int d) { int Th = x; if(d>Th) return 1; else return 0; } 위의 함수는 심장 박동수를 계산하는 함수이다. 이 함수는 전 함수에서부터 입력받은 R-R interval값을 가지고 의 식에 의해 HR을 계산하게 된다. 여기서 시간은 data r값이 1상승하는데 걸리는 시간이라고 할 수 있다. 이 시간을 1분에 대하여 나누어 주면 HR의 값을 얻을 수 있게 된다. 위의 함수는 이 다음에 행하여질 R-R interval을 계산하기 위해 필요로 하는 R파형을 나타내는 함수이다. 입력 받은 Data의 값이 특정값 (Threshold값)보다 크게되면 1의 값을 다음 함수에 넘겨 줌으로써 다음 함수에서 이 1의 값을 넘겨받는 시간을 계산하여 R-R interval의 값을 계산하도록 하여주는 함수이다.

RR_interval() * QRS 파형 검출 int RR_interval(int t) { int r; static int t1,c; If(t1==0 & t==1){ r = ++c; c = 0; t1=t; return(r); } else{ ++c; t1 = t; Return(0); //RR_interval() int r; int RR_interval(int t) { static int t1,count; If(!(t1==0&t==1)){ ++count; t1=t; return(0); } else{ r=++count; count=0; return(r); 왼쪽의 함수는 이전의 함수로부터 data의 값을 입력받아 그 입력 받은 값이 1이 되는 두 입력사이의 시간을 계산함으로써 R-R interval의 시간을 계산하여 다음의 함수로 넘겨주게 된다. 그 원리로는 처음에 1을 입력받은 시점으로부터 다음의 1의 data값을 받을 때까지 count의 값을 증가시킴으로써 이 count 값을 다음의 함수로 넘겨주어 HR(심장 박동수)을 계산하도록 하여주는 함수이다.

감사합니다.