KOEN中HI
개발 중인 시제품 기록입니다 · 의료기기 허가 전 · 진단용이 아닙니다

← EKG 개발 기록

신호처리 결과

2중 적응형 노치 · QRS 검출 · VF/VT 경보 · 무수축 · 박동 분류 · 다중 리드 · 연산량 (2026-10-11, 4차까지)

이 페이지의 숫자에 대하여

아래 숫자는 모두 PC 에서 C 참조 구현을 실제로 돌려 잰 시험 결과입니다. 입력은 공개 심전도 데이터베이스 기록(MIT · NST · CU · VFDB)과 합성 신호(합성 60 Hz 잡음, 합성 근잡음, 합성 페이스메이커 펄스, 합성 4리드)입니다. 실제 장치 · 실제 사람에게서 잰 값이 아닙니다.

용어뜻 (이 페이지에서)
Se / +P검출 민감도(기준 중 잡은 비율) / 양성 예측도(검출 중 맞은 비율)
VF · VT심실세동 · 심실빈맥 경보 조건
헛경보 /h기준과 겹치지 않은 경보 수를 기록 시간으로 나눈 값(회/시간)
MIT · NST · CU · VFDB시험에 쓴 심전도 데이터베이스 묶음 (NST = 잡음 스트레스 시험 기록)

1. 한눈에 (4차 — 헛경보 줄이기)

목표(놓침을 늘리지 않고 헛경보 줄이기)는 반만 이뤘습니다. VF 헛경보는 줄었지만, 짧은 VF 조각 놓침이 늘었고, VT 헛경보는 줄지 않았으며, VF 와 VT 를 가르는 것은 실패했습니다.

2. 2중 적응형 노치 (전원 60 Hz 잡음 제거)

노치는 2차(v2)에서 만든 것을 4차까지 그대로 씁니다. 아래는 2차 시험 결과입니다(합성 신호, 1차 시험과 같은 신호 · 같은 난수 씨앗, 처음 10 s 제외).

2.1 바꾼 것 (1차 → 2차)

2.2 수렴 · 감쇠

노치 수렴 시간 — 1차와 2차 비교
수렴 시간 — 4개 주파수 중 가장 늦은 값. 1차 개선안은 20 µVp-p 에서 50~60 s, v2 는 10 s 안. 1 mVp-p 에서는 v2 가 늦다

2.3 노치가 심전도를 깎는가 · 링잉

좁은 QRS 에서 노치 깎임 파형 비교
좁은 QRS — 1차(주황)는 R 뒤로 60 Hz 링잉이 300 ms 넘게 남는다. v2 상쇄기(파랑)는 평평하다
모드파형깎임 첨두 µV 1차v2 상쇄기링잉 µV 1차v2 상쇄기
모니터보통 QRS15.60.11.90.1
모니터좁은 QRS50.90.833.80.8
모니터삼각파 20 ms51.41.043.01.0
진단보통 QRS7.80.00.90.0
진단좁은 QRS25.50.916.90.9
진단삼각파 20 ms26.11.121.71.1

3. QRS 검출 1~4차 대비

박동 단위 채점은 WFDB bxb 로 했습니다. 2차부터는 교차검증(고를 때 안 본 묶음에서 잰 값)입니다. 4차의 박동 위치는 3차와 한 표본도 다르지 않습니다(4개 DB 전 기록 확인).

QRS Se / +P %1차2차 A 교차3차4차
MIT 4899.80 / 99.1499.61 / 99.5299.61 / 99.5199.61 / 99.51
NST 1296.85 / 79.2394.95 / 86.9794.91 / 87.2394.91 / 87.23
CU 3595.85 / 86.4392.94 / 91.7093.93 / 92.9393.93 / 92.93

4. VF · VT 헛경보

4.1 VF 와 VT 를 가를 수 있나 — 실패

VF 창 6,432개 · VT 창 5,044개로 「VF 대 VT」 부스팅을 기록 묶음 5겹(같은 기록이 학습과 시험에 함께 들어가지 않음)으로 쟀습니다.

특징AUCVFDB VT→VF % (P≥0.5)VFDB VF 유지 %CU VT→VF %MIT VT→VF %
3차 창 특징0.52256.954.850.02.2
4차 창 특징0.44258.440.935.70.0
박동 기반0.61349.553.957.14.3
창(4차) + 박동0.49155.437.757.11.1

AUC 0.5 근처는 「못 가른다」입니다. VF 경보 안에서 VT 를 따로 부르는 단계는 넣지 않았습니다. VFDB 의 VT 창 중 VF 로 부른 비율은 3차 69.6 % → 4차 74.9 %.

4.2 경보 확인 규칙

VF 경보 = 최근 m 초 중 k 초 이상 P ≥ 문턱이고 지금 초도 ≥ 문턱이면 켬, 3초 연속 미만이면 끔. 3차는 k = m = 3. 기본값은 안쪽 데이터에서 골랐습니다(바깥 시험 묶음은 쓰지 않음).

경보 확인 규칙 k/m 곡선
시험 묶음에서 k/m 을 바꿨을 때 (보고용 곡선 — 기본값은 안쪽에서 정했다). 4/4 는 3/3 보다 헛경보가 적고 9 s 안에 잡은 수는 같다. 5/5 부터 9 s 안 잡은 수가 줄기 시작한다
DBk/m에피소드8 s+8 s+ 9 s 안지연 중앙 s최대 s헛경보/h
CU3/347/4747/47453.722.76112.60
CU4/446/4746/47454.7127.7449.09
CU5/546/4746/47445.7128.7357.23
VFDB3/3100/11127/27272.86.217813.94
VFDB4/496/11127/27273.87.213610.65
VFDB5/592/11126/27265.38.11027.99
MIT3/34/63/436.27.300.00
MIT4/43/63/437.28.300.00
MIT5/53/63/428.29.300.00

4.3 VF 헛경보 — 3차와 4차

VF 헛경보 3차 4차 비교
VF 헛경보가 어디서 났나 — 3차(연한 색) 와 4차(진한 색)
DB판창 Se %창 Sp %에피소드8 s+지연 중앙헛경보/h
MIT3차81.97100.004/63/46.200.00
MIT4차81.15100.003/63/46.500.00
CU3차73.9194.3147/4747/473.76112.60
CU4차73.9194.3146/4746/474.7449.09
VFDB3차94.0094.17105/11127/273.818314.33
VFDB4차94.8293.3396/11127/273.813610.65

창 Se/Sp 는 확인 규칙 전 문턱 기준이라 3차와 거의 같습니다. 헛경보가 준 것은 모형이 아니라 확인 규칙 때문입니다. 놓친 것은 주로 8 s 미만 짧은 조각(VFDB 419 의 1.1~2.3 s 조각 9개, 422 의 6.8 s, MIT 207 의 5.9 s)입니다.

4.4 VT 경보 재확인 — 기본으로 넣지 않음

VT 경보 = V 5개 연속 · 100 bpm 이상. 다른 리드 일치 · 모양 일치 · 잡음 의심 · 연속 수 · 속도로 재확인하는 후보 768칸을 안쪽에서 골랐습니다.

VT 헛경보와 5박 이상 VT 검출 수
VT 헛경보와 5박 이상 VT 를 잡은 수 — 재확인은 VFDB 에서 놓침을 늘렸다
DB판5박+ (VFDB 3 s+)헛경보/h
MIT3차5/11190.8
MIT4차 기본8/11180.7
NST3차0/014924.8
NST4차 기본0/016327.1
CU3차4/47314.8
CU4차 기본4/48417.0
VFDB3차35/6428021.8
VFDB4차 기본34/6425720.0
VFDB4차 재확인24/64423.3

리드 일치(박동마다)는 NST 헛경보를 27.1 → 3.3/h 로 거의 없애지만 VFDB VT 를 34 → 26/64 로 놓칩니다. 모양 일치 · 연속 수 · 속도도 모두 같은 방향(헛경보 ↓ · VFDB 놓침 ↑)이었습니다. 그래서 4차 기본은 재확인 끔(놓침을 늘리지 않는 쪽)입니다.

4.5 치명 부정맥 경보(VF ∪ VT) 를 하나로 보면

치명 부정맥 경보 헛경보
VF 경보와 VT 경보를 합친 고우선 경보의 헛경보 (기준 VF·VT 와 켜짐 −3 s ~ 꺼짐 +2 s 안에서 안 겹친 것)
DB3 s+ VF/VT 잡음 3차4차 기본헛경보 3차4차 기본
MIT9/159/1518 (0.8/h)18 (0.8/h)
NST0/00/0143 (23.9/h)156 (26.1/h)
CU51/5151/51105 (21.7/h)100 (20.7/h)
VFDB103/122102/122234 (18.3/h)217 (17.0/h)

VT 를 VF 로 부른 것은 이 표에서는 헛경보가 아닙니다.

5. 경보 지연 (합 10 s 목표)

「조건 지연 + 신호 생성 지연 ≤ 10 s」를 VF · VT 에도 목표로 잡았습니다(제안). 신호 생성 지연(소리 · 화면)은 아직 없어 못 쟀으므로 1 s 를 남겨 두고 조건 지연 9 s 를 기준선으로 썼습니다(제안).

경보지연을 만드는 것지연 중앙 s (4차)9 s 안 (8 s+)
VF특징 창 4 s + 확인 4초 연속 + 1 s 판정 주기CU 4.7 · VFDB 3.8 · MIT 6.5CU 45/47 · VFDB 27/27 · MIT 3/4
VTV 5개 연속 + 분류 1박동 늦음MIT 1.7 · CU 1.5 · VFDB 2.5—
무수축박동 없음 4 s + 1 s 판정 주기합성 4 s (13종 시험)합성 근잡음 150 µV 8/8 (10 s 안)
리드오프1 s 창1 s—

6. 무수축 — 근잡음 150 µV 대책

무수축 시계는 박동이 올 때마다 0 으로 돌아갑니다. 4차는 「믿을 만한 박동」(진폭 / 40 Hz 이상 rms ≥ 6)만 시계를 되돌리게 했습니다(학습 반에서 고름). 박동 출력(HR 계산)은 그대로 두고 무수축에만 씁니다.

무수축 30 s 동안 경보 켜진 비율
무수축 30 s 동안 경보가 켜진 비율 — 합성 잡음은 풀렸고 실제 근잡음은 그대로
잡음판50 µV100 µV150 µV200 µV300 µV
합성 · 리드마다 따로3차8/8 · 87 % · 헛 0 s8/8 · 71 % · 헛 0 s8/8 · 17 % · 헛 0 s8/8 · 17 % · 헛 0 s8/8 · 13 % · 헛 0 s
합성 · 리드마다 따로4차8/8 · 87 % · 헛 0 s8/8 · 87 % · 헛 0 s8/8 · 87 % · 헛 0 s8/8 · 88 % · 헛 0 s8/8 · 88 % · 헛 133 s
합성 · 70 % 공통3차8/8 · 85 % · 헛 0 s8/8 · 62 % · 헛 0 s8/8 · 16 % · 헛 0 s8/8 · 14 % · 헛 0 s7/8 · 11 % · 헛 2 s
합성 · 70 % 공통4차8/8 · 85 % · 헛 0 s8/8 · 87 % · 헛 0 s8/8 · 85 % · 헛 0 s8/8 · 86 % · 헛 0 s8/8 · 86 % · 헛 109 s
실제 ma3차8/8 · 41 % · 헛 0 s4/8 · 18 % · 헛 0 s4/8 · 21 % · 헛 0 s2/8 · 7 % · 헛 0 s3/8 · 9 % · 헛 0 s
실제 ma4차8/8 · 43 % · 헛 0 s4/8 · 18 % · 헛 0 s4/8 · 21 % · 헛 0 s2/8 · 7 % · 헛 0 s3/8 · 10 % · 헛 0 s

칸 = 무수축 사건 10 s 안 경보 기록 수 · 무수축 30 s 중 경보 켜진 비율 · 사건 없는 8기록의 헛 무수축 초 합

7. 박동 분류 V — 환자 간 분리 그대로

분류기를 LDA(3차)에서 클래스마다 그루터기 부스팅(64 · 128개)으로 바꿨습니다. 고르기는 안쪽 4겹만 썼고, 어떤 기록도 자기 박동으로 학습한 모형으로 재지 않았습니다.

박동 분류 V Se +P 3차 4차
V Se · +P (bxb, 처음 5분 제외) — 3차 LDA 와 4차 부스팅
묶음V Se 3차4차V +P 3차4차V 헛 3차4차
DS1 22 (DS2 로 학습)66.6186.3485.4785.83364458
DS2 22 (DS1 로 학습)86.8296.4682.9077.25481763
MIT 44 (페이싱 제외)75.8190.9584.1181.468451221
페이싱 4 (MIT 44 로 학습)31.3436.8219.6920.00257296
NST 12 (DS2 로 학습)77.9089.9633.9436.1834293589

8. 합성 4리드(I · II · III · V) 전극 잡음

MIT 20기록의 두 채널로 4리드를 근사 합성하고(I = III = 0.5·II 근사), 실제 전극 움직임 잡음(em)을 전극마다 다른 구간에서 잘라 RA · LA · LL · V 에 붙였습니다.

합성 4리드 전극 잡음 결과
전극 하나만 흔들리면 리드가 많을수록 헛경보가 준다 (잡음이 안 들어간 리드를 SQI 가 고른다)
잡음리드QRS Se+PV SeV +PVT (5박+ · 헛/h)
잡음 없음1리드 II99.5499.8489.888.63/7 · 1.5
잡음 없음4리드99.2799.6889.086.54/7 · 1.2
RA 만 0.3 mV1리드 II98.8596.1280.736.24/7 · 11.4
RA 만 0.3 mV2리드 II·V97.4297.9775.041.94/7 · 6.8
RA 만 0.3 mV4리드99.2699.6776.948.85/7 · 2.9
네 전극 0.15 mV1리드 II99.2799.5385.763.63/7 · 2.0
네 전극 0.15 mV4리드98.2699.0979.959.63/7 · 2.8

9. MCU 연산량 (맥 실측 → 추정 환산)

C 참조 구현을 맥(Apple M6, clang -O2)에서 MIT 207 30분(2리드)과 같은 기록의 합성 4리드로 5번 돌려 쟀습니다. Cortex-M7 값은 추정입니다(명령 수가 같다고 두고 CPI 0.8~1.5, 800 MHz).

설정맥 µs / 신호 1 s명령 M / 신호 1 sM7 800 MHz ms / 1 s (추정)부하 % (추정)1 s 블록 최대 ms (추정)
2리드167.94.544.5~8.50.45~0.856.0~11.2
4리드317.78.678.7~16.30.87~1.6310.4~19.5

10. 1~4차 대비

항목1차2차3차4차
VF 헛경보 /h (CU · VFDB)——12.6 · 14.39.1 · 10.6
8 s+ VF 9 s 안 (CU · VFDB)——45/47 · 27/2745/47 · 27/27
VF 에피소드 전체 (CU · VFDB · MIT)——47 · 105 · 446 · 96 · 3
VT 헛경보 /h (NST · CU · VFDB)——24.8 · 14.8 · 21.827.1 · 17.0 · 20.0
치명 경보 헛경보 /h (NST · CU · VFDB)——23.9 · 21.7 · 18.326.1 · 20.7 · 17.0
V Se / +P % DS1분류 없음분류 없음66.6 / 85.586.3 / 85.8
V Se / +P % DS2분류 없음분류 없음86.8 / 82.996.5 / 77.3
무수축 근잡음 150 µV (합성 · 실제 ma, 켜진 %)——17 · 2187 · 21
MCU 연산 (M7 800 MHz, 2리드)——미측정0.5~0.9 % (추정)

11. 한계 · 확인 못 한 것