座舱多模态心率检测:方向盘ECG+PPG+红外热成像的量产方案

座舱多模态心率检测:方向盘ECG+PPG+红外热成像的量产方案

论文信息

项目 内容
标题 Reliable multimodal signals for in-vehicle heartbeat detection
发表 Scientific Reports, vol.16, 30709, 2026
链接 https://www.nature.com/articles/s41598-026-74069-3
关键词 ECG, PPG, rPPG, thermal, IR, multimodal, heartbeat

核心创新

首次在实车驾驶条件下集成 5种传感模态 实现鲁棒心率检测:

  1. 方向盘ECG(改进电极设计)
  2. 方向盘PPG(光电容积)
  3. RGB摄像头(rPPG)
  4. 红外摄像头(IR-rPPG)
  5. 热成像摄像头(热辐射rPPG)

关键贡献:改进方向盘ECG电极设计 + 集成红外和热成像 + 多模态融合策略。

1. 问题背景

1.1 驾驶时心率监测的挑战

挑战 影响
运动伪迹 方向盘操作干扰ECG/PPG
接触变异 手离开方向盘→信号丢失
光照变化 日光/隧道切换影响rPPG
个体差异 皮肤色素沉着影响PPG
实时性 心率变异(HRV)需高精度

1.2 为什么需要心率监测

应用 心率特征 IMS价值
疲劳检测 HRV↓, LF/HF↑ 补充PERCLOS
压力检测 HR↑, RMSSD↓ 情绪状态
酒驾检测 HR↑, HRV变化 辅助运动学
健康监测 心律异常 长期健康管理
走神检测 LF/HF变化 认知状态

2. 五模态传感器

2.1 传感器配置

模态 传感器位置 原理 采样率
方向盘ECG 方向盘左右握把 心电信号 500Hz
方向盘PPG 方向盘握把 光电容积 100Hz
RGB rPPG 仪表盘摄像头 面部反射光 30fps
IR rPPG 红外摄像头 红外反射光 30fps
热成像 热辐射摄像头 面部温度变化 30fps

2.2 改进的ECG电极设计

论文的 核心硬件贡献:改进方向盘ECG电极。

改进 旧设计 新设计 效果
电极材料 不锈钢 镀银导电织物 接触阻抗↓40%
形状 平面圆形 凸面弧形 接触面积↑60%
位置 固定3/9点 多区域覆盖 手移动容差↑
湿度适应 无 主动湿度补偿 干燥环境改善

3. 多模态融合策略

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

class MultimodalHeartRateFusion:
"""
多模态心率融合器

策略: 基于信号质量指数(SQI)的加权融合
劣质信号自动降权,优质信号自动升权
"""

def __init__(self, fs: int = 30):
self.fs = fs
self.modalities = ['ecg_sw', 'ppg_sw', 'rppg_rgb', 'rppg_ir', 'rppg_thermal']

@staticmethod
def compute_sqi(signal: np.ndarray, fs: int = 30) -> float:
"""
信号质量指数

综合:
1. 信号方差(运动过大→低质量)
2. 频谱集中度(心率频段能量占比)
3. 自相关峰值(周期性强度)
"""
# 1. 方差归一化
var = np.var(signal)
var_score = np.exp(-var / (np.max(signal)**2))

# 2. 频谱集中度(0.7-3Hz = 42-180bpm)
from scipy.signal import welch
freqs, psd = welch(signal, fs=fs, nperseg=fs*4)
hr_band = (freqs >= 0.7) & (freqs <= 3.0)
hr_power = np.sum(psd[hr_band])
total_power = np.sum(psd) + 1e-8
spectral_score = hr_power / total_power

# 3. 自相关
autocorr = np.correlate(signal, signal, mode='full')
autocorr = autocorr[len(autocorr)//2:] # 取右半
autocorr /= autocorr[0] # 归一化
# 找第二个峰(心率周期)
peaks = []
for i in range(1, len(autocorr)-1):
if autocorr[i] > autocorr[i-1] and autocorr[i] > autocorr[i+1]:
peaks.append((i, autocorr[i]))
if peaks:
peak_score = max(p[1] for p in peaks)
else:
peak_score = 0

# 综合
sqi = 0.3 * var_score + 0.4 * spectral_score + 0.3 * peak_score
return float(np.clip(sqi, 0, 1))

def estimate_hr(self, signal: np.ndarray, fs: int = 30) -> float:
"""单模态心率估计"""
freqs, psd = welch(signal, fs=fs, nperseg=fs*4)
hr_band = (freqs >= 0.7) & (freqs <= 3.0)
if np.any(hr_band):
peak_idx = np.argmax(psd[hr_band])
hr_hz = freqs[hr_band][peak_idx]
return hr_hz * 60 # bpm
return 0.0

def fuse(
self,
signals: dict,
sample_rates: dict
) -> dict:
"""
多模态心率融合

Args:
signals: {'ecg_sw': array, 'ppg_sw': array, ...}
sample_rates: {'ecg_sw': 500, 'ppg_sw': 100, ...}

Returns:
result: {'hr': float, 'quality': float, 'source': str}
"""
estimates = {}
qualities = {}

for mod, sig in signals.items():
if sig is None or len(sig) == 0:
continue
fs = sample_rates.get(mod, 30)
hr = self.estimate_hr(sig, fs)
sqi = self.compute_sqi(sig, fs)
estimates[mod] = hr
qualities[mod] = sqi

if not estimates:
return {'hr': 0, 'quality': 0, 'source': 'none'}

# 质量加权平均
total_q = sum(qualities.values())
if total_q == 0:
return {'hr': 0, 'quality': 0, 'source': 'none'}

fused_hr = sum(
estimates[m] * qualities[m] for m in estimates
) / total_q

best_mod = max(qualities, key=qualities.get)

return {
'hr': float(fused_hr),
'quality': float(total_q / len(estimates)),
'best_source': best_mod,
'all_estimates': estimates,
'all_qualities': qualities
}


# 测试
if __name__ == "__main__":
rng = np.random.default_rng(42)
fusion = MultimodalHeartRateFusion()

# 模拟5种模态信号(心率72bpm = 1.2Hz)
t = np.arange(0, 10, 1/500)
hr_freq = 1.2 # Hz

# ECG(高质量)
ecg = np.sin(2*np.pi*hr_freq*t) + 0.1*rng.normal(size=len(t))

# PPG(中等质量)
t_ppg = np.arange(0, 10, 1/100)
ppg = np.sin(2*np.pi*hr_freq*t_ppg) + 0.2*rng.normal(size=len(t_ppg))

# rPPG RGB(低质量,光照干扰)
t_rppg = np.arange(0, 10, 1/30)
rppg_rgb = 0.5*np.sin(2*np.pi*hr_freq*t_rppg) + 0.5*rng.normal(size=len(t_rppg))

# IR rPPG(中质量)
rppg_ir = 0.7*np.sin(2*np.pi*hr_freq*t_rppg) + 0.3*rng.normal(size=len(t_rppg))

# 热成像(低质量)
rppg_thermal = 0.3*np.sin(2*np.pi*hr_freq*t_rppg) + 0.7*rng.normal(size=len(t_rppg))

signals = {
'ecg_sw': ecg, 'ppg_sw': ppg,
'rppg_rgb': rppg_rgb, 'rppg_ir': rppg_ir,
'rppg_thermal': rppg_thermal
}
sample_rates = {'ecg_sw': 500, 'ppg_sw': 100, 'rppg_rgb': 30, 'rppg_ir': 30, 'rppg_thermal': 30}

result = fusion.fuse(signals, sample_rates)

print("=== 多模态心率融合结果 ===")
print(f"融合心率: {result['hr']:.1f} bpm (真值: 72.0)")
print(f"最佳模态: {result['best_source']}")
print(f"总体质量: {result['quality']:.3f}")
print("\n各模态估计:")
for mod, hr in result['all_estimates'].items():
q = result['all_qualities'][mod]
print(f" {mod:15s}: {hr:6.1f} bpm (SQI: {q:.3f})")

4. 实验结果

4.1 各模态单独性能

模态 MAE(bpm) 可用率(%) 夜间性能
方向盘ECG ±1.2 45% ✅
方向盘PPG ±2.5 40% ✅
RGB rPPG ±3.8 70% ❌
IR rPPG ±2.1 85% ✅
热成像rPPG ±4.5 60% ✅
融合 ±0.8 95% ✅

4.2 关键发现

场景 主导模态 原因
双手握盘 ECG+PPG 直接接触
单手驾驶 IR rPPG 红外不受光照影响
手离方向盘 RGB/IR rPPG 无接触方案
夜间驾驶 IR rPPG + ECG RGB失效
隧道进出 IR rPPG RGB受干扰
剧烈颠簸 ECG 其他模态运动伪迹大

5. IMS开发启示

5.1 量产推荐配置

等级 配置 成本 性能
基础 IR rPPG $0(已有DMS IR摄像头) ±2.1 bpm
标准 IR rPPG + 方向盘ECG $5(电极) ±0.8 bpm
高端 全5模态 $20 ±0.8 bpm, 95%可用

5.2 心率→驾驶员状态映射

graph TD
    A[多模态心率] --> B[HRV计算]
    B --> C{状态判定}
    
    C -->|HR↑+HRV↓| D[压力/疲劳]
    C -->|HR↑↑+异常HRV| E[酒驾损伤]
    C -->|HR正常+HRV稳定| F[正常]
    C -->|HR↓+HRV↓| G[深度疲劳]
    
    D --> H[一级提示]
    E --> I[二级警告]
    G --> J[建议休息]
    
    style C fill:#ff9,stroke:#333

5.3 与现有DMS集成

DMS组件 心率融合 互补效果
PERCLOS HRV补充 疲劳检测准确率+10%
凝视熵 HR+眼动 走神检测+15%
运动学PE HR+车辆 酒驾检测+20%
头姿 HRV+头姿 压力检测+12%

6. 总结

座舱心率检测的核心价值:

  1. 多模态互补 — 95%可用率vs单模态45%
  2. IR rPPG是性价比最高的方案 — 利用已有DMS摄像头
  3. 方向盘ECG改进 — 接触阻抗↓40%
  4. 融合后±0.8 bpm — 达到医疗级精度

对IMS团队:

  • 优先验证 IR rPPG方案(零硬件成本)
  • 评估 方向盘ECG改进电极设计
  • 融合 心率到现有疲劳/酒驾/走神检测管道
  • 对标 Euro NCAP OMS对生理信号的要求

论文: https://www.nature.com/articles/s41598-026-74069-3


座舱多模态心率检测:方向盘ECG+PPG+红外热成像的量产方案
https://dapalm.com/2026/10/08/2026-10-08-019-multimodal-heartbeat-steering-wheel-ecg-ppg-nature2026/
作者
Mars
发布于
2026年10月8日
许可协议