본문 바로가기
Health/심전도(ECG) 분석

5. R-R Intervals

by 꼰대코더 2024. 1. 7.

R-R Intervals  계산

numpy.diff 를 이용하여 전후 피크들의 차를 구한다.

# rr_peaks  는 샘플의 간격
rr_ecg = np.diff(rr_peaks)

# 샘플간격을 초단위로 변환 -> 1간격 =  (1000 / 샘플링)
rr_ecg = rr_ecg * (1000 / 130)

 

인터폴레이션함수 정의 ( 주파수 분석을 위해 )

# rr_ecg 는 밀리초 단위
# x 축 = RR간격을 나열(=축적)
# 나중에 1초를 4등분(=0.25초)해야 하므로 밀리초를 초로 변환(= 1000 으로 나눔)
x_ecg = np.cumsum(rr_ecg) / 1000

# 위의 X축과 RRI값을 Y축으로 하는 인터폴레이션 함수를 선언
f_ecg = interp1d(x_ecg, rr_ecg, kind='cubic', fill_value= 'extrapolate')

 

X시간축을 1초당 4개로 분리(4 Hz)하여 인터폴레이션 함수에 적용 

fs = 4
steps = 1 / fs

# X축을 초당 4 Hz로 확장
xx_ecg = np.arange(0, np.max(x_ecg), steps)

# 인터폴레이션 함수 적용
rr_interpolated_ecg = f_ecg(xx_ecg)

 

그래프 표시

plt.subplot(211)
plt.title('rr-intervals')
plt.plot(x_ecg, rr_ecg, color='k', markerfacecolor='#A999D1',marker='o', markersize=3)
plt.ylabel('rr-interval (ms)')
               
plt.subplot(212)
plt.title('rr-intervals (cubic interpolation)')
plt.plot(xx_ecg, rr_interpolated_ecg, color='r')
plt.xlabel('Time (s)')
 plt.ylabel('RR-interval (ms)')

plt.show()

(위) 인터폴레이션 전 (아래) 인터폴레이션 후

 

'Health > 심전도(ECG) 분석' 카테고리의 다른 글

7. 결과분석  (0) 2024.01.08
6. Heart Rate Variability (HRV)  (1) 2024.01.07
4. Peak(R) detection (Revised)  (0) 2023.12.13
3. 시그널 전처리 (Revised)  (1) 2023.12.09
2. ECG 데이터 클린징 (Revised)  (1) 2023.12.07