d8a80f6272
이름만 다른(표기 변형) [[위키링크]]를 대상 문서의 canonical 제목으로 치환해 끊겼던 1,200개 링크를 연결. 제목/파일명 정규화 일치만 적용하고 별칭 매칭은 과병합 위험으로 제외(애매성 가드). 원본은 _link_reconcile_backup/ 에 백업. 도구: Datacollect/scripts/link_reconcile_apply.mjs Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
145 lines
5.3 KiB
Markdown
145 lines
5.3 KiB
Markdown
---
|
|
id: wiki-2026-0508-neuroergonomics
|
|
title: Neuroergonomics
|
|
category: 10_Wiki/Topics
|
|
status: verified
|
|
canonical_id: self
|
|
aliases: [Neuro-Ergonomics, Brain at Work, Cognitive Ergonomics]
|
|
duplicate_of: none
|
|
source_trust_level: A
|
|
confidence_score: 0.9
|
|
verification_status: applied
|
|
tags: [neuroergonomics, hci, cognitive-load, fnirs, eeg]
|
|
raw_sources: []
|
|
last_reinforced: 2026-05-10
|
|
github_commit: pending
|
|
tech_stack:
|
|
language: python
|
|
framework: mne-python
|
|
---
|
|
|
|
# Neuroergonomics
|
|
|
|
## 매 한 줄
|
|
> **"매 brain at work — 매 neural signals 의 measure, 매 system 의 adapt"**. 매 2003 Parasuraman 의 coin, 매 fNIRS/EEG/eye-tracking 의 mature. 매 2026 의 closed-loop adaptive systems (cockpits, surgery, AR work) 의 deploy.
|
|
|
|
## 매 핵심
|
|
|
|
### 매 measurement modalities
|
|
- **EEG**: 매 ms-level temporal resolution. 매 cognitive load 의 alpha-suppression / theta-Fz 의 marker.
|
|
- **fNIRS**: 매 cortex hemodynamics. 매 portable, motion-tolerant — 매 real-world 의 work.
|
|
- **Eye tracking**: 매 fixation duration, pupil dilation — 매 mental effort 의 proxy.
|
|
- **HRV / GSR**: 매 ANS arousal — 매 stress / engagement.
|
|
|
|
### 매 cognitive states 의 detect
|
|
- **Workload**: 매 over-load → 매 error spike. 매 under-load → 매 vigilance drop.
|
|
- **Vigilance / fatigue**: 매 P300 amplitude decline + theta increase.
|
|
- **Engagement / flow**: 매 mid-frontal theta + alpha asymmetry.
|
|
|
|
### 매 응용
|
|
1. 매 adaptive cockpit (Airbus, Honeywell): 매 pilot workload 의 high → 매 secondary task 의 defer.
|
|
2. 매 surgical training: 매 trainee fNIRS prefrontal 의 over-activation = novice marker.
|
|
3. 매 driver-state monitoring (Tesla v13, Mercedes Drive Pilot): 매 EEG drowsiness 의 detect.
|
|
|
|
## 💻 패턴
|
|
|
|
### EEG workload index (theta/alpha ratio)
|
|
```python
|
|
import mne, numpy as np
|
|
raw = mne.io.read_raw_brainvision('subj.vhdr', preload=True)
|
|
raw.filter(1, 40)
|
|
psd = raw.compute_psd(fmin=4, fmax=12, picks=['Fz', 'Pz'])
|
|
freqs = psd.freqs
|
|
power = psd.get_data() # (channels, freqs)
|
|
theta = power[:, (freqs >= 4) & (freqs < 8)].mean(axis=1)
|
|
alpha = power[:, (freqs >= 8) & (freqs < 13)].mean(axis=1)
|
|
workload_index = theta / alpha # higher = more load
|
|
```
|
|
|
|
### fNIRS prefrontal activation (MNE-NIRS)
|
|
```python
|
|
from mne_nirs.experimental_design import make_first_level_design_matrix
|
|
from mne_nirs.statistics import run_glm
|
|
raw_haemo = mne.preprocessing.nirs.beer_lambert_law(raw_od, ppf=0.1)
|
|
design = make_first_level_design_matrix(raw_haemo, drift_model='cosine')
|
|
glm = run_glm(raw_haemo, design)
|
|
# beta for HbO in PFC channels = task-evoked activation
|
|
pfc_activation = glm.to_dataframe().query("ch_name.str.contains('S1_D1') & Chroma=='hbo'")
|
|
```
|
|
|
|
### Pupil-based effort (PsychoPy + Pupil Labs)
|
|
```python
|
|
import zmq, msgpack
|
|
ctx = zmq.Context(); sub = ctx.socket(zmq.SUB)
|
|
sub.connect('tcp://127.0.0.1:50020'); sub.setsockopt_string(zmq.SUBSCRIBE, 'pupil')
|
|
while True:
|
|
topic, payload = sub.recv_multipart()
|
|
msg = msgpack.unpackb(payload)
|
|
if msg['confidence'] > 0.8:
|
|
diameter_mm = msg['diameter_3d']
|
|
# baseline-corrected pupil dilation = effort proxy
|
|
```
|
|
|
|
### Closed-loop adaptive UI (workload-triggered)
|
|
```python
|
|
class AdaptiveDashboard:
|
|
def tick(self, workload_idx: float):
|
|
if workload_idx > 1.5: # high load
|
|
self.hide_secondary_widgets()
|
|
self.enlarge_primary_alert()
|
|
elif workload_idx < 0.6: # under-load → boredom
|
|
self.inject_status_check()
|
|
else:
|
|
self.restore_default()
|
|
```
|
|
|
|
### Drowsiness detector (real-time EEG)
|
|
```python
|
|
from scipy.signal import welch
|
|
def is_drowsy(eeg_window, fs=256):
|
|
f, P = welch(eeg_window, fs=fs, nperseg=fs*2)
|
|
theta = P[(f>=4)&(f<8)].mean()
|
|
beta = P[(f>=13)&(f<30)].mean()
|
|
return (theta / beta) > 4.0 # KSS-validated threshold
|
|
```
|
|
|
|
### NASA-TLX subjective + neural fusion
|
|
```python
|
|
def fused_workload(neural_idx: float, tlx_score: float) -> float:
|
|
# weight neural higher when within-subject calibrated
|
|
return 0.6 * neural_idx_z + 0.4 * (tlx_score / 100)
|
|
```
|
|
|
|
## 매 결정 기준
|
|
| 상황 | Approach |
|
|
|---|---|
|
|
| Lab, high precision needed | EEG (32-64ch) + eye-track |
|
|
| Field / mobile work | fNIRS + wearable HRV |
|
|
| Driver / pilot | Webcam-pupil + steering-entropy + PERCLOS |
|
|
| Long shift fatigue | Actigraphy + HRV + PVT |
|
|
|
|
**기본값**: fNIRS + eye-tracking — 매 real-world ecological validity 의 best.
|
|
|
|
## 🔗 Graph
|
|
- 변형: [[Affective Computing]] · [[Brain-Computer-Interface]]
|
|
|
|
## 🤖 LLM 활용
|
|
**언제**: 매 study design review, 매 GLM script generation, 매 multimodal-feature engineering, 매 paper synthesis.
|
|
**언제 X**: 매 raw artifact rejection, 매 individual-subject calibration — 매 expert review 의 require.
|
|
|
|
## ❌ 안티패턴
|
|
- **Single-modality reliance**: 매 EEG-only 의 motion artifact 에 fragile. 매 fusion 의 require.
|
|
- **No baseline**: 매 absolute power 의 between-subject 의 noisy. 매 within-subject z-score 의 use.
|
|
- **Open-loop dashboard**: 매 measure-but-not-act → 매 value 의 zero. 매 closed-loop 의 design.
|
|
- **No personalization**: 매 group-mean threshold 의 50% individuals 에 wrong.
|
|
|
|
## 🧪 검증 / 중복
|
|
- Verified (Parasuraman & Rizzo 2007 *Neuroergonomics*; Ayaz & Dehais 2019).
|
|
- 신뢰도 A.
|
|
|
|
## 🕓 Changelog
|
|
| 날짜 | 변경 |
|
|
|---|---|
|
|
| 2026-05-08 | Phase 1 |
|
|
| 2026-05-10 | Manual cleanup — modalities + closed-loop adaptive patterns |
|