저번주에 단순 임계값으로 피크를 검출하는 방식이 아닌 미분 기반 알고리즘과 SSF 알고리즘으로 으로 변경해서 비교해보려고 함

A Real-Time QRS Detection Algorithm - Pan-Tompkins Algorithm (1985)

Original Pan-Tompkins Algorithm

  • 저자: Pan & Tompkins (1985)

  • 제목: “A Real-Time QRS Detection Algorithm”

  • 핵심 기여

    :

    • 실시간 QRS 복합체 검출을 위한 종합적 접근법 제시
    • 처리 파이프라인: Bandpass 필터링(5-15Hz) → 미분 → 제곱 → 이동적분
    • 적응형 임계값 조정 메커니즘 개발
  • 성능: MIT/BIH 데이터셋 기준 99.3% 검출 정확도

Analysis of First-Derivative Based QRS Detection Algorithms - Hamilton-Tompkins Algorithm (1986)

Hamilton-Tompkins 변형 알고리즘

  • 저자: Hamilton & Tompkins (1986)

  • 핵심 개선점

    :

    • 고정 임계값에서 신호 특성 기반 자동 조정 방식으로 전환
    • 피크 검출 후 시간 조정 알고리즘 도입
    • 성능: Sensitivity 99.68%, Positive Predictive Value 99.63%

Slope Sum Function (Zong et al., 2003)

https://www.cinc.org/archives/2003/pdf/259.pdf

Slope Sum Function (SSF) for PPG

  • 저자: Zong et al. (2003)

  • 신규 접근법

    :

    • PPG 신호의 상승 부분 강조를 위한 SSF 변환 제안
    • 양의 기울기만 합산하는 방식으로 수축기 피크 식별 정확도 향상
    • 장점: 모션 아티팩트에 강건성 증가, 실시간 처리 가능

실제 데이터에서 성능을 평가하려면 참값(ground truth)이 필요

기존 db에서는 아래와 같이 결과값이 이상하게 나오는거같아서 새로운 DB를 가져다가 쓰기로 함.

image-20250508141132208

HR, ECG, PPG가 포함되어 있는 field 데이터베이스를 탐색함

그러다 의문이 든 점:

Heart Rate도 포함되어있는 데이터베이스를 찾아서 Heart Rate를 ground truth로 잡아서 ECG를 맞추고 그걸 다시 PPG를 맞춰야하는건가?

아니면 ECG를 그냥 ground truth로 잡아서 해도되는건가?

아니면 그냥 시뮬레이션 데이터를 실제 field데이터로 유사하게 만들어서 그걸로 해도 되는건가?

우선 모르겠어서 아래 데이터를 사용함. ECG를 그냥 ground truth를 잡고 가기로 함.

https://www.nature.com/articles/s41597-025-04453-7

WF-PPG: A Wrist-finger Dual-Channel Dataset for Studying the Impact of Contact Pressure on PPG Morphology

WF-PPG 데이터셋을 사용했습니다. 이 데이터셋은 다음을 포함합니다:

  • ECG 신호: 심장 활동의 전기적 신호
  • 손목 PPG 신호: 손목에서 측정한 광용적맥파
  • 손가락 PPG 신호: 손가락에서 측정한 광용적맥파
  • 접촉 압력 데이터
  • 추가 생체 정보(혈압, 산소포화도 등)

세 가지 다른 피크 검출 알고리즘을 구현해서 비교함

  1. 단순 임계값 검출(simple_threshold_detection)
    • 최대값의 60%를 임계값으로 설정
    • 0.5초 이상의 간격을 두고 피크 검출
  2. 미분 기반 방법(derivative_based_detection)
    • Pan-Tompkins 알고리즘의 간소화된 버전
    • 신호 미분, 제곱, 이동 평균 적용
    • 적응형 임계값으로 피크 검출
    • 원본 신호에서 피크 위치 보정
  3. Slope Sum Function(ssf_peak_detection)
    • 신호의 양의 기울기만 합산
    • 정규화 후 피크 검출
    • 원본 신호에서 피크 위치 보정
  • Ground Truth 설정 방식

    :

    • ECG 신호에서 R 피크를 검출 (ECG는 심장 활동의 가장 정확한 지표)
    • R 피크에 평균 Pulse Transit Time(PTT)을 더해서 PPG 피크의 예상 위치 계산
    • 이 예상 위치를 “ground truth”로 사용
  • 비교 과정

    :

    • 각 PPG 피크 검출 알고리즘(단순 임계값, 미분 기반, SSF)으로 피크 검출
    • 검출된 피크가 예상 PPG 피크(ground truth)의 허용 오차 범위 내에 있는지 확인
    • 정밀도, 재현율, F1 점수 계산

150초정도

image-20250508141158429

image-20250508141213246

처음엔 지연시간이 안 맞아서 Shift를 줬음

  • 손목 PPG는 0.1초 Shift
  • 손가락 PPG는 0.4초 Shift

근데 생각해보니까 수동으로 Shift주면 안되는데?

손목 PPG

image-20250508141305499

image-20250508141322482

손가락 PPG

image-20250508141344039

image-20250508141359605

HR을 기준으로 Shift하지 않고 _indices_01.csv안의

각 심박 주기에 대한 시작점(wrist_s, finger_s)과 끝점(wrist_e, finger_e)의

각 파형의 시작점과 끝점 사이의 중간점을 피크 위치로 간주해서 측정

똑같이 150초의 데이터

image-20250508141419639

image-20250508141434393

###

###

##

##