座舱语音情感分析:从声音读心——CHI 2025 情绪感知座舱与 IMS 融合

概述

项目 内容
主题 座舱语音情感识别与压力检测技术
核心来源 CHI 2025, ScienceDirect 2026 综述, CAVEMOVE 数据库, IEEE Spectrum
技术基础 语音情感识别 (SER) + 深度学习 + 车载降噪
量产状态 Cerence 情感语音助手已上车,CHI 2025 提出情感感知座舱框架

核心价值

语音是非接触式的情绪窗口,补充视觉 DMS 的局限:

情绪信号 视觉 DMS 语音 SER 生理传感器
疲劳 ✅ PERCLOS ⚠️ 语速变慢 ✅ HRV
愤怒 ⚠️ 面部表情 ✅ 音调升高 ✅ HR/血压
焦虑 ⚠️ 微表情 ✅ 颤音/停顿 ✅ EDA
压力 ⚠️ 间接 ✅ 韵律特征 ✅ HRV
认知负荷 ⚠️ 眨眼/瞳孔 ✅ 语音停顿 ⚠️ EEG
酒精 ✅ 面部潮红 ✅ 发音模糊 ✅ 间接

互补性高:视觉 DMS 擅长疲劳/酒精,语音 SER 擅长情绪/压力/认知负荷。

关键研究

1. CHI 2025:情感感知座舱框架

项目 内容
论文 “Emotion-aware Design in Automobiles”
会议 CHI 2025 (ACM Conference on Human Factors in Computing Systems)
链接 https://dl.acm.org/doi/full/10.1145/3706598.3713571

核心概念: 情感感知座舱能”感知、解释、适应和响应人类情绪”

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
class EmotionAwareCockpit:
"""
CHI 2025 情感感知座舱框架

四层架构:
1. Sense: 多模态情绪感知
2. Interpret: AI 情绪状态推断
3. Adapt: 自适应座舱响应
4. Respond: 情感化交互反馈

传感器融合:
- 视觉:面部表情 + 眼动 + 姿态
- 听觉:语音情感 + 语义分析
- 生理:HRV + EDA + 皮肤温度
- 行为:驾驶模式 + 交互频率
"""

FRAMEWORK = {
"sense": {
"visual": ["facial_expression", "eye_gaze", "body_posture"],
"acoustic": ["speech_emotion", "voice_stress", "linguistic"],
"physiological": ["HRV", "EDA", "skin_temp"],
"behavioral": ["steering_pattern", "braking_freq", "interaction_rate"],
},
"interpret": {
"emotion_model": "PAD (Pleasure-Arousal-Dominance)",
"fusion": "late_fusion (modality-specific models → weighted ensemble)",
"output": "emotion_state + confidence",
},
"adapt": {
"ambient_lighting": "调整色温和亮度",
"audio": "选择音乐类型和音量",
"climate": "调整温度和风量",
"hud": "调整信息密度和呈现方式",
"driving_mode": "调整ADAS介入阈值",
},
"respond": {
"voice": "情感化语音回复",
"haptic": "座椅/方向盘震动模式",
"visual": "HUD和仪表盘视觉反馈",
},
}

2. 语音压力检测综述(2021-2025)

项目 内容
论文 “Voice-based stress detection: A systematic review of ML/DL approaches (2021-2025)”
期刊 ScienceDirect, 2026
链接 https://www.sciencedirect.com/science/article/abs/pii/S0960077926005138

关键发现:

  • 韵律特征(音调、语速、能量)是最常用的压力检测特征
  • 频谱特征(MFCC、频谱质心)提供互补信息
  • TEO (Teager Energy Operator) 特征专为压力和愤怒设计
  • 深度学习(CNN+LSTM)在 SER 上优于传统方法 10-15%
  • 车载噪声是最大挑战

3. CAVEMOVE 车载声学数据库

项目 内容
名称 CAVEMOVE: Acoustic Database for Moving Vehicles
来源 arXiv, 2025
链接 https://pith.science/paper/2508.19691
内容 4辆车的脉冲响应和驾驶噪声 + Python API
用途 合成真实车载语音+噪声混合数据

技术方案

1. 车载 SER 管道

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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
import numpy as np
import torch
import torch.nn as nn
from typing import Tuple

class InCabinSER(nn.Module):
"""
车载语音情感识别 (SER) 系统

架构:CNN + LSTM 双流
- CNN:提取频谱空间特征(MFCC/Mel图谱)
- LSTM:捕获时序韵律变化
- 融合:双流特征拼接后分类

硬件配置:
| 组件 | 型号 | 参数 | 安装位置 |
|------|------|------|----------|
| 麦克风阵列 | 4麦环形阵列 | 16kHz, 16bit | 车顶控制台 |
| DSP | 专用音频DSP | 降噪+回声消除 | 中控 |
| 处理器 | QCS8255 | NPU推理 | 中控 |

降噪管道:
1. 回声消除 (AEC)
2. 波束成形 (Beamforming)
3. 非平稳噪声抑制
4. 残差噪声消除
"""

EMOTIONS = {
0: "neutral", # 中性
1: "calm", # 平静
2: "happy", # 快乐
3: "sad", # 悲伤
4: "angry", # 愤怒
5: "fearful", # 恐惧
6: "stress", # 压力
7: "fatigued", # 疲劳
}

def __init__(self, num_classes: int = 8, sample_rate: int = 16000):
super().__init__()
self.sample_rate = sample_rate

# 频谱分支:CNN 处理 Mel 频谱图
self.spectral_branch = nn.Sequential(
# 输入: (B, 1, 128, T) Mel 频谱图
nn.Conv2d(1, 32, kernel_size=(3, 3), padding=1),
nn.BatchNorm2d(32),
nn.ReLU(),
nn.MaxPool2d((2, 2)),

nn.Conv2d(32, 64, kernel_size=(3, 3), padding=1),
nn.BatchNorm2d(64),
nn.ReLU(),
nn.MaxPool2d((2, 2)),

nn.Conv2d(64, 128, kernel_size=(3, 3), padding=1),
nn.BatchNorm2d(128),
nn.ReLU(),
nn.AdaptiveAvgPool2d((1, 1)),
)
spectral_dim = 128

# 韵律分支:LSTM 处理时序特征
# 输入: [pitch, energy, speaking_rate, pause_duration, jitter, shimmer]
self.prosody_branch = nn.LSTM(
input_size=6,
hidden_size=64,
num_layers=2,
batch_first=True,
bidirectional=True,
)
prosody_dim = 128 # 64 * 2 (双向)

# 融合分类头
self.classifier = nn.Sequential(
nn.Linear(spectral_dim + prosody_dim, 256),
nn.ReLU(),
nn.Dropout(0.4),
nn.Linear(256, 128),
nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(128, num_classes)
)

def forward(self, mel_spectrogram, prosody_features):
"""
Args:
mel_spectrogram: (B, 1, 128, T) Mel 频谱图
prosody_features: (B, T_p, 6) 韵律特征序列

Returns:
logits: (B, 8) 情绪分类
"""
# 频谱分支
spec_feat = self.spectral_branch(mel_spectrogram)
spec_feat = spec_feat.flatten(1)

# 韵律分支
_, (hn, _) = self.prosody_branch(prosody_features)
# 拼接双向 LSTM 最后层
prosody_feat = torch.cat([hn[-2], hn[-1]], dim=-1)

# 融合
fused = torch.cat([spec_feat, prosody_feat], dim=-1)
return self.classifier(fused)


class CabinNoiseFilter:
"""
车载降噪管道

基于 CAVEMOVE 数据库的车载噪声特征:
- 引擎噪声: 50-200Hz 低频
- 风噪: 500-2000Hz 宽带
- 路面噪声: 100-500Hz
- 轮胎噪声: 800-1500Hz
- HVAC: 宽带低频
"""

def __init__(self, sample_rate: int = 16000):
self.fs = sample_rate
self.noise_profile = None

def extract_mel(self, audio: np.ndarray, n_mels: int = 128) -> np.ndarray:
"""提取 Mel 频谱图"""
# 简化版 Mel 提取
from scipy.signal import stft
f, t, Zxx = stft(audio, fs=self.fs, nperseg=512)
# Mel 滤波器组
mel_filter = self._mel_filterbank(n_mels, len(f), self.fs)
mel_spec = np.dot(mel_filter, np.abs(Zxx))
# 对数压缩
mel_spec = 10 * np.log10(mel_spec + 1e-10)
return mel_spec

def extract_prosody(self, audio: np.ndarray) -> np.ndarray:
"""提取韵律特征"""
# 基频提取(简化版自相关)
frame_size = int(0.03 * self.fs) # 30ms
hop = int(0.01 * self.fs) # 10ms

features = []
for i in range(0, len(audio) - frame_size, hop):
frame = audio[i:i+frame_size]
# 基频(pitch)
pitch = self._estimate_pitch(frame)
# 能量
energy = np.sum(frame ** 2) / frame_size
# 过零率
zcr = np.sum(np.diff(np.sign(frame)) != 0) / frame_size
# 抖动(jitter)和闪烁(shimmer)简化
features.append([pitch, energy, zcr, 0, 0, 0])

return np.array(features)

def _estimate_pitch(self, frame):
"""简化版基频估计"""
autocorr = np.correlate(frame, frame, mode='full')
autocorr = autocorr[len(autocorr)//2:]
# 找第一个峰
for i in range(int(self.fs/400), int(self.fs/80)):
if autocorr[i] > 0.3 * autocorr[0]:
return self.fs / i
return 0

def _mel_filterbank(self, n_mels, n_fft, fs):
"""简化 Mel 滤波器组"""
mel_filter = np.random.rand(n_mels, n_fft) * 0.1 + 0.1
return mel_filter


# 测试
if __name__ == "__main__":
ser = InCabinSER(num_classes=8)

# 模拟输入
mel = torch.randn(2, 1, 128, 100) # 2个样本, Mel频谱
prosody = torch.randn(2, 30, 6) # 韵律特征

with torch.no_grad():
out = ser(mel, prosody)

print("=== 车载 SER 测试 ===")
print(f"输出: {out.shape}")
emotions = InCabinSER.EMOTIONS
for i, emo in emotions.items():
prob = torch.softmax(out, dim=-1)[0, i]
print(f" {emo}: {prob:.4f}")

print(f"\n参数量: {sum(p.numel() for p in ser.parameters()):,}")
print(f"模型大小: {sum(p.numel() for p in ser.parameters()) * 4 / 1024 / 1024:.1f} MB")

2. 情绪-驾驶状态映射

语音情绪 驾驶状态 DMS 联合判断 干预措施
愤怒(音调↑、能量↑) 路怒症风险 + 面部表情 降温+舒缓音乐
压力(韵律不规律) 认知过载 + 眨眼频率 简化HUD+减速
悲伤(音调↓、语速↓) 注意力下降 + PERCLOS 光疗+音频刺激
疲劳(语速↓、停顿↑) 疲劳驾驶 + PERCLOS+HRV 警告+建议休息
正常 正常驾驶 - 无

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
class MultiModalEmotionFusion(nn.Module):
"""
多模态情绪融合:视觉 DMS + 语音 SER + 生理

融合策略:late fusion with learnable weights

优势:
- 视觉受限时(口罩/墨镜/夜间)语音接管
- 语音受限时(嘈杂/无语音)视觉接管
- 两者互补时精度最高
"""

def __init__(self):
super().__init__()
self.ser = InCabinSER(num_classes=8)
self.dms_feat = nn.Linear(10, 64) # 视觉特征
self.hrv_feat = nn.Linear(5, 32) # HRV特征

# 可学习融合权重
self.weights = nn.Parameter(torch.tensor([0.4, 0.4, 0.2]))

self.classifier = nn.Sequential(
nn.Linear(8 + 64 + 32, 128),
nn.ReLU(),
nn.Linear(128, 8)
)

def forward(self, mel, prosody, dms, hrv):
ser_logits = self.ser(mel, prosody)
dms_feat = self.dms_feat(dms)
hrv_feat = self.hrv_feat(hrv)

w = torch.softmax(self.weights, dim=0)
ser_weighted = w[0] * ser_logits
dms_weighted = w[1] * self.classifier(
torch.cat([ser_logits, dms_feat, hrv_feat], dim=-1)
) * 0 + dms_feat # 简化
hrv_weighted = w[2] * hrv_feat

fused = torch.cat([ser_weighted, dms_weighted, hrv_weighted], dim=-1)
return self.classifier(torch.cat([ser_logits, dms_feat, hrv_feat], dim=-1))

IMS 落地路线

阶段 目标 周期
P1 车载降噪 + 基础 SER(6类) 3月
P2 多模态融合(DMS+SER) 6月
P3 情感感知座舱自适应 12月
验收 情绪识别准确率 >75%,降噪后 SNR >15dB -

参考文献

  1. ACM CHI 2025, “Emotion-aware Design in Automobiles.” Link
  2. ScienceDirect 2026, “Voice-based stress detection: A systematic review (2021-2025).” Link
  3. arXiv 2025, “CAVEMOVE: Acoustic Database for Moving Vehicles.” Link
  4. IEEE Spectrum, “AI-Enabled Vehicle Assistant,” 2026. Link
  5. Springer, “Real-time speech emotion recognition using deep learning,” 2024. Link
  6. Springer, “Review and Perspectives on Human Emotion for Connected Automated Vehicles,” 2024. Link

本文基于 CHI 2025 情感感知座舱框架和语音压力检测综述,结合 IMS 落地需求给出融合方案。代码示例可直接运行验证。