统一EEG跨受试者驾驶员状态识别:无泄漏安全停车触发机制

统一EEG跨受试者驾驶员状态识别:无泄漏安全停车触发机制

论文信息

项目 内容
标题 Unified EEG Feature Extraction for Cross-Subject Driver State Recognition and a Leakage-Free Safe-Stop Trigger Mechanism
作者 Sirine Ammar, Mohamed Karray, Mohamed Ksantini
期刊 Electronics 2026, 15(19), 4432 (MDPI)
发布 2026年9月25日
链接 https://www.mdpi.com/2079-9292/15/19/4432

核心创新

提出统一的EEG特征提取方法解决跨受试者驾驶员状态识别问题,并设计无数据泄漏的安全停车触发机制,直接关联L3自动驾驶接管场景。关键突破:同一特征集可跨受试者使用,且安全触发机制确保在数据质量问题导致误判时仍能安全停车。

技术背景

L3接管中的EEG角色

L3场景 EEG作用 时间窗口
正常L3自动驾驶 监测驾驶员就绪状态 持续
接管请求(TOR) 评估驾驶员反应能力 0-10s
接管后监控 验证手动驾驶能力 10-60s
安全停车触发 驾驶员无响应时 >10s无响应

跨受试者挑战

1
2
3
4
5
6
7
8
9
10
11
12
# 跨受试者EEG困难的原因
cross_subject_challenges = {
"个体解剖差异": "颅骨厚度/皮层褶皱不同→信号传播路径不同",
"基线差异": "放松状态EEG基线因人而异",
"电极位置": "每次佩戴位置略有偏差",
"信号幅度": "个体间Alpha功率可差3-5倍",
"注意力模式": "不同人疲劳时的EEG模式不同"
}

# 传统方案: 每人独立训练
# 问题: 车内无法收集足够数据训练个人模型
# 解决: 统一跨受试者特征

方法详解

统一特征提取管道

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
import numpy as np
from scipy.signal import welch
from sklearn.preprocessing import StandardScaler

class UnifiedEEGFeatureExtractor:
"""
统一EEG特征提取器

目标: 提取跨受试者通用的驾驶员状态特征

核心思路:
1. 相对功率(而非绝对功率) → 消除个体幅度差异
2. 比率特征 → 消除基线差异
3. 非线性特征 → 捕捉跨个体共性
"""

def __init__(self, fs=250):
self.fs = fs # 采样率 250 Hz
self.bands = {
"delta": (0.5, 4), # 慢波(睡眠)
"theta": (4, 8), # 困倦
"alpha": (8, 13), # 放松/疲劳
"beta": (13, 30), # 活跃/警觉
"gamma": (30, 45) # 高级认知
}

def extract_features(self, eeg_signal):
"""
统一特征提取

Args:
eeg_signal: EEG信号 (N_channels, N_samples)

Returns:
features: 统一特征向量
"""
n_channels, n_samples = eeg_signal.shape
features = {}

for ch in range(n_channels):
signal = eeg_signal[ch]

# 1. 频域特征
freqs, psd = welch(signal, self.fs, nperseg=512)

# 1.1 绝对功率
abs_power = {}
for band, (f_low, f_high) in self.bands.items():
mask = (freqs >= f_low) & (freqs < f_high)
abs_power[band] = np.trapz(psd[mask], freqs[mask])

# 1.2 相对功率 (跨受试者关键)
total_power = sum(abs_power.values()) + 1e-10
for band in self.bands:
features[f"ch{ch}_{band}_rel"] = abs_power[band] / total_power

# 1.3 功率比率 (消除基线)
features[f"ch{ch}_theta_alpha"] = abs_power["theta"] / (abs_power["alpha"] + 1e-10)
features[f"ch{ch}_beta_alpha"] = abs_power["beta"] / (abs_power["alpha"] + 1e-10)
features[f"ch{ch}_theta_beta"] = abs_power["theta"] / (abs_power["beta"] + 1e-10)
features[f"ch{ch}_alpha_beta"] = abs_power["alpha"] / (abs_power["beta"] + 1e-10)

# 2. 时域特征
features[f"ch{ch}_mean"] = np.mean(signal)
features[f"ch{ch}_std"] = np.std(signal)
features[f"ch{ch}_skewness"] = float(np.mean(((signal - np.mean(signal)) /
(np.std(signal) + 1e-10))**3))
features[f"ch{ch}_kurtosis"] = float(np.mean(((signal - np.mean(signal)) /
(np.std(signal) + 1e-10))**4) - 3)

# 3. 非线性特征 (Hjorth参数)
d1 = np.diff(signal)
d2 = np.diff(d1)
var0 = np.var(signal)
var1 = np.var(d1)
var2 = np.var(d2)

# Activity (信号方差)
features[f"ch{ch}_activity"] = var0
# Mobility (平均频率)
features[f"ch{ch}_mobility"] = np.sqrt(var1 / (var0 + 1e-10))
# Complexity (频谱变化)
features[f"ch{ch}_complexity"] = np.sqrt(var2 / (var1 + 1e-10)) / \
(np.sqrt(var1 / (var0 + 1e-10)) + 1e-10)

return np.array(list(features.values()))

def normalize_cross_subject(self, features):
"""跨受试者标准化"""
scaler = StandardScaler()
return scaler.fit_transform(features.reshape(1, -1)).flatten()


# 模拟测试
extractor = UnifiedEEGFeatureExtractor(fs=250)

# 模拟休息态 vs 疲劳态EEG (14通道)
np.random.seed(42)
n_channels = 14
n_samples = 2500 # 10秒

eeg_rested = np.random.normal(0, 50, (n_channels, n_samples))
# Alpha功率增加
for ch in range(n_channels):
t = np.arange(n_samples) / 250
eeg_rested[ch] += 30 * np.sin(2 * np.pi * 10 * t)

eeg_tired = np.random.normal(0, 40, (n_channels, n_samples))
# Theta功率增加, Alpha减少
for ch in range(n_channels):
t = np.arange(n_samples) / 250
eeg_tired[ch] += 25 * np.sin(2 * np.pi * 5 * t)

feat_rested = extractor.extract_features(eeg_rested)
feat_tired = extractor.extract_features(eeg_tired)

print(f"特征维度: {len(feat_rested)}")
print(f"休息态 vs 疲劳态差异: {np.mean(np.abs(feat_rested - feat_tired)):.4f}")

无泄漏安全停车触发机制

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
class LeakageFreeSafeStop:
"""
无泄漏安全停车触发机制

核心问题: EEG数据质量问题可能导致误判
解决: 多级验证 + 安全停车兜底

关键设计:
1. 特征质量评估 → 加权决策
2. 置信度阈值 → 不确定时停车
3. 时间约束 → 超时强制停车

无泄漏含义:
- 训练数据不出车 (隐私保护)
- 推理不依赖云端 (低延迟)
- 误判不会导致危险 (安全兜底)
"""

def __init__(self):
self.classifier = None # 驾驶员状态分类器
self.confidence_threshold = 0.7 # 置信度阈值
self.response_timeout_s = 10 # 响应超时(秒)

def safe_stop_trigger(self, eeg_features, tor_timestamp,
camera_data=None):
"""
安全停车触发决策

L3场景: 系统发出接管请求(TOR)后:
1. EEG持续监测驾驶员状态
2. 10秒内无响应 → 触发安全停车
3. 有响应但状态差 → 辅助停车

Args:
eeg_features: EEG特征向量
tor_timestamp: TOR发出时间戳
camera_data: 摄像头辅助数据

Returns:
decision: 停车决策
"""
# 1. EEG分类
state, confidence = self._classify(eeg_features)

# 2. 摄像头验证 (多模态)
if camera_data:
cam_state = camera_data.get("response_detected", False)
cam_conf = camera_data.get("confidence", 0.5)
else:
cam_state = None
cam_conf = 0

# 3. 综合决策
elapsed = self._time_since_tor(tor_timestamp)

# 规则1: EEG+摄像头都确认有响应
if (state == "responsive" and confidence > self.confidence_threshold
and cam_state == True):
return {"action": "continue_manual", "confidence": confidence}

# 规则2: EEG不确定,摄像头确认
if (confidence < self.confidence_threshold
and cam_state == True and cam_conf > 0.7):
return {"action": "continue_with_caution", "confidence": cam_conf}

# 规则3: 无响应(EEG+摄像头)
if state == "unresponsive" or (cam_state == False):
if elapsed > self.response_timeout_s:
return {"action": "EMERGENCY_STOP", "confidence": 0.9}
else:
return {"action": "wait_for_response",
"remaining_time": self.response_timeout_s - elapsed}

# 规则4: 不确定 + 超时
if elapsed > self.response_timeout_s:
return {"action": "SAFE_STOP", "confidence": 0.5,
"reason": "timeout_uncertain"}

return {"action": "monitoring", "remaining_time":
self.response_timeout_s - elapsed}

def _classify(self, features):
"""EEG状态分类"""
# 简化: 基于theta/alpha比率
# 真实场景使用训练好的分类器
theta_alpha_ratio = features[5] # 假设索引
if theta_alpha_ratio > 0.8:
return "unresponsive", 0.85
elif theta_alpha_ratio > 0.5:
return "drowsy", 0.65
else:
return "responsive", 0.90


# 模拟L3接管场景
safe_stop = LeakageFreeSafeStop()
import time

# 场景: TOR发出后8秒,EEG显示疲劳
eeg_feat = feat_tired
tor_time = time.time() - 8 # 8秒前发出TOR
camera = {"response_detected": False, "confidence": 0.8}

decision = safe_stop.safe_stop_trigger(eeg_feat, tor_time, camera)
print(f"决策: {decision['action']}")
print(f"置信度: {decision.get('confidence', 0)}")
if "remaining_time" in decision:
print(f"剩余等待: {decision['remaining_time']:.1f}s")

跨受试者验证结果

预期性能

指标 受试者内训练 跨受试者(传统) 跨受试者(统一特征)
准确率 85-95% 50-60% 70-80%
泛化性 ❌ 不通用 ✅ 通用 ✅ 通用
新用户标定 需要30分钟 不需要 <5分钟
误报率 5-10% 15-25% 8-12%

统一特征有效性分析

特征类型 跨受试者有效性 原因
相对功率 ✅ 高 消除个体幅度差异
功率比率 ✅ 高 消除基线差异
Hjorth参数 ✅ 中 非线性共性
绝对功率 ❌ 低 个体差异大
时域均值 ❌ 低 受电极位置影响

L3接管监测架构

graph TB
    A[L3正常自动驾驶] --> B{需要接管?}
    B -->|否| A
    B -->|是| C[发出TOR接管请求]
    C --> D[EEG+摄像头监测]
    D --> E{0-10s有响应?}
    E -->|是| F[驾驶员接管]
    F --> G[继续监测60s]
    G -->|状态正常| H[恢复手动驾驶]
    G -->|状态差| I[辅助停车]
    E -->|否,10s超时| J[安全停车触发]
    J --> K[靠边停车+双闪]

硬件部署

组件 规格 成本
EEG采集 14通道干电极头环 $50-80
AFE OpenBCI Cyton+Daisy $300(研发)
量产AFE TI ADS1299 14通道 $15-25
MCU QCS8255(已有) $0
摄像头 已有DMS摄像头 $0
增量成本 — $15-25

IMS开发启示

1. L3接管监测需求

Euro NCAP/UNECE 要求 本文方案
L3接管监测 评估驾驶员接管能力 EEG+摄像头融合 ✅
安全停车 无响应时自动停车 超时触发 ✅
接管后监控 验证手动驾驶能力 持续EEG监测 ✅
GB 44721 中国L3强制DMS 多模态监测 ✅

2. 实施优先级

阶段 目标 时间
1. 标定简化 5分钟基线标定 2026 Q4
2. 跨受试者验证 100人测试集 2027 Q1
3. L3接管原型 车内TOR测试 2027 Q2
4. 量产集成 车规级EEG头环 2027 Q3+

3. 与EEG系列博客关联

博客 主题 本文定位
09-29-02 Mind2Drive EEG意图预测 B2V方向
09-29-07 EEG+眼动融合综述 多模态
09-30-01 干电极Ear-EEG DRL伪影消除 硬件突破
本文 跨受试者+安全停车 L3落地

结论

本文解决了EEG在驾驶员监测中的两个关键障碍:

  1. 跨受试者泛化 — 统一特征(相对功率+比率+Hjorth)使模型可跨人使用
  2. 安全兜底 — 无泄漏安全停车机制确保EEG不可靠时仍能安全停车

对IMS L3接管监测,EEG不是替代摄像头,而是补充——在驾驶员行为变化之前5-10秒,EEG自主神经信号已开始变化。这个时间窗口对L3接管至关重要。


论文: Electronics 2026, 15(19), 4432, MDPI


统一EEG跨受试者驾驶员状态识别:无泄漏安全停车触发机制
https://dapalm.com/2026/09/30/2026-09-30-09-unified-eeg-cross-subject-safe-stop-leakage-free-ims/
作者
Mars
发布于
2026年9月30日
许可协议