干电极Ear-EEG驾驶员神经监测突破:DRL自适应伪影消除实现77-93%降噪

干电极Ear-EEG驾驶员神经监测突破:DRL自适应伪影消除实现77-93%降噪

论文信息

项目 内容
标题 A Dry-Contact Ear-EEG System With Continuous Electrode-Skin Impedance Mismatch Monitoring for Motion Artifact Cancellation Using DRL Stimulus
作者 Lohan Atapattu, Sajitha Madugalle, Imasha Nethmal, Erandee Jayathilaka, Avishka Herath, Kithmin Wickremasinghe, Simon L. Kappel, Nilan Udayanga, Chamira U.S. Edussooriya
机构 University of Moratuwa (斯里兰卡), University of British Columbia (加拿大), Aarhus University (丹麦), Cirtec Medical Corporation (美国)
会议 IEEE BioCAS 2026
发布 arXiv:2609.02777, 2026年9月2日
链接 https://arxiv.org/abs/2609.02777

核心创新

首次提出基于驱动右腿(DRL)刺激信号的干电极耳道脑电(Ear-EEG)系统,实现连续电极-皮肤阻抗(ESI)失配监测和在线自适应运动伪影消除。系统通过注入1 kHz正弦波,实时分离EEG信号与运动伪影,在不损失神经活动信息的前提下,将运动伪影功率降低77.6%-92.8%。

技术背景:为什么Ear-EEG对驾驶员监测至关重要

传统EEG在车内不可行的原因

问题 传统凝胶EEG 干电极Ear-EEG
电极准备时间 15-30分钟 <1分钟
运动鲁棒性 差(驾驶震动导致电极松动) 好(耳道固定)
穿戴舒适度 差(满头电极) 好(类似耳机)
信号质量 高(低阻抗<5kΩ) 中(高阻抗>50kΩ)
运动伪影 严重 严重(本文解决)
量产可行性 不可行 可行

核心挑战:ESI失配

干电极接触阻抗通常在50-500kΩ范围,远高于凝胶电极的5kΩ。驾驶场景中的震动(发动机、路面)、头部运动(转头看后视镜、点头疲劳)会导致电极-皮肤接触压力变化,引发ESI失配:

1
2
3
4
5
6
7
8
9
10
11
12
ESI失配原理:
电极A阻抗: Z_A = R_A + 1/(jωC_A) (接触良好)
电极B阻抗: Z_B = R_B + 1/(jωC_B) (接触变化)

失配 ΔZ = Z_A - Z_B

共模抑制比(CMRR)退化:
CMRR_dB = 20·log10(|Z_CM / ΔZ|)

当 ΔZ 增大时, CMRR 下降
→ 共模噪声(工频干扰、EMG)被放大
→ EEG信号被运动伪影淹没

方法详解:DRL刺激+自适应滤波管道

系统架构

graph TB
    A[DRL电极注入1kHz正弦波] --> B[Ear-EEG电极采集]
    B --> C[带通滤波分离]
    C --> D[EEG频段: 0.5-40Hz]
    C --> E[载波频段: 1kHz±10Hz]
    E --> F[解调提取ESI失配信息]
    F --> G[NLMS自适应滤波器参考输入]
    D --> H[NLMS自适应滤波器主输入]
    H --> I[Hampel滤波器异常值去除]
    I --> J[干净EEG输出]

1. DRL刺激信号注入

系统通过DRL电极注入一个1 kHz、低幅值正弦波刺激信号。这个信号的选择基于三个关键考量:

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
import numpy as np

class DRLStimulus:
"""
DRL刺激信号生成器

设计参数:
- 频率: 1 kHz (在EEG频段0.5-40Hz之外,不干扰神经信号)
- 幅值: 100-200 mV (足够测量但不引起不适)
- 注入方式: 通过DRL电极连续注入
"""

def __init__(self, freq_hz=1000, amplitude_mv=150, sample_rate=4000):
self.freq = freq_hz
self.amp = amplitude_mv / 1000 # 转换为伏特
self.fs = sample_rate

def generate_stimulus(self, duration_s):
"""生成DRL刺激信号"""
t = np.arange(0, duration_s, 1/self.fs)
stimulus = self.amp * np.sin(2 * np.pi * self.freq * t)
return t, stimulus

def check_frequency_separation(self, eeg_band=(0.5, 40)):
"""验证刺激频率与EEG频段分离"""
margin_low = self.freq - eeg_band[1]
print(f"刺激频率: {self.freq} Hz")
print(f"EEG频段: {eeg_band[0]}-{eeg_band[1]} Hz")
print(f"频率间隔: {margin_low} Hz")
print(f"分离度: {'✅ 充分' if margin_low > 100 else '❌ 不足'}")
return margin_low > 100


# 实际测试
drl = DRLStimulus(freq_hz=1000, amplitude_mv=150, sample_rate=4000)
drl.check_frequency_separation()
# 输出:
# 刺激频率: 1000 Hz
# EEG频段: 0.5-40 Hz
# 频率间隔: 960 Hz
# 分离度: ✅ 充分

2. ESI失配信息提取

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
def extract_esi_mismatch(raw_signal, stimulus_freq=1000, fs=4000):
"""
从混合信号中提取ESI失配信息

Args:
raw_signal: 原始Ear-EEG信号 (包含EEG + 载波 + 噪声)
stimulus_freq: DRL刺激频率 (1 kHz)
fs: 采样率

Returns:
esi_mismatch: ESI失配时变信号
eeg_signal: 分离后的EEG信号
"""
# 1. 带通滤波分离载波 (980-1020 Hz)
from scipy.signal import butter, filtfilt

def bandpass(data, low, high, fs, order=4):
nyq = fs / 2
b, a = butter(order, [low/nyq, high/nyq], btype='band')
return filtfilt(b, a, data)

# 载波提取 (含ESI信息)
carrier = bandpass(raw_signal, stimulus_freq - 20, stimulus_freq + 20, fs)

# EEG提取 (0.5-40 Hz)
eeg_signal = bandpass(raw_signal, 0.5, 40, fs)

# 2. 解调: 提取载波包络 (ESI失配信息)
analytic_signal = np.abs(carrier * np.exp(1j * 2 * np.pi * stimulus_freq *
np.arange(len(carrier)) / fs))
esi_mismatch = bandpass(analytic_signal, 0.1, 20, fs) # 失配变化频率

return esi_mismatch, eeg_signal


# 模拟测试: 生成含运动伪影的Ear-EEG信号
np.random.seed(42)
fs = 4000
duration = 10 # 10秒
t = np.arange(0, duration, 1/fs)

# 真实EEG (alpha节律, 10Hz)
eeg_alpha = 50e-6 * np.sin(2 * np.pi * 10 * t)

# DRL刺激载波
carrier = 150e-3 * np.sin(2 * np.pi * 1000 * t)

# 运动伪影 (模拟头部运动, 2-5Hz)
motion_artifact = 200e-6 * np.sin(2 * np.pi * 3 * t) * (1 + 0.5 * np.sin(2 * np.pi * 0.5 * t))

# 混合信号
raw = eeg_alpha + carrier + motion_artifact + np.random.normal(0, 10e-6, len(t))

esi, eeg = extract_esi_mismatch(raw, fs=fs)

# 计算伪影消除效果
from scipy.signal import welch
f_before, psd_before = welch(raw, fs, nperseg=1024)
f_after, psd_after = welch(eeg, fs, nperseg=1024)

# Alpha频段(8-13Hz)信噪比改善
alpha_mask = (f_before >= 8) & (f_before <= 13)
snr_before = 10 * np.log10(np.max(psd_before[alpha_mask]) / np.mean(psd_before[alpha_mask]))
snr_after = 10 * np.log10(np.max(psd_after[alpha_mask]) / np.mean(psd_after[alpha_mask]))
print(f"Alpha频段SNR改善: {snr_after - snr_before:.1f} dB")

3. NLMS自适应滤波器

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
class NLMSAdaptiveFilter:
"""
归一化最小均方(NLMS)自适应滤波器

用于消除Ear-EEG中的运动伪影

参数:
M: 滤波器阶数
mu: 步长因子 (0 < mu < 2)
epsilon: 正则化参数
"""

def __init__(self, filter_order=64, step_size=0.1, epsilon=1e-6):
self.M = filter_order
self.mu = step_size
self.eps = epsilon
self.weights = np.zeros(filter_order)

def filter(self, primary_input, reference_input):
"""
自适应滤波

Args:
primary_input: 主输入 (EEG + 运动伪影), shape=(N,)
reference_input: 参考输入 (ESI失配信息), shape=(N,)

Returns:
output: 干净EEG信号
error_history: 误差变化历史
"""
N = len(primary_input)
output = np.zeros(N)
error_history = np.zeros(N)

for n in range(self.M, N):
# 提取参考信号窗口
x = reference_input[n-self.M:n]
# NLMS更新
power = np.dot(x, x) + self.eps
y = np.dot(self.weights, x)
error = primary_input[n] - y
self.weights += self.mu * error * x / power
output[n] = error
error_history[n] = error

return output, error_history


# 测试NLMS滤波器
nlms = NLMSAdaptiveFilter(filter_order=64, step_size=0.05)
clean_eeg, errors = nlms.filter(eeg, esi)

print(f"滤波器阶数: {nlms.M}")
print(f"收敛步长: {nlms.mu}")
print(f"伪影功率降低: {10*np.log10(np.sum(motion_artifact**2)/np.sum(errors**2)):.1f} dB")

4. Hampel滤波器后处理

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
def hampel_filter(signal, window_size=7, n_sigma=3.0):
"""
Hampel滤波器: 基于中位数绝对偏差(MAD)的异常值检测与替换

用于消除NLMS输出中的残余脉冲伪影

Args:
signal: 输入信号
window_size: 滑动窗口大小
n_sigma: 异常值阈值 (MAD的倍数)

Returns:
filtered: 滤波后信号
outliers: 异常值位置
"""
N = len(signal)
filtered = signal.copy()
outliers = []

for i in range(window_size, N - window_size):
window = signal[i-window_size:i+window_size+1]
median = np.median(window)
mad = np.median(np.abs(window - median))

if mad > 0:
score = np.abs(signal[i] - median) / (1.4826 * mad)
if score > n_sigma:
filtered[i] = median
outliers.append(i)

return filtered, np.array(outliers)


# 应用Hampel滤波
final_eeg, outliers = hampel_filter(clean_eeg, window_size=7, n_sigma=3.0)
print(f"检测到异常值: {len(outliers)} 个")
print(f"信号保留率: {(1 - len(outliers)/len(final_eeg))*100:.2f}%")

实验结果

测试条件

4名健康受试者执行三种运动任务:

  1. 头部点头 (head nodding) — 模拟疲劳驾驶时的头部下垂
  2. 电极敲击 (electrode tapping) — 模拟耳道接触变化
  3. 下巴紧咬 (jaw clenching) — 模拟面部肌肉活动

伪影消除性能

运动类型 伪影功率降低 (dB) 伪影功率降低 (%) Alpha节律保留
头部点头 6.5 dB 77.6% ✅ 可观测
电极敲击 12.6 dB 92.8% ✅ 可观测
下巴紧咬 9.0 dB 86.4% ✅ 可观测

关键发现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import matplotlib.pyplot as plt

# 伪影消除效果对比
tasks = ['Head Nodding', 'Electrode Tapping', 'Jaw Clenching']
reductions_db = [6.5, 12.6, 9.0]
reductions_pct = [77.6, 92.8, 86.4]

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))

ax1.bar(tasks, reductions_db, color=['#2196F3', '#4CAF50', '#FF9800'])
ax1.set_ylabel('伪影功率降低 (dB)')
ax1.set_title('伪影消除效果 (dB)')

ax2.bar(tasks, reductions_pct, color=['#2196F3', '#4CAF50', '#FF9800'])
ax2.set_ylabel('伪影功率降低 (%)')
ax2.set_title('伪影消除效果 (%)')

plt.tight_layout()
plt.savefig('ear_eeg_artifact_reduction.png', dpi=150, bbox_inches='tight')
plt.show()

IMS开发启示

1. Ear-EEG在驾驶员监测中的定位

监测层级 传感器 精度 延迟 量产状态
行为级 摄像头(眼动/PERCLOS) 中 1-3s ✅ 量产
生理级 方向盘/座椅PPG 中低 5-10s ⚠️ 部分
神经级 Ear-EEG 高 0.5-2s 🔬 突破中
多模态 摄像头+Ear-EEG 最高 1-2s 🔬 研究阶段

2. 驾驶场景应用映射

驾驶场景 EEG特征 DRL方法优势
疲劳微睡眠 Alpha/Theta功率比增加 头部下垂伪影可消除 ✅
分心走神 Alpha不对称减少 转头看导航伪影可消除 ✅
压力/路怒 Beta功率增加 咬牙伪影可消除 ✅
酒精损伤 Alpha峰值频率下移 长时间监测阻抗变化可追踪 ✅

3. 量产化技术路线

graph LR
    A[当前: 实验室验证] --> B[2027: 车内原型]
    B --> C[2028: 小批量验证]
    C --> D[2029: 量产集成]
    
    A1[干电极耳塞] --> B1[集成方向盘震动传感器]
    B1 --> C1[与DMS摄像头融合]
    C1 --> D1[标准化SDK输出]
    
    A2[DRL伪影消除] --> B2[车规级芯片实现]
    B2 --> C2[NPU加速自适应滤波]
    C2 --> D2[实时<100ms延迟]

4. 与IMS现有架构的集成方案

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
# IMS多模态融合: Ear-EEG + 摄像头DMS
class MultimodalDriverState:
"""
IMS多模态驾驶员状态评估

融合摄像头DMS与Ear-EEG
"""

def __init__(self):
# 摄像头DMS (已有)
self.perclos = None # PERCLOS值
self.gaze_score = None # 视线评分
self.head_pose = None # 头部姿态

# Ear-EEG (新增)
self.alpha_power = None # Alpha功率
self.theta_power = None # Theta功率
self.beta_power = None # Beta功率
self.alertness_eeg = None # EEG警觉性指数

def fuse_modalities(self):
"""多模态融合决策"""
# 摄像头检测到闭眼趋势
camera_drowsy = self.perclos > 0.15 if self.perclos else False

# EEG检测到Alpha/Theta功率增加
eeg_drowsy = (self.alpha_power > self.alpha_baseline * 1.3 and
self.theta_power > self.theta_baseline * 1.5
) if self.alpha_power else False

# 融合决策
if camera_drowsy and eeg_drowsy:
alert_level = "CRITICAL" # 双模态确认
confidence = 0.95
elif camera_drowsy or eeg_drowsy:
alert_level = "WARNING" # 单模态触发
confidence = 0.70
else:
alert_level = "NORMAL"
confidence = 0.90

return {
"alert_level": alert_level,
"confidence": confidence,
"camera_drowsy": camera_drowsy,
"eeg_drowsy": eeg_drowsy
}

硬件参考设计

组件 推荐型号 参数 估计成本
Ear-EEG电极 定制金镀层干电极 直径6mm, 针状结构 $2-5
DRL电极 银氯化银(Ag/AgCl) 直径4mm $1
AFE芯片 TI ADS1299 8通道, 24bit, 16kSPS $15-25
微控制器 STM32H743 480MHz Cortex-M7, FPU $8
无连接 蓝牙5.0 (nRF52840) 2Mbps, 低延迟 $5
总计 — — $31-44

与竞品方案对比

方案 电极类型 伪影处理 量产状态 成本
本文 DRL Ear-EEG 干电极 DRL+NLMS+Hampel 🔬 原型 $31-44
Mind2Drive (昨天博客) gel+干混合 带通+ICA 🔬 研究 $50-80
Muse头环 干电极 TDAM ✅ 消费级 $250
Bitbrain Versity 半干电极 专用算法 ✅ 研究级 $1000+
Emotiv EPOC+ 盐水电极 实时去噪 ✅ 消费级 $200

下一步研究方向

  1. 车内实路测试: 从模拟器到真实驾驶环境验证
  2. 多电极阵列扩展: 从2通道到8通道耳道阵列
  3. 深度学习伪影分类: 替代NLMS,使用CNN自动分类伪影类型
  4. 个性化基准标定: 每位驾驶员5分钟基线校准
  5. 与摄像头DMS融合: 实现多模态驾驶员状态评估

结论

本文标志着Ear-EEG在驾驶员监测领域从”不可行”到”有条件可行”的关键转变。DRL刺激方法巧妙地复用了一个已有电路(右腿驱动),同时承担伪影监测功能,无需额外硬件。77.6%-92.8%的伪影消除率已接近实用门槛(>85%),但车内真实环境的挑战(发动机震动、温度变化、长时间佩戴舒适度)仍需进一步验证。

对于IMS开发,Ear-EEG不应替代摄像头DMS,而应作为第二模态提供神经级精度验证,特别是在摄像头失效场景(黑暗、遮挡)和需要早期预警的场景(微睡眠前0.5-2秒的EEG特征变化先于行为变化)。


论文链接: https://arxiv.org/abs/2609.02777
代码: 论文未公开代码,本文代码基于论文方法独立实现


干电极Ear-EEG驾驶员神经监测突破:DRL自适应伪影消除实现77-93%降噪
https://dapalm.com/2026/09/30/2026-09-30-01-dry-electrode-ear-eeg-drl-motion-artifact-driver-monitoring-ims/
作者
Mars
发布于
2026年9月30日
许可协议