SOMA.DIGITAL HUMAN LAB
성능 모드

수면무호흡 실험

공통 톱 메뉴의 성능 모드에서 자동·저사양·균형·고화질을 선택합니다. 전신 트윈과 선택값을 공유하며 브라우저에 저장합니다. 저사양은 3D 최대 30FPS와 낮은 해상도, 균형은 전신 경량 모델과 확대 영역 정밀 모델, 고화질은 보이는 정밀 모델을 사용합니다. 자동은 기기 사양과 재생 중 프레임 속도로 판단합니다. CAP·ECG·ACC 생성 및 소켓 입력·융합 분석 주기는 성능 모드에 따라 바뀌지 않습니다.

시작하기

상단 전신 트윈 다음의 수면무호흡 메뉴를 연다. 명치 패치에는 C1·C2·C3 정전용량 전극과 ECG·3축 가속도계가 표시된다. 피부 버튼으로 외피를 확인하고 패치 확대 버튼으로 흉곽과 패치를 자세히 본다. 3D는 기존 전신 해부학 메시를 공유한다.

기본 입력은 합성 정전용량 3채널이다. 깨끗한 데이터가 약 20–32초 쌓이면 호흡수를 표시한다. ECG 베이스라인, 가속도, 호흡 소리 포락선, 레이더 변위를 선택하면 주기와 품질이 일치하는 채널을 결합한다. 표시된 품질은 주기성 지표이며 임상 정확도나 신뢰구간이 아니다.

왼쪽 수면, 오른쪽 수면, 뒤척이기, 바로 눕기를 선택할 수 있다. 3D 자세와 합성 센서는 같은 연속 체위 값을 사용한다. 뒤척이기는 64초 주기의 두 번의 전환과 안정 구간으로 구성된다. 수면 체위는 관절과 접촉을 제약한 제작 애니메이션이며, 수면 모션 캡처 자료를 사용했다는 뜻은 아니다.

패치 위치 조절

패치를 직접 드래그하거나 패치 이동 버튼을 켜고 가슴 앞면을 클릭한다. 패치 밖에서는 카메라를 회전할 수 있으며, 이동 모드를 끄면 일반 카메라 조작으로 돌아온다. 터치 드래그도 지원한다. 좌우 슬라이더는 환자 기준 오른쪽 8 cm부터 왼쪽 8 cm까지, 높이는 초기 명치 위치 기준 아래 6 cm부터 위 20 cm까지 조절한다. 옆으로 누워 패치가 가려지면 슬라이더로 조절할 수 있다. 둥근 화살표 아이콘은 패치만 초기 위치로 복원한다.

패치의 곡면은 실제 외피 삼각형에 부착되며 호흡과 체위 변화에 따라 같은 피부 위치를 유지한다. 위치는 내보내기 JSON의 patchPlacement에 atlas-bind 좌표(m, X는 환자의 왼쪽, Y는 위쪽)로 기록한다. 합성 모드에서는 세 전극의 실제 피부 좌표로 ECG 전위차와 국소 CAP 감도를 다시 계산한다. 이동 시 아티팩트 구간을 기록한다. 외부 소켓 신호는 위치 이동으로 수정하거나 합성하지 않는다.

물리 및 전기 모델

폐는 단일 구획의 운동 방정식 R·dV/dt + V/C_L = P_mus로 표현한다. V는 기능적 잔기량(FRC) 위 용적(L), C_L은 폐 순응도(L/cmH₂O), R은 기도 저항(cmH₂O·s/L)이다. 압력 구동과 이완, 기도 저항에 따라 용적과 기류를 적분한다. 흉곽 변위는 용적과 호흡 노력에 연결하며 정상 기본 조건에서 수 mm 크기로 설정한다.

각 전극의 유효 정전용량은 C_total = C_parasitic + ε₀·ε_eff·A_eff/d_eff로 계산한다. 흉벽 움직임에 의한 면적 변형, 유효 거리 변화, 접촉 움직임과 잡음을 반영한다. ε_eff, d_eff는 피부·지방·폐를 통과하는 실제 전기장 해석을 대신하는 교정 파라미터이다. 명치의 공면 전극이 폐에 평행판을 형성한다는 뜻이 아니며 절대 폐용적을 직접 측정했다는 주장도 아니다. 정밀 확장은 개인별 CT/MRI 분할과 전기장 FEM, 기류/폐활량계 동시 교정이 필요하다.

ECG는 P·Q·R·S·T별 3차원 전류 쌍극자 p를 합산하고, 균질 준정적 체적 도체의 전위 φ = p·r/(4πσ|r|³)를 전극별로 계산한다. r은 심장 소스에서 전극까지의 벡터(m), p는 A·m, σ는 S/m이며 표시 전위는 mV로 변환한다. C3−C1 전위차를 측정하고 C2를 기준으로 두는 연구용 배선 가정이다. 실제 장치 배선을 확인했다는 뜻은 아니다. 위치·방향에 따라 진폭, 극성, P/QRS/T 비율이 달라지며 거리만으로 단조 감소하지는 않는다. 호흡에 의한 심장 위치·방향과 국소 접촉 기저선 변화를 포함한다. 기본 전도도 0.2 S/m와 쌍극자 크기는 연구용 유효값이며 실제 ECG 교정을 대신하지 않는다.

CAP의 국소 결합은 실제 폐 5엽의 전면 메시에서 추출한 541개 표본과 각 전극의 피부 위치를 사용한다. 30 mm 공간 가중, 조직 깊이 감쇠, 복부 호흡 노력의 공간 분포, 피하지방 유효 두께를 적용해 국소 변위를 산출하고 A_eff와 d_eff에 반영한다. 공면 전극의 직접 유전 감도는 exp(−2π·depth/28 mm)로 감쇠하는 작은 항이다. 기본 명치 위치는 폐 아래이므로 주로 복부의 기계적 결합을 반영한다. 깊은 폐를 직접 정밀 측정하는 전기장 FEM이 아니다. 기본 지방 두께 8 mm 및 감쇠 길이는 교정 전 가정이다. scripts/build-sleep-anatomy.mjs가 입력 메시 해시와 감도용 공간 표본을 재생성한다.

가속도는 a_sensor = Rᵀ[g + α×r + ω×(ω×r) + a_resp] + noise로 체위·회전·국소 호흡 가속도를 조합한다. 패치 X는 전극 C1→C3, Y는 피부를 따라 머리 방향, Z는 피부 바깥 방향이다. 세 축 모두 중력과 잡음을 포함하며, 정지 시 벡터 크기는 약 9.81 m/s²이다. 호흡 융합은 세 축에서 유효한 주기성 후보를 평가해 가장 품질이 좋은 축 하나를 사용한다.

파형 읽기

CAP C1·C2·C3, ECG, ACC X·Y·Z, EDR을 각각 8개 행에 표시한다. CAP와 ACC는 같은 모달리티 안에서 같은 배율을 사용하되 각 채널의 중심은 다르며 숫자 축에 실제 단위를 표시한다. ECG는 ±0.5/1/2/5 mV 고정 범위를 선택한다. 범위 초과 시 CLIP을 표시하므로 패치 이동에 따른 진폭 차이를 자동 확대가 숨기지 않는다. 여러 외부 채널이 같은 종류로 들어오면 가장 최근 채널을 그리며, 분석에는 활성 채널들이 참여한다.

EDR은 획득 ECG의 200 ms·600 ms 인과적 중앙값 필터와 저주파 기저선 처리 결과다. 합성 목표 호흡수나 폐용적을 직접 그린 파형이 아니며 필터 지연을 포함한다. HR은 ECG 극성에 독립적인 적응 임계값 검출과 측정 박동 간격으로 구한다.

수면에서는 위쪽 팔을 몸 앞쪽으로 모으고 아래쪽 팔은 매트리스 방향으로 두는 연속 관절 자세를 사용한다. 팔을 몸통과 함께 공중으로 들어 올리던 추가 회전을 제거했다. 신체 외피의 지지 표본으로 침대 높이를 보정하며, 개인별 접촉 역학을 푸는 모션 캡처나 FEM은 아니다.

모든 설정값은 연구용 예시이다. 패치 치수, 유전 특성, 유효 거리, 기기 잡음과 동역학 파라미터를 실제 기기로 교정해야 한다.

호흡 추정과 레이블

정전용량은 세 전극 평균을 사용한다. ECG는 저주파 기저선을 추출하며 R파 검출에서 심박수를 별도로 계산한다. 가속도와 레이더, 오디오 특징도 각각 호흡 후보를 만든다. 최대 32초 버퍼를 균일 간격으로 재표본화하고 선형 드리프트를 제거한 뒤 6–35회/분 범위에서 자기상관 주기를 추정한다. 주기성 품질과 중앙 주기에 대한 일치도에 따라 후보를 선택하고 품질 제곱 가중치로 결합한다. 합성 모델의 목표 호흡수나 참조 용적은 추정기에 전달하지 않는다.

ACC의 움직임과 중력 변화, 정전용량의 급격한 변화, 카메라 움직임 특징을 아티팩트 분류에 사용한다. ACC와 카메라의 움직임 판별은 호흡 융합 스위치와 독립적으로 동작한다. 움직임 뒤 2.5초 보호 구간을 적용하고 새로운 깨끗한 구간에서 추정을 재개한다. 신호 소실, 긴 샘플 공백, 오래된 입력은 유효 호흡수로 채우지 않는다. 주기성이 낮은 경우 숫자를 숨긴다.

폐쇄성 시나리오는 매 60초의 25–43초 구간에서 기도 저항을 높이되 호흡 노력을 남긴다. 중추성 비교 시나리오는 같은 구간에서 호흡 구동을 없앤다. 표시된 이벤트 구간은 입력 시나리오의 참조이며 자동으로 확진한 사건이 아니다. CAP만으로 기류 소실, 임상 AHI, 수면 단계 또는 무호흡 유형을 확진하지 않는다.

소켓 입력

WebSocket / IP를 선택하고 WS 또는 WSS 게이트웨이 주소에 연결한다. 합성 모드와 외부 입력 모드는 버퍼를 분리하며 전환 시 초기화한다. 여러 기기의 채널을 한 연결로 수신한다. 최대 32개 채널 ID를 허용한다. 각 장치는 공통 세션 시작 시각을 기준으로 초 단위 타임스탬프를 사용해야 한다. 장치 시계 동기화와 전송 지연 보정은 게이트웨이의 책임이다.

JSON 패킷 예: {"version":1,"channel":"patch-1","kind":"cap","unit":"pF","t0":10.0,"fs":25,"samples":[[14.21,15.07,15.88],[14.23,15.09,15.90]]}

  • version: 1. channel: 기기별 고유 문자열, 최대 64자. kind: 아래 종류 중 하나.
  • t0: 첫 샘플의 세션 시각(초). fs: Hz, 1–2000. 다음 샘플 시각은 t0 + i/fs이다.
  • samples: 패킷당 1–2000개. JSON 프레임 최대 1 MB. 채널별 시각 역전과 중복 패킷, 잘못된 단위·배열·비유한 값을 거부한다.
  • cap: [C1,C2,C3], pF. ecg: 스칼라, mV. acc: [ax,ay,az], m/s2, 중력을 포함한다.
  • breathAudio: 비음수 음성 RMS 포락선, rms. snore: 0–1 코골이 확률, probability.
  • camera: 0–1 움직임 점수, motion. radar: [호흡방향 변위,x,y,z], mm. airflow: 부호 있는 기류, L/s.
  • ACC는 패치 좌표의 XYZ를 모두 전송한다. 실제 기기 축과 단위를 게이트웨이에서 정렬한다. 융합은 주기성 품질이 좋은 축을 선택한다.

브라우저는 원시 TCP·RTSP·레이더 IQ 데이터를 직접 해석하지 않는다. 오디오 RMS, 코골이 확률, 영상 움직임 점수, 레이더 변위·위치는 기기/게이트웨이에서 추출해 전달한다. 원본 오디오/영상은 브라우저가 지원하는 HTTP(S) 파일/스트림 주소로 별도 모니터링할 수 있다. 이 버전에는 코골이 AI 분류기나 영상 자세 추정 모델이 포함되지 않는다.

로컬 게이트웨이

web 폴더에서 npm ci 후 npm run sleep:demo를 실행한다. 로컬 페이지에서 ws://localhost:8765/stream으로 연결하면 같은 물리 모델이 실제 소켓을 거쳐 들어온다. 장치 연결용은 npm run sleep:gateway를 실행한다. 생산자는 ws://localhost:8765/input에 위 JSON 패킷을 전송하고, 화면은 /stream에 연결한다. 데모 모드에서는 장치 입력을 받지 않는다.

기본 바인딩 주소는 127.0.0.1이다. LAN 수신이 필요하면 SOMA_SLEEP_HOST를 해당 인터페이스 주소로 설정하고 SOMA_SLEEP_PORT로 포트를 지정한다. Mac/Linux 예: SOMA_SLEEP_HOST=0.0.0.0 npm run sleep:gateway. Windows PowerShell 예: $env:SOMA_SLEEP_HOST='0.0.0.0'; npm run sleep:gateway.

공개 HTTPS 사이트에서는 WSS 게이트웨이를 사용한다. 로컬 데모의 HTTP 페이지에서는 WS를 사용할 수 있다. 이 샘플 게이트웨이는 로컬 연구용으로 인증이 없으므로 인터넷 공개는 인증과 TLS를 갖춘 게이트웨이를 사용한다. 브라우저 데이터는 이 페이지에서 처리되며 별도 클라우드 저장을 수행하지 않는다.

내보내기는 최근 12초의 원시 버퍼, 현재 추정 결과, 최근 레이블 전환(최대 500개)과 합성 설정을 JSON으로 저장한다. 전체 밤 기록 또는 전체 원본 미디어 저장 기능은 아니다.

근거와 검증 범위

명치 부위 정전용량 호흡 모니터링 연구: https://pubmed.ncbi.nlm.nih.gov/32643322/ . 해당 연구는 방법 선택의 참고이며 이 시뮬레이터의 정확도 근거로 사용하지 않는다.

ECG 합성 모델 참고: https://physionet.org/content/ecgsyn/1.0.0/ . 수면 호흡 사건과 노력/기류 구분 참고: https://pmc.ncbi.nlm.nih.gov/articles/PMC3459210/ . WebSocket 게이트웨이: https://github.com/websockets/ws . 입력 자료의 회사 정보, 임상 수치, 내부 일정은 공개 매뉴얼에 옮기지 않는다.

전위 모델 참고: 3차원 ECG 쌍극자 모델. 국소 정전용량과 흉벽 호흡 참고: 정전용량 호흡 패치 연구. 본 구현의 공간 커널 및 계수는 별도 연구용 근사이다.