ATC 空中交通管制疲劳监测系统综述:航空→汽车座舱的跨领域启示

论文来源: Frontiers in Neuroergonomics, 2026
论文标题: Vigilance decrements in air traffic control as an aviation safety risk: a systematic review of modeling and prediction approaches
作者: Aich M, El Aoufi J, Moussa A
DOI: 10.3389/fnrgo.2026.1874304
链接: https://www.frontiersin.org/journals/neuroergonomics/articles/10.3389/fnrgo.2026.1874304/full

论文核心信息

项目 内容
期刊 Frontiers in Neuroergonomics
发表时间 2026年8月
研究类型 系统综述 (PRISMA 2020)
文献数 34篇(从850条初始检索筛选)
数据库 PubMed, Scopus, Web of Science

核心创新

首次系统综述 ATC 环境下的疲劳建模与预测方法,区分了三个常被混淆的构念:

构念 定义 测量方式 ATC场景 汽车座舱映射
Vigilance 持续信号检测能力 稀有事件检测率 管制员持续监控雷达 驾驶员持续关注道路
Workload 瞬时认知需求 任务需求量化 高峰时段多扇区管理 城市复杂路况
Fatigue 累积能力下降 时间累积效应 6+小时值班后 长途驾驶后

关键发现

1. 生理信号对比

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
"""
ATC 疲劳监测生理信号对比(34篇综述汇总)
"""

physio_methods = {
"EEG": {"atc_use": "12/34篇", "ims_available": False, "key_finding": "Theta功率↑是vigilance decrement最早标志"},
"ECG/HRV": {"atc_use": "8/34篇", "ims_available": True, "key_finding": "W分量(超低频功率)对认知负荷敏感"},
"眼动追踪": {"atc_use": "15/34篇", "ims_available": True, "key_finding": "眨眼率变化早于PERCLOS闭眼时间增加"},
"EDA": {"atc_use": "3/34篇", "ims_available": False, "key_finding": "对vigilance不敏感,对arousal/stress敏感"}
}

# IMS 可用模态
print("=== IMS 可直接使用的 ATC 验证模态 ===")
for name, m in physio_methods.items():
if m["ims_available"]:
print(f" {name}: ATC使用{m['atc_use']}, 关键发现: {m['key_finding']}")

2. ML方法分布

方法 使用频率 准确率 跨被试泛化(LOSO) IMS建议
经典ML(SVM/RF) 53% 70-85% 60-70% 快速验证
深度学习(CNN+LSTM) 24% 80-92% 75-80% 量产部署
多模态融合 18% 85-95% 80-85% ★推荐方案
Transformer 6% 88-93% 中等 边缘部署困难

3. 核心理论贡献

4. 实验室→现场差距

维度 实验室 现场 IMS对应
持续时间 1-2h 6+h 长途驾驶
压力 模拟 真实 真实交通
环境 控制 变化 日夜/天气
标定 预标定 无标定 需zero-shot

多模态疲劳检测代码

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
155
156
157
158
159
160
161
162
163
164
165
"""
ATC→IMS 多模态疲劳检测模型

基于综述发现:
1. HRV W分量 → 认知负荷(方向盘ECG可获取)
2. 眨眼率变化 → vigilance早期标志(DMS摄像头)
3. 扫视熵 → 持续注意力下降(DMS视线追踪)
4. 方向盘操作 → 行为疲劳指标(CAN总线)

融合策略:特征级融合 + 加权决策
"""

import numpy as np
from dataclasses import dataclass
from typing import Tuple

@dataclass
class ModalityConfig:
name: str
feature_dim: int
sample_rate: int
window_sec: int
source: str

class MultiModalFatigueDetector:
"""
多模态疲劳检测器

模态权重基于ATC综述多模态融合最优组合:
- 眼动 45% (vigilance最直接)
- ECG 30% (认知负荷补充)
- 行为 25% (累积效应)
"""

def __init__(self):
self.modalities = {
"eye": ModalityConfig("眼动", 6, 30, 60, "DMS摄像头"),
"ecg": ModalityConfig("心电", 4, 250, 60, "方向盘电极"),
"behavior": ModalityConfig("行为", 3, 10, 300, "CAN总线")
}
self.weights = {"eye": 0.45, "ecg": 0.30, "behavior": 0.25}
self.fatigue_levels = {0: "正常", 1: "轻度疲劳", 2: "中度疲劳", 3: "重度疲劳"}

def extract_eye_features(self, eye_data: np.ndarray) -> np.ndarray:
"""提取眼动特征: PERCLOS, 眨眼率, 扫视熵, 瞳孔方差, 注视偏离, 闭眼时长"""
eye_openness, gaze_x, gaze_y, pupil_d = eye_data.T

perclos = np.mean(eye_openness < 0.3)
blink_events = np.diff((eye_openness < 0.3).astype(int))
blink_rate = np.sum(blink_events == -1) / (len(eye_openness) / 30 / 60)

hist, _, _ = np.histogram2d(gaze_x, gaze_y, bins=10, range=[[-1,1],[-1,1]])
hist = hist / (hist.sum() + 1e-8)
saccade_entropy = -np.sum(hist * np.log(hist + 1e-8))

pupil_var = np.std(pupil_d)
gaze_offset = np.sqrt(gaze_x**2 + gaze_y**2)
gaze_offset_ratio = np.mean(gaze_offset > 0.5)

blink_count = np.sum(blink_events == -1)
avg_closure = np.sum(eye_openness < 0.3) / max(blink_count, 1) / 30

return np.array([perclos, blink_rate, saccade_entropy,
pupil_var, gaze_offset_ratio, avg_closure])

def extract_ecg_features(self, ecg_data: np.ndarray) -> np.ndarray:
"""提取HRV特征: Mean NN, RMSSD, LF/HF, W分量"""
from scipy.signal import find_peaks, welch
peaks, _ = find_peaks(ecg_data, distance=150, prominence=0.5)

if len(peaks) < 10:
return np.zeros(4)

rr = np.diff(peaks) / 250
mean_nn = np.mean(rr)
rmssd = np.sqrt(np.mean(np.diff(rr)**2))

freqs, psd = welch(rr, fs=1/mean_nn, nperseg=min(len(rr), 64))
lf = np.sum(psd[(freqs >= 0.04) & (freqs < 0.15)])
hf = np.sum(psd[(freqs >= 0.15) & (freqs < 0.40)])
w = np.sum(psd[(freqs >= 0.01) & (freqs < 0.04)])

return np.array([mean_nn, rmssd, lf/(hf+1e-8), w])

def extract_behavior_features(self, behavior_data: np.ndarray) -> np.ndarray:
"""提取行为特征: 方向盘频率, 车道偏移, 速度波动"""
steering, lane_offset, speed = behavior_data.T
steering_freq = np.sum(np.abs(np.diff(steering)) > 1.0) / (len(steering)/10/60)
return np.array([steering_freq, np.std(lane_offset), np.std(speed)])

def detect(self, eye_data, ecg_data, behavior_data) -> dict:
"""多模态疲劳检测主函数"""
eye_f = self.extract_eye_features(eye_data)
ecg_f = self.extract_ecg_features(ecg_data)
beh_f = self.extract_behavior_features(behavior_data)

# 各模态独立评分(简化模型)
eye_score = (eye_f[0]*0.3 + eye_f[1]*0.01 +
(1-eye_f[2]/2.3)*0.2 + eye_f[4]*0.3 + eye_f[5]*0.2)
ecg_score = ((1/(ecg_f[0]+0.1))*0.3 + (1/(ecg_f[1]+0.1))*0.3 +
ecg_f[2]*0.2 + (1/(ecg_f[3]+0.001))*0.2)
beh_score = ((1/(beh_f[0]+0.1))*0.4 + beh_f[1]*0.4 + beh_f[2]*0.2)

total = (self.weights["eye"]*eye_score +
self.weights["ecg"]*ecg_score +
self.weights["behavior"]*beh_score)

level = min(int(total * 4), 3)

return {
'level': level,
'level_name': self.fatigue_levels[level],
'confidence': min(total, 1.0),
'modalities': {'eye': float(eye_score), 'ecg': float(ecg_score), 'behavior': float(beh_score)},
'features': {
'eye': {'PERCLOS': float(eye_f[0]), 'blink_rate': float(eye_f[1]), 'saccade_entropy': float(eye_f[2])},
'ecg': {'mean_nn': float(ecg_f[0]), 'rmssd': float(ecg_f[1]), 'w_component': float(ecg_f[3])},
'behavior': {'steering_freq': float(beh_f[0]), 'lane_var': float(beh_f[1])}
}
}


if __name__ == "__main__":
np.random.seed(42)
det = MultiModalFatigueDetector()

# 场景1: 正常驾驶
eye_normal = np.column_stack([
np.random.normal(0.85, 0.05, 1800),
np.random.normal(0, 0.15, 1800),
np.random.normal(0, 0.15, 1800),
np.random.normal(3.5, 0.2, 1800)
])
ecg_normal = np.random.normal(0, 0.1, 15000)
ecg_normal[np.random.choice(15000, 60, replace=False)] = 1.0 # R波
beh_normal = np.column_stack([
np.random.normal(0, 2, 3000),
np.random.normal(0, 0.1, 3000),
np.random.normal(60, 1, 3000)
])

result = det.detect(eye_normal, ecg_normal, beh_normal)
print(f"正常驾驶: {result['level_name']} (置信度: {result['confidence']:.3f})")

# 场景2: 疲劳驾驶
eye_fatigue = np.column_stack([
np.random.normal(0.6, 0.15, 1800), # 眼睛半闭
np.random.normal(0.3, 0.3, 1800), # 注视偏离
np.random.normal(0.3, 0.3, 1800),
np.random.normal(3.0, 0.4, 1800) # 瞳孔缩小
])
eye_fatigue[::30, 0] = 0.1 # 模拟眨眼
ecg_fatigue = np.random.normal(0, 0.08, 15000)
ecg_fatigue[np.random.choice(15000, 45, replace=False)] = 0.8 # 心率降低
beh_fatigue = np.column_stack([
np.random.normal(0, 0.5, 3000), # 方向盘修正减少
np.random.normal(0.3, 0.3, 3000), # 车道偏移增大
np.random.normal(60, 3, 3000) # 速度波动
])

result2 = det.detect(eye_fatigue, ecg_fatigue, beh_fatigue)
print(f"疲劳驾驶: {result2['level_name']} (置信度: {result2['confidence']:.3f})")
print(f" 眼动评分: {result2['modalities']['eye']:.3f}")
print(f" 心电评分: {result2['modalities']['ecg']:.3f}")
print(f" 行为评分: {result2['modalities']['behavior']:.3f}")

对 IMS 开发的核心启示

1. 必须区分三种认知状态

IMS当前 问题 ATC启示 改进方向
PERCLOS统一检测”疲劳” 无法区分认知分心vs生理疲劳 Vigilance/Workload/Fatigue三分 增加扫视熵检测vigilance
仅检测闭眼时间 错过早期预警窗口 眨眼率变化早于PERCLOS 增加眨眼率监测
无认知负荷评估 无法区分高负荷专注vs低负荷走神 HRV W分量+瞳孔直径 集成方向盘ECG

2. 多模态融合权重建议

基于ATC综述18篇多模态研究的权重分布:

模态 推荐权重 理由 IMS传感器
眼动 45% vigilance最直接指标 DMS摄像头
ECG/HRV 30% 认知负荷补充,W分量敏感 方向盘电极
行为 25% 累积效应,跨场景稳定 CAN总线

3. 部署差距的IMS解法

ATC差距 IMS对应挑战 解法
无标定 新驾驶员无疲劳基线 使用群体基线+5分钟自适应
环境变化 日夜/光照变化 红外摄像头+自适应阈值
个体差异 不同驾驶员疲劳表现不同 在线学习+个性化模型
信号噪声 车辆振动影响传感器 多模态冗余+卡尔曼滤波

第二篇相关论文

同时发现另一篇高价值论文:

论文: Human Limits in Next-Generation Fighter Aviation: Psychophysiological Stressors, Readiness, Health, Performance, and Countermeasures
期刊: Frontiers in Physiology (2026年8月24日接收)
链接: https://www.frontiersin.org/journals/physiology/articles/10.3389/fphys.2026.1920799/abstract

战斗机飞行员监测启示

发现 IMS映射
HRV、脑氧合、皮层活动均有可测变化 方向盘ECG可获取HRV
强个体化、场景依赖 IMS需个性化模型
监测仍为分阶段、领域孤立 IMS应做多模态融合
提出AI/ML为实验分析层,需前瞻验证 IMS不应盲目信任AI,需验证

第三篇:飞行员fNIRS+ECG+眼动多模态

论文: Wearable Multimodal Physiological Sensor-Based Recognition of Pilots’ Mental Workload Using fNIRS, ECG, and Eye-Movement Signals
期刊: IEEE TIM (2026)
关键发现: 前额叶PFC激活在过载时最高;β振幅+HRV+瞳孔直径三模态融合达85.76%准确率

发现 IMS可用性
前额叶BA10区β振幅是最有效特征 车内无法用fNIRS,但瞳孔直径可替代
三模态(β+HRV+瞳孔)最优 IMS可用HRV+瞳孔(=ECG+DMS摄像头)
LOSO降至78.57% 跨被试泛化是核心挑战
SHAP分析识别关键特征 可解释性对车规认证重要

开发落地建议

优先级 行动 投入 产出
P0 增加眨眼率监测(不只是PERCLOS) 2人月 早期预警窗口+3-5秒
P1 增加扫视熵计算(注视点分布) 3人月 认知分心检测能力
P2 集成方向盘ECG获取HRV 4人月 认知负荷评估
P3 多模态融合模型(眼+ECG+行为) 6人月 综合疲劳等级, 误报率<5%

写作日期: 2026-08-26
标签: ATC, 航空座舱, 疲劳检测, vigilance, 多模态融合, HRV, 扫视熵, 跨领域
IMS启示: 区分vigilance/workload/fatigue三种状态,增加眨眼率和扫视熵,融合ECG+行为数据