import numpy as np
import matplotlib.pyplot as plt 
bpm = 60
bps = bpm / 60
capture_length = 2
# plt.xlim(0,10)
num_heart_beats = int(capture_length * bps)
ecg_template = np.tile(pqrst_full , num_heart_beats) 
noise = np.random.normal(0, 0.01, len(ecg_template))
ecg_template_noisy = noise + ecg_template

# Plot the noisy heart ECG template
plt.plot(ecg_template_noisy)
plt.xlabel('Sample number')
plt.ylabel('Amplitude')
plt.title('Synthetic Heart Beat with Gaussian noise')
plt.show()

 

기존 오픈소스 코드에서 pqrst_full 변수가 없길래 구글링하여 pqrst_full을 만들었다.

 

 

import numpy as np
import matplotlib.pyplot as plt 
import scipy.signal as signal
bpm = 60
bps = bpm / 60
capture_length = 2

# The "Daubechies" wavelet is a rough approximation to a real,
# single, heart beat ("pqrst") signal
pqrst = signal.wavelets.daub(10)
# Add the gap after the pqrst when the heart is resting. 
samples_rest = 10
zero_array = np.zeros(samples_rest, dtype=float)
pqrst_full = np.concatenate([pqrst,zero_array])

# plt.xlim(0,10)
num_heart_beats = int(capture_length * bps)
ecg_template = np.tile(pqrst_full , num_heart_beats) 
noise = np.random.normal(0, 0.01, len(ecg_template))
ecg_template_noisy = noise + ecg_template

# Plot the noisy heart ECG template
plt.plot(ecg_template_noisy)
plt.xlabel('Sample number')
plt.ylabel('Amplitude')
plt.title('Synthetic Heart Beat with Gaussian noise')
plt.show()

이렇게 하니 아래와 같이 정상적으로 가우시안 노이즈가 합쳐진 심장박동 예제가 생성됬다.

 

가우시안 노이즈가 포함된 ECG예제 데이터

 

갑자기 궁금해져서 가우시안 필터를 합치지 않으면 어떻게 될까 궁금해졌다.

가우시안 노이즈가 제거된 ECG예제 데이터

이렇듯 가우시안 필터를 넣지 않으니 아주 깔끔해진 심장박동 예제 데이터가 생성됐다.

 

이로써 ECG데이터를 임의로 가우시안 노이즈 포함, 제거버전을 만들어보았다.

'논문리뷰 > ECG' 카테고리의 다른 글

MIT-BIH Arrhythmia Database  (0) 2021.12.21

ECG 관련 프로젝트를 진행함에 있어, MIT-BIH 데이터를 사용하기로 하였다. 이에 MIT-BIH 부정맥 데이터베이스의 내용을 확인해보고자 한다.

 

본 내용은 physionet의 부정맥 데이터베이스의 설명내용을 각색하여 리뷰한다.

https://physionet.org/physiobank/database/html/mitdbdir/intro.htm

 

MIT-BIH Arrhythmia Database Directory (Introduction)

E 101, 103, 106, 108, 112, 117, 119, 122, 209, 219, 220, 223, 233

physionet.org

 

 

홀터(Holter) 심전도란?

24시간 생활심전도를 모니터링 하는것인데, 소형 심전도 기계를 몸에 부착하여 24시간을 부착하는 방식으로 사용된다.

홀터심전도를 사용하는 이유는 병원에서 단시간 측정하는 것보다는, 일생상활에 오랫동안 측정함으로써 여러가지 정보를 얻을 수 있다. 또한 자신의 증상이 언제 나타났는지를 일지에 기록하여 ECG 기록과 매칭하여 원인을 좀 더 자세히 파악할 수 있다.

그러나 홀터측정의 단점에는 환자가 24시간동안 소형심전측정기를 달고 있어서 불편함이 있고, 또한 24시간 또는 48시간만 측정하기 때문에 측정시간 안에 안에 두근거림이나 부정맥 등 발생하지 않을 가능성이 있다.

출처 : https://youtu.be/lyGnPXkCAs8 

 

데이터 선택 기준

MIT-BIH 부정멕 데이터베이스는 Holter 방식으로 1975-1979년 Beth Israel Hospital Arrhythmia Laboratory에서 측정된 4000여건의 기록들을 활용한 데이터베이스이다.

 

이 데이터베이스에는 총 48개의 레코드가 있는데, 위에서 설명한 4,000여개의 데이터베이스에서 랜덤으로 23개를 선택하였고, 같은 데이터베이스에서 희구하지만 임상적으로 중요한 현상의 데이터를 25개 선정하여 48개의 레코드를 가지고 있는 데이터베이스를 선정하였다.

 

즉 라벨 100~124 는 랜덤으로, 200~234는 선택하여 구성한 데이터베이스라고 보면 된다. 예전에 만들어진 데이터이여서 그런지, 각 데이터들은 30여분정도 분량이다.

 

특히 200~234 라벨의 데이터는 심실부정맥(Ventricular Arrhythmias) 방실접합부 부정맥(Junctional Arrhythmias), 심실위부정맥(Supraventricular Arrhythmias)과 전도이상의 현상을 가진 데이터가 포함되었다.

 

남자는 32~89세의 25명, 여자는 23~89세의 22명이다. 

 

ECG 리드선 구성 

시그널은 상부와 하부로 나뉘여 있는데, 상부는 limb lead II(MLII/Left Leg)방식, 하부는 V1(가끔 V2,V4,V5)위치에 부착되어있다. 보통은 상부신호에서 정상 QRS 신호를 확인 가능하다. 

예외상황들도 설명해주는데, 114번은 신호가 반전되어있고, 102번과 104번은 환자의 수술드레싱 때문에 MLII를 사용할 수 없어 상부신호를 V5에 위치하여 사용하였다고 한다.

 

아날로그 측정 및 재생

Analog ECG 측정을 위해 사용했던 Holter 측정기 Del Mar Avionics Model

ECG를 측정할 때 일정한 속도의 종이가 지나가고, 그 위에 헤더가 종이에 기록하는 형식이였다. 이에 아날로그로 기록할때에는 미세한 흔들림으로 인해 오류가 발생하기도 한다.

또한 적절한 속도를 유지하는것이 중요한데, 속도가 낮으면 테이프가 눌릴 수도 있다. 

디지털화

위에서 기록한 아날로그 결과들을 Analog-to-Digital Converter(ADC)를 사용하여 필터링화 하였고, 안티엘리싱을 위해 실시간에 대하여 0.1~100Hz의 통과대역을 사용하여 필터링 하였는데 이는 기록된것으로부터 가장 낮고 큰 주파스들을 잘 커버할 수 있도록 하기 위함이다. 

 

ADC는 ±5mV 범위의 11비트로 구성되어있어 샘플값은 0~2047까지 가지고 있다. 따라서 디지털화되어있는 샘플들의 값의 범위는 0에서 2047까지이며, 1024는 0볼트에 해당된다.

 

주석

주석에서는 측정한 데이터들에 잘못 측정된 기록들을 심장전문가가 수정했다는 주석이 담겨져 있다.

 

결론

MIT-BIH 부정맥 데이터베이스를 사용하기 위해 핵심 내용들 또는 이해가 가지 않는 것들을 공부하기 위해 리뷰하였다. 어차피 Window 환경을 사용하기 때문에 정제된 데이터베이스를 사용할 것이지만, 원문을 읽음으로써 ECG의 수집방법, 디지털화, 데이터베이스의 구성들을 알아보는 시간이였던것 같다. 

 

출처 : 

MIT-BIH 문서 : https://physionet.org/physiobank/database/html/mitdbdir/intro.htm

Holter 아날로그 기기 : https://americanhistory.si.edu/collections/search/object/nmah_1411224

'논문리뷰 > ECG' 카테고리의 다른 글

[python, ECG] pqrst_full 만들기  (0) 2021.12.28

+ Recent posts