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

Industrial Internet Consortium(IIC)

본 포스팅은 IIC에서 발행한 "The Industrial Internet of Things Distributed Computing in the Edge" Version 1.1 내용을 리뷰하였습니다.

 

1. 왜 분산 컴퓨팅 기술이 에지 컴퓨팅으로 옮겨 저 가는가?

에지 컴퓨팅은 일반적으로 데이터 센터와 관련된 클라우드 컴퓨팅의 기능을 가진 IoT 기기에 가까운 에지(가장자리) 있는 컴퓨팅 능력을 말한다. 에지 컴퓨팅 레이어에는 IoT 기기와 데이터 센터 사이에 위치에 있으며, 에지 컴퓨팅의 레이어 전반에 걸쳐 에지에서 데이터, 네트워크, 저장소, 그리고 컴퓨팅 능력이 분산되어 배치되어있다. 이렇게 원래 있었던 클라우드 기능들을 네트워크 가장자리로 마이그레이션 하면 데이터 센터든 에지든 데이터, 스토리지 및 컴퓨팅이 가장 효율적으로 처리가 가능하게 된다.

IoT와 데이터센터 사이에 위치한 엣지컴퓨팅

 

1.1. 비즈니스 관점에서 에지 컴퓨팅의 장점.

데이터센터에 있는 클라우드 컴퓨팅 능력들은 회사에게 유용성(Flexibility)과 확장성(Scale)을 제공한다. AWS를 생각해보면, 회사들은 AWS의 EC2와 같은 Iaas, Paas 서비스를 사용하여 회사의 필요에 따라 확장시켜 나갈 수 있다. 이러한 클라우드 컴퓨팅의 이점에 에지 컴퓨팅을 이용하면 현실세계의 사물들과 네트워크 가장자리에 확장이 가능하다. 이를 통해 회사가 데이터 계산을 수행할 위치를 유연하게 결정할 수 있으므로 시스템의 성능이 향상되고 비용이 절감되는 효과를 얻을 수 있는 것이다.

 

데이터센터의 컴퓨팅 능력 데이터가 전송되는 대역폭 비용을 고려해야 하지만, 센서는 일반적으로 컴퓨팅 능력이 작기 때문에 어떤 계산을 수행하는 것에 대해 제한적이다. 이에 데이터 계산을 위해 데이터와 가까운 곳에 컴퓨팅능력을 배치하는 경향이 있는데 이것을 "데이터 중력(Data Gravity)"이라고 말하며,  분산 컴퓨팅의 핵심 동기이기도 하다.

한정된 컴퓨팅능력을 가진 센서 근처로 컴퓨팅자원을 배치하는것을 "데이터중력"이라고 한다.

 

또한 에지 컴퓨팅은 데이터의 저장장소를 유연하게 결정할 수 있어 성능 향상과 비용을 줄일 수 있다. 그러나 외부 위협으로부터의 보안과 개인정보 노출의 문제점에도 불구하고 데이터 생성 위치 근처에 컴퓨팅 자원을 놓음으로써 빠른 데이터 처리와 대기시간 감소가 가능하기 때문이다. 

 

특히 위험 제어가 필요한 시스템인 경우, 클라우드 시용 시 지연시간이 문제가 되어 위험상황을 빠르게 처리하지 못하지만, 에지 컴퓨팅을 사용할 경우 늦은 지연시간을 해결할 수 있기 때문에 위험상황을 빠르게 해결 가능하다.

 

클라우드 단일 사용시 문제되는 지연시간을 엣지컴퓨팅을 통해 해결 가능하다.

분산 컴퓨팅을 네트워크 가장자리에 배치하기 위해서는 다음과 같은 고려사항들이 필요하다.

  • 출장 및 파견(Truck-roll) : Truck-Roll이라는 단어는 어떤 상황에 있어 문제를 해결하기 위해 기술자를 트럭이나 승용차에 배치함을 말한다. 데이터센터의 바깥에 장비들을 추가하거나 대체하는 것은 전문적인 기술들을 필요로 한다. 게다가 배치한 장소에서 고장이 나면 출장 가서 수리해줘야 한다.
  • 포장(From factor, packaging and hardening) : 데이터 센터는 일반적으로 크고 환경적으로 잘 컨트롤되며, 고차원 보안 위에 장비들이 배치되어 있다. 그러나 보통 에지요 장비들은 시스템 환경 컨트롤을 적게 받고, 외부 위험이 많다. 쉽게 생각해보면, 거리의 신호등 제어 캐비닛이라던가, 자율주행 자동차 내부 컴퓨팅 시스템들을 생각해보면 된다.
  • 템퍼링(Tampering) : 데이터 템퍼링이란 허가되지 않은 채널을 통해 데이터를 의도적으로 수정(파괴, 조작, 편집)하는 행위다. 악의적 템퍼링을 방지하기 위해 필요 없는 외부 포트를 제거하고, 외부시설과 단절된 보안시설을 만드는 방법들이 있다.
  • 원격 제어 및 관리(Remote monitoring and management) : 성공적인 업데이트를 보장하기 위해 패킷 손실 및 중단된 연결에 대한 복원력이 필요하다.
  • 네트워크 대역폭(Network bandwidth) : IoT와 데이터센터 사이의 전송대는 데이터의 대역폭은 종종 비싸거나, 100% 확신할 수 없을 때도 있다. 이에 계산능력과 저장소를 데이터를 사용하는 곳 가까이에 배치함으로써 네트워크를 통해 데이터가 움직이는 것을 적게 할 수 있다.
  • 에너지 효율성(Energy efficiency) : 에지 장비들은 배터리와 같은 활용할 수 있는 에너지를 고려해야 한다. 또한 높은 파워를 요구하는 장비들은 쿨링까지도 고려해야 한다.
  • 데이터 레지던시(Data residency) : 데이터 정책이나 규율을 확인해야 한다. 특히 건강보험 데이터일 경우 개인정보에 민감한 데이터임으로, 비식별 처리 및 보안정책을 고려해야 한다.

 

1.2. 에지 컴퓨팅을 구현하기 위해 필요한 속성

엣지 내의 분산컴퓨팅에서 낮은 위험으로 이러한 이점을 얻기 위해서는 다음과 같은 몇 가지 속성들이 필요하다.
  • 관리성(Manageability) : 에지에서의 분산 컴퓨팅은 넓게 분선 되어 있고, 상호 연결된 노드들로 구성되어있다. 이에 IoT 디바이스나 애플리케이션 서비스와 같은 각각의 노드들은 시스템 수면 동안 검색, 커머셔닝(commission), 모니터링, 업데이트, 해제 상태를 관리할 수 있어야 한다.
  • 결합성(Composability) : 결합성은 다른 시스템(또는 노드들)을 구조적 혹은 기능적으로 결합하기 위한 능력이다. 즉, 에지 컴퓨팅 요소들은 시스템 안에서 다른 요소들에게 영향을 주지 않으면서도 수직으로 연결되어있는 시스템과는 결합 또는 해제가 잘 되어야 함을 의미한다.

결합성 : 엣지 내 다른 요소들끼리는 영향을 주지 않으면서도, 수직적 관계의 요소에서는 잘 결합되고 잘 해제되어야 한다.

  • 자율성(Autonomy) : 에지 요소들이 데이터 센터에 연결할 수 없을 때나 필요한 계산들을 할 수 없을 때, 데이터센터와 멀리 떨어져 있는 에지들은 자율적으로 업무들을 수행하거나, 데이터센터와의 연결이 복원될때까지 큐에 보관할 수 있어야 한다. 
  • 상호운용성(Interoperability) : 상호운용성은 엣지 요소가 서로 정보를 교환하고 정보를 일관되게 해석할 수 있는 능력을 뜻한다. 에지 컴퓨팅 인프라스트럭쳐 서비스들 간의 지속적인 상호운용성은 기술적(Technical), 구문적(Syntactic), 의미론적(Semantic) 상호운용성 및 개방성(Openness)이 필요하다.
    • 개방성(Openness) : 개방성이란 요소들의 모든 요구사항과 실행 속성이 누구든지 구현할 수 있음을 의미한다. 즉, 어떤 공급자가 다른 공급자들로부터 제공된 요소들을 이용하여 상호운용 및 상호 교환할 수 있는 자체 버전들을 자유롭게 생성할 수 있다. 개방성상호운용성을 지원한다.
    • IIC의 Industrial Internet Connectivity Framework(IICF)에서는 상호운용성의 레벨을 어떤 것이 교환되냐에 따라 구분하였다.
      1. 기술적 상호운용성(Technical Interoperability) : 기술적 상호운용성은 비트나 바이트와 같은 정보들을 교환하는 능력을 말하는데, 이 정보들은 정보교환 인프라가 설정되어 있고 기본 네트워크와 프르토 콜이 명확하게 정의되어 있다고 가정합니다.
      2. 구문적 상호운용성(Syntactic Interoperability) : 구문적 상호운용성은 언어의 알파벳 및 문법 규칙과 같은 데이터를 구조화하는 공통 프로토콜과 공백이나 구두점처럼 정보들의 구조들이 사용될 때 이러한 구조들을 교환할 수 있는 능력을 구문적 상호운용성이라고 한다. 구문적 상호운용성은 기술적 상호운용성이 기반이 되어있을 때 사용 가능하다. -> 기술적 기반 위에 구문적
      3. 문맥적 상호운용성(Semantic Interoperability) : 문맥적 상호운용성은 적절한 내용들 안에 명확한 정보와 같은 데이터들의 교환되는 의미를 해석할 수 있는 능력이다. 예를 들어 "3개가 있다"와 같은 구문을 보면, 3개가 사과인지, 차인 지, 학년인지 등을 유추할 수 있어야 한다는 것이다. 
      4. 내가 생각할 때는 기술적 상호운용성 -> 구문적 상호운용성 -> 문맥적 상호운용성 순으로 레벨이 증가하는 것처럼 느껴진다.
    • 예를 들어, 에지에서 호스트 된 서비스는 링크를 통해 공유 데이터를 수신하고(기술적) 2 x 100 부동소수점 배열(구문적)이 들어간 데이터 구조 안으로 마샬링 한다. 이후 첫 번째 열은 시간 기록, 두 번째 열은 온도(의미론적)인 배열을 감지하는 이벤트 발견 알고리즘이 실행 중인 헬스 모니터링 서비스에 배열을 넣는다.

위에서 살펴본 것처럼 속성 및 기술 메커니즘을 통해 에지 분산 컴퓨팅을 사용함으로써 비즈니스 이점을 얻을 수 있다.

+ Recent posts