多模态车内心跳检测:方向盘ECG+PPG+RGB/IR/热成像融合方案

论文信息

项目 内容
标题 Reliable multimodal signals for in-vehicle heartbeat detection
作者 多机构合作(德国)
期刊 Scientific Reports (Nature)
年份 2026
链接 Nature
车辆 Volkswagen Tiguan 2022
传感器 方向盘ECG + PPG + RGB + RGB-IR + 热成像

核心创新

这是首个在真实驾驶条件下融合5种传感器模态进行心跳检测的研究:

  1. 方向盘ECG(新电极设计):碳基翼形支架+蛇形银浆电极
  2. PPG(方向盘脉搏血氧):接触式光电传感器
  3. iPPG-RGB(摄像头远程光电容积描记)
  4. iPPG-IR(红外摄像头远程光电容积描记)
  5. iPPG-Thermal(热成像远程心率检测)

解决的核心问题

问题 传统方案 多模态融合方案
手离开方向盘 ECG中断 iPPG摄像头接管
光照变化 iPPG不稳定 热成像不受光照影响
运动伪影 所有模态受影响 多模态冗余+选择性融合
单模态失效 无法继续监测 自动切换到可用模态

方法详解

1. 硬件架构

2. 方向盘ECG电极设计

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
class SteeringWheelECG:
"""
新型方向盘ECG电极设计

创新点:
1. 碳基翼形支架 - 可重复安装
2. 蛇形电极图案 - 最大化接触面积
3. 银浆印刷在聚氨酯薄膜上
"""

def __init__(self):
self.specs = {
'电极材料': '导电银浆印刷在聚氨酯薄膜',
'支架材料': '碳基复合材料',
'安装方式': '翼形夹扣式,适配方向盘弧度',
'电极图案': '蛇形(meander),24个波浪',
'电极尺寸': '270mm × 40mm/条',
'电极数量': '4条(2条正极+2条负极/参考)',
'采样率': '500 Hz',
'分辨率': '16-bit',
'导联': '单导联(左臂-右臂)',
'连接': 'Ag/AgCl湿电极扣',
}

# 与旧版对比
self.comparison = {
'旧版': {
'电极形状': '简单矩形',
'接触面积': '约200mm²',
'耐用性': '低(银浆易磨损)',
'手位置适应性': '差(需精确放置)',
},
'新版': {
'电极形状': '蛇形24波浪',
'接触面积': '约10800mm²(270×40)',
'耐用性': '高(碳基支架保护)',
'手位置适应性': '高(大面积覆盖)',
}
}

# 打印规格
ecg = SteeringWheelECG()
print("方向盘ECG电极规格:")
for k, v in ecg.specs.items():
print(f" {k}: {v}")

print("\n新旧对比:")
for version, specs in ecg.comparison.items():
print(f"\n {version}:")
for k, v in specs.items():
print(f" {k}: {v}")

3. 多模态融合策略

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
166
167
import numpy as np
from typing import Dict, Optional, List

class MultimodalHeartbeatFusion:
"""
多模态心跳检测融合器

5种模态:ECG, PPG, iPPG-RGB, iPPG-IR, iPPG-Thermal
每种模态独立评估信号质量,选择最佳模态或加权融合
"""

MODALITIES = ['ecg', 'ppg', 'ippg_rgb', 'ippg_ir', 'ippg_thermal']

def __init__(self):
self.signal_quality = {m: 0.0 for m in self.MODALITIES}
self.heart_rates = {m: None for m in self.MODALITIES}

def assess_quality(self, modality: str, signal: np.ndarray) -> float:
"""
评估各模态信号质量

Returns:
quality_score: 0-1
"""
if signal is None or len(signal) == 0:
return 0.0

# 1. SNR评估
fft = np.fft.rfft(signal)
power = np.abs(fft) ** 2

# 心率频带 0.8-3.0 Hz (48-180 BPM)
freqs = np.fft.rfftfreq(len(signal), d=1/500)
heart_mask = (freqs >= 0.8) & (freqs <= 3.0)
heart_power = np.sum(power[heart_mask])
total_power = np.sum(power) + 1e-10
snr = heart_power / total_power

# 2. 运动伪影检测
motion_artifact = np.std(np.diff(signal)) / (np.std(signal) + 1e-10)

# 3. 模态特定质量
if modality == 'ecg':
# ECG: 检查QRS波存在
quality = snr * (1 / (1 + motion_artifact * 0.5))
elif modality in ['ppg']:
# PPG: 检查脉搏波形态
quality = snr * 0.9
elif modality in ['ippg_rgb', 'ippg_ir']:
# iPPG: 检查面部追踪稳定性
quality = snr * 0.7 # 远程精度略低
elif modality == 'ippg_thermal':
# 热成像: 受分辨率限制
quality = snr * 0.6

return min(quality, 1.0)

def fuse(self, signals: Dict[str, np.ndarray]) -> dict:
"""
多模态融合

策略:
1. 如果最佳模态质量>0.7,直接使用
2. 否则加权融合前2-3个模态
3. 如果所有模态质量<0.3,标记为不可靠
"""
# 评估各模态
for m in self.MODALITIES:
if m in signals and signals[m] is not None:
self.signal_quality[m] = self.assess_quality(m, signals[m])
self.heart_rates[m] = self._extract_hr(signals[m])

# 排序
sorted_mods = sorted(
self.MODALITIES,
key=lambda m: self.signal_quality[m],
reverse=True
)

best = sorted_mods[0]
best_quality = self.signal_quality[best]

if best_quality > 0.7:
# 高质量:直接使用最佳模态
strategy = 'best_single'
fused_hr = self.heart_rates[best]
confidence = best_quality
elif best_quality > 0.3:
# 中等质量:加权融合前3
top3 = [m for m in sorted_mods if self.signal_quality[m] > 0.3][:3]
weights = np.array([self.signal_quality[m] for m in top3])
weights /= weights.sum()
hrs = np.array([self.heart_rates[m] for m in top3
if self.heart_rates[m] is not None])
if len(hrs) > 0:
fused_hr = np.average(hrs, weights=weights[:len(hrs)])
else:
fused_hr = None
strategy = 'weighted_fusion'
confidence = best_quality * 0.8
else:
# 低质量:不可靠
strategy = 'unreliable'
fused_hr = None
confidence = 0.0

return {
'heart_rate': fused_hr,
'confidence': confidence,
'strategy': strategy,
'best_modality': best,
'modality_qualities': {m: self.signal_quality[m]
for m in self.MODALITIES
if self.signal_quality[m] > 0},
'all_heart_rates': {m: self.heart_rates[m]
for m in self.MODALITIES
if self.heart_rates[m] is not None}
}

def _extract_hr(self, signal: np.ndarray) -> Optional[float]:
"""从信号中提取心率"""
if signal is None or len(signal) < 100:
return None

fft = np.fft.rfft(signal)
freqs = np.fft.rfftfreq(len(signal), d=1/500)

heart_mask = (freqs >= 0.8) & (freqs <= 3.0)
if np.any(heart_mask):
peak_idx = np.argmax(np.abs(fft[heart_mask]))
peak_freq = freqs[heart_mask][peak_idx]
return peak_freq * 60 # BPM

return None


# 测试
if __name__ == "__main__":
fusion = MultimodalHeartbeatFusion()

# 模拟5种信号
t = np.arange(0, 10, 1/500)
ecg = np.sin(2*np.pi*1.2*t) + 0.1*np.random.randn(len(t)) # 72 BPM
ppg = np.sin(2*np.pi*1.2*t) + 0.3*np.random.randn(len(t))
ippg_rgb = np.sin(2*np.pi*1.2*t) + 0.5*np.random.randn(len(t))
ippg_ir = np.sin(2*np.pi*1.2*t) + 0.4*np.random.randn(len(t))
thermal = np.sin(2*np.pi*1.2*t) + 0.8*np.random.randn(len(t))

result = fusion.fuse({
'ecg': ecg,
'ppg': ppg,
'ippg_rgb': ippg_rgb,
'ippg_ir': ippg_ir,
'ippg_thermal': thermal,
})

print("多模态心跳融合结果")
print("=" * 50)
print(f"融合心率: {result['heart_rate']:.1f} BPM" if result['heart_rate'] else "不可靠")
print(f"置信度: {result['confidence']:.2f}")
print(f"策略: {result['strategy']}")
print(f"最佳模态: {result['best_modality']}")
print(f"\n各模态质量:")
for m, q in result['modality_qualities'].items():
print(f" {m:15s}: {q:.3f}")

print("\n✅ 多模态融合测试通过")

4. 模态贡献分析

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
# 论文研究发现各模态贡献排序

modality_contribution = {
'ECG(方向盘)': {
'质量': '最高(接触式,QRS波清晰)',
'限制': '手必须握方向盘',
'覆盖率': '~60%(驾驶时)',
'BPM误差': '<2 BPM',
},
'PPG(方向盘)': {
'质量': '高(接触式脉搏波)',
'限制': '手指需贴传感器',
'覆盖率': '~40%',
'BPM误差': '<3 BPM',
},
'iPPG-RGB': {
'质量': '中(受光照影响)',
'限制': '需充足光照,面部可见',
'覆盖率': '~70%(白天)',
'BPM误差': '3-5 BPM',
},
'iPPG-IR': {
'质量': '中高(夜间可用)',
'限制': '需红外补光',
'覆盖率': '~80%(含夜间)',
'BPM误差': '3-4 BPM',
},
'iPPG-Thermal': {
'质量': '中低(分辨率有限)',
'限制': '温度变化小,需近距离',
'覆盖率': '~50%',
'BPM误差': '5-8 BPM',
},
}

print("各模态贡献分析")
print("=" * 70)
for mod, info in modality_contribution.items():
print(f"\n📊 {mod}")
for k, v in info.items():
print(f" {k}: {v}")

IMS 开发启示

1. 模态优先级策略

优先级 模态 IMS集成方案 硬件需求
1️⃣ iPPG-IR DMS红外摄像头复用 已有
2️⃣ 方向盘PPG 方向盘嵌入PPG传感器 新增PPG模块
3️⃣ iPPG-RGB DMS RGB摄像头复用 已有
4️⃣ 方向盘ECG 方向盘嵌入电极 新增ECG模块
5️⃣ 热成像 热成像摄像头 新增(LYNRED等)

2. 场景驱动的模态切换

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
class SceneBasedModalitySwitch:
"""
基于场景的模态切换策略
"""

scenarios = {
'白天正常驾驶': {
'primary': 'iPPG-RGB(DMS摄像头已有)',
'secondary': '方向盘PPG',
'expected_coverage': '90%+',
},
'夜间驾驶': {
'primary': 'iPPG-IR(DMS红外已有)',
'secondary': '方向盘PPG',
'expected_coverage': '85%+',
},
'手离开方向盘': {
'primary': 'iPPG-IR',
'secondary': 'iPPG-RGB/Thermal',
'expected_coverage': '70%',
},
'强运动伪影': {
'primary': '方向盘ECG(如有)',
'secondary': '热成像(不受光照影响)',
'expected_coverage': '50%',
},
' tunnels/出入口': {
'primary': '方向盘PPG/ECG',
'secondary': '热成像',
'expected_coverage': '60%',
},
}

print("场景驱动的模态切换:")
for scene, strategy in SceneBasedModalitySwitch.scenarios.items():
print(f"\n🚗 {scene}")
print(f" 主模态: {strategy['primary']}")
print(f" 备份: {strategy['secondary']}")
print(f" 预期覆盖率: {strategy['expected_coverage']}")

3. 健康座舱路线图

4. 与HEAR论文的互补

维度 HEAR (arXiv 2610.03570) Nature论文
传感器 60GHz mmWave雷达 5种模态融合
核心问题 哪些测量可信 如何多模态互补
方案 可观测性评估 模态选择性切换
互补性 提供质量评估方法 提供多模态硬件方案

结合使用: Nature论文的多模态硬件+HEAR的可观测性评估=完整的健康座舱方案。

总结

这篇 Nature 论文是车内健康监测的里程碑:

  1. 首个5模态融合方案在真实驾驶条件下验证
  2. 新型方向盘ECG电极大幅提升接触式信号质量
  3. 模态互补覆盖率达90%+,单一模态仅60%
  4. 场景驱动的模态切换解决各种失效场景

对 IMS 的核心启示:DMS红外摄像头可直接复用做iPPG-IR心率监测,无需新增硬件。这是从DMS到”健康座舱”的最短路径。后续逐步加入方向盘PPG/ECG和热成像,形成完整的多模态健康监测体系。与HEAR论文的可观测性评估结合,可构建高可靠的车内生命体征监测系统。