铁路驾驶员疲劳检测:多传感器实景测量——arXiv 2026 论文解读与 IMS 跨域启示

论文信息

项目 内容
标题 Multisensor Measurement of Train Driver Mental Fatigue: From Simulation to Reality
作者 Esther Bosch, Rebecca Kruschka, David Schackmann, Stephanie Hoyer, Wolfgang Kilian, Stefan Schwanitz, Anneke Hamann
机构 German Aerospace Center (DLR), ISB GmbH, Chemnitz University of Technology
期刊 Applied Ergonomics (arXiv 预印)
发布 2026年
链接 https://arxiv.org/html/2608.23361

核心创新

这是首个在真实铁路运营环境中部署全多传感器阵列测量列车驾驶员精神疲劳的研究:

  1. 真实铁路环境首次验证:此前研究仅限模拟器,本研究在真实运营列车上采集
  2. 全多传感器阵列:EEG + ECG + HRV + EDA + 眼动 + 呼吸 + 行为,首次同时部署
  3. 模拟器 vs 真实环境对比:14人模拟器 + 6人真实运营,系统对比
  4. 关键发现:HRV 和呼吸率是真实环境中最鲁棒的疲劳指标,EEG 在振动环境下不可靠

研究背景

背景 说明
铁路自动化趋势 GoA2(半自动运行)将驾驶员从手动控制转为监控角色
被动疲劳 监控任务的单调性导致被动疲劳,不同于汽车驾驶的主动疲劳
安全风险 SPAD(冲过停车信号)与疲劳相关
现有局限 传统”死人开关”仅做基础警觉性检查,无法检测认知疲劳

模拟器 vs 真实环境对比

维度 模拟器 (n=14) 真实运营 (n=6)
环境 高保真模拟器 真实铁路线路
振动 无/可控 显著(列车振动)
光照 可控 隧道切换、日光变化
传感器稳定性 良好 连接问题、运动伪影
EEG 质量 可接受 受振动严重干扰
HRV 质量 良好 良好(最鲁棒)
呼吸率 质量 良好 良好

方法详解

1. 实验协议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class TrainDriverStudyProtocol:
"""
铁路驾驶员疲劳研究实验协议

论文设计的标准化协议:
1. 基线驾驶(15分钟)→ 建立正常状态基线
2. 疲劳诱导:1小时听觉 n-back 任务 → 诱导精神疲劳
3. 第二次驾驶(15分钟)→ 测量疲劳后状态

n-back 任务说明:
- 听觉呈现字母序列
- 当当前字母与 n 步之前的字母相同时按键
- 2-back 难度,持续 1 小时
- 已验证的精神疲劳诱导方法
"""

PROTOCOL = {
"phase_1_baseline": {
"name": "基线驾驶",
"duration_min": 15,
"task": "正常列车驾驶",
"measurements": ["EEG", "ECG", "HRV", "EDA", "眼动", "呼吸", "行为"],
},
"phase_2_fatigue_induction": {
"name": "疲劳诱导",
"duration_min": 60,
"task": "听觉 2-back 连续任务",
"purpose": "诱导精神疲劳(非睡眠剥夺)",
},
"phase_3_post_drive": {
"name": "疲劳后驾驶",
"duration_min": 15,
"task": "正常列车驾驶",
"measurements": ["EEG", "ECG", "HRV", "EDA", "眼动", "呼吸", "行为"],
}
}

SUBJECTS = {
"simulator": {"n": 14, "age_range": "25-55", "experience": "专业列车驾驶员"},
"real_world": {"n": 6, "age_range": "30-50", "experience": "专业列车驾驶员"},
}

2. 关键发现:传感器鲁棒性排名

传感器 模拟器有效性 真实环境有效性 鲁棒性排名 IMS 启示
HRV (LF/HF ratio) ✅ 显著变化 ✅ 显著变化 🥇 1 振动环境下最可靠
呼吸率 ✅ 显著变化 ✅ 显著变化 🥇 2 与 HRV 互补
EEG (frontal theta) ✅ 趋势变化 ❌ 不显著 🥉 3 振动干扰严重
EDA ⚠️ 模糊 ❌ 不显著 4 个体差异太大
眨眼时长 ⚠️ 模糊 ❌ 不显著 5 振动影响眼部检测
行为指标 ⚠️ 模糊 ❌ 不显著 6 监控任务行为变化小

3. HRV 疲劳检测代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
import numpy as np
from typing import Tuple, Dict

class HRVFatigueDetector:
"""
基于 HRV 的铁路/汽车驾驶员疲劳检测器

论文发现:
- LF/HF ratio 在疲劳后显著降低(副交感神经主导)
- 呼吸率在疲劳后降低
- 这两个指标在模拟器和真实环境中都鲁棒

适用场景:
- 列车驾驶室(振动环境)
- 汽车驾驶室(已有座椅/方向盘电极)
- 船舶驾驶台(类似振动环境)

硬件配置:
| 组件 | 型号 | 参数 | 部署 |
|------|------|------|------|
| ECG 电极 | 座椅集成 | 3导联, 250Hz | 驾驶员座椅 |
| 呼吸传感器 | 压电带 | 1Hz | 安全带 |
| 处理器 | 车载计算 | ARM Cortex-A78 | 驾驶舱电子柜 |
"""

def __init__(self, sampling_rate: int = 250):
self.fs = sampling_rate

def extract_rr_intervals(self, ecg_signal: np.ndarray) -> np.ndarray:
"""
从 ECG 信号提取 RR 间期

Args:
ecg_signal: ECG 信号, shape=(N,)

Returns:
rr_intervals: RR 间期序列, shape=(M,)
"""
# 简化版 R 峰检测
from scipy.signal import find_peaks
peaks, _ = find_peaks(ecg_signal, distance=self.fs*0.5, height=0.6*np.max(ecg_signal))
rr_intervals = np.diff(peaks) / self.fs # 转为秒
return rr_intervals

def compute_hrv_features(self, rr: np.ndarray) -> Dict[str, float]:
"""
计算 HRV 时域和频域特征

Args:
rr: RR 间期序列 (秒)

Returns:
features: HRV 特征字典
"""
# 时域特征
rmssd = np.sqrt(np.mean(np.diff(rr) ** 2)) # 相邻RR差值均方根
sdnn = np.std(rr) # RR间期标准差
mean_hr = 60 / np.mean(rr) # 平均心率

# 频域特征(简化FFT)
from scipy.signal import welch
freqs, psd = welch(rr * 1000, fs=1.0/np.mean(np.diff(rr)), nperseg=len(rr))

# LF (0.04-0.15 Hz) 和 HF (0.15-0.40 Hz) 功率
lf_mask = (freqs >= 0.04) & (freqs < 0.15)
hf_mask = (freqs >= 0.15) & (freqs < 0.40)
lf_power = np.trapz(psd[lf_mask], freqs[lf_mask])
hf_power = np.trapz(psd[hf_mask], freqs[hf_mask])
lf_hf_ratio = lf_power / (hf_power + 1e-8)

# 归一化
total_power = lf_power + hf_power
lf_nu = lf_power / (total_power + 1e-8) * 100
hf_nu = hf_power / (total_power + 1e-8) * 100

return {
"RMSSD_ms": rmssd * 1000,
"SDNN_ms": sdnn * 1000,
"mean_HR_bpm": mean_hr,
"LF_HF_ratio": lf_hf_ratio,
"LF_nu": lf_nu,
"HF_nu": hf_nu,
"total_power_ms2": total_power,
}

def detect_fatigue(self, baseline_hrv: Dict, current_hrv: Dict) -> Dict:
"""
疲劳检测(对比基线)

论文关键发现:
- 疲劳后 LF/HF ratio 降低(副交感主导)
- 疲劳后 RMSSD 增加(副交感增强)
- 疲劳后呼吸率降低

Args:
baseline_hrv: 基线 HRV 特征
current_hrv: 当前 HRV 特征

Returns:
result: 疲劳评估结果
"""
# LF/HF ratio 变化
lf_hf_change = (current_hrv["LF_HF_ratio"] - baseline_hrv["LF_HF_ratio"]) / baseline_hrv["LF_HF_ratio"]

# RMSSD 变化
rmssd_change = (current_hrv["RMSSD_ms"] - baseline_hrv["RMSSD_ms"]) / baseline_hrv["RMSSD_ms"]

# 综合疲劳分数 (0-1, 越高越疲劳)
# LF/HF 降低 + RMSSD 增加 → 疲劳
fatigue_score = 0.5 * max(0, -lf_hf_change) + 0.5 * max(0, rmssd_change)
fatigue_score = min(1.0, fatigue_score)

# 分类
if fatigue_score < 0.15:
level = "alert"
elif fatigue_score < 0.35:
level = "mild_fatigue"
else:
level = "severe_fatigue"

return {
"fatigue_score": round(fatigue_score, 3),
"level": level,
"lf_hf_change_pct": round(lf_hf_change * 100, 1),
"rmssd_change_pct": round(rmssd_change * 100, 1),
"confidence": "high" if abs(lf_hf_change) > 0.1 else "medium",
}


# 测试
if __name__ == "__main__":
detector = HRVFatigueDetector(sampling_rate=250)

# 模拟清醒状态 ECG
np.random.seed(42)
t_alert = np.arange(0, 60, 1/250)
hr_alert = 75 # bpm
ecg_alert = np.sin(2*np.pi*hr_alert/60*t_alert) + 0.1*np.random.randn(len(t_alert))
rr_alert = detector.extract_rr_intervals(ecg_alert)
hrv_alert = detector.compute_hrv_features(rr_alert)

# 模拟疲劳状态(心率降低,HRV变化)
hr_fatigued = 68 # 心率降低
ecg_fatigued = np.sin(2*np.pi*hr_fatigued/60*t_alert) + 0.15*np.random.randn(len(t_alert))
rr_fatigued = detector.extract_rr_intervals(ecg_fatigued)
hrv_fatigued = detector.compute_hrv_features(rr_fatigued)

# 检测
result = detector.detect_fatigue(hrv_alert, hrv_fatigued)

print("=== HRV 疲劳检测 ===")
print(f"基线 HRV: {hrv_alert}")
print(f"当前 HRV: {hrv_fatigued}")
print(f"\n检测结果: {result}")

4. 铁路 vs 汽车疲劳检测对比

维度 列车驾驶员 汽车驾驶员
疲劳类型 被动疲劳(监控单调) 主动+被动疲劳
振动环境 显著(钢轨) 中等(路面)
EEG 可用性 ❌ 振动干扰 ⚠️ 可用但有限
HRV 可用性 ✅ 最鲁棒 ✅ 量产方案
眼动可用性 ⚠️ 受隧道光照影响 ✅ IR摄像头解决
行为指标 操纵杆操作频率 方向盘/油门操作
自动化等级 GoA2(监控为主) L2/L3(辅助驾驶)
干预方式 警报→减速停车 警告→靠边停车

5. IMS 跨域启示

对 IMS 开发的直接启示

  1. HRV 优先策略:在所有非理想环境(振动、光照变化)中,HRV 是最鲁棒的生理指标。IMS 应将 HRV 作为疲劳检测的基础传感器,摄像头作为增强
  2. 模拟器验证不够:论文证明模拟器结果与真实环境差异显著。IMS 算法必须在真实道路环境验证
  3. 呼吸率被低估:呼吸率在模拟器和真实环境中都表现稳定,且可通过安全带压电传感器低成本获取
  4. 被动疲劳是新挑战:随着 L3/L4 自动驾驶普及,驾驶员从主动控制转为监控角色,铁路的被动疲劳经验直接适用
  5. 多传感器不是越多越好:论文发现 EDA 和 EEG 在真实环境中价值有限,不如聚焦 HRV + 呼吸 + 眼动三模态

参考文献

  1. Bosch et al., “Multisensor Measurement of Train Driver Mental Fatigue: From Simulation to Reality,” Applied Ergonomics, 2026. arXiv
  2. Nocentini et al., “Graph-based Online Monitoring of Train Driver States via Facial and Skeletal Features,” 2025. arXiv
  3. Frontiers, “A vision-based drowsiness detection system for railway operators using lightweight CNNs,” 2025. Link
  4. Springer, “Towards management of vigilance in railway operations through drivers state feedback loop,” 2025. Link
  5. MDPI, “Design of a Fatigue Detection System for High-Speed Trains Based on Driver Vigilance Using a Wireless Wearable EEG,” 2017. Link
  6. Song et al., “Multisensor physiological measurement in locomotive engineers,” real-train study.

本文基于 arXiv 2026 预印论文深度解读,结合铁路与汽车驾驶场景差异分析 IMS 落地方案。代码示例可直接运行验证。