Volvo EX90 雷达CPD系统架构解析:7个60GHz雷达实现全车舱生命检测

系统概述

Volvo EX90 是全球首款搭载雷达式儿童存在检测(CPD)系统的量产车型,代表了Euro NCAP 2026 CPD要求的最佳实践。

核心参数

参数 数值
雷达数量 7个 60GHz雷达传感器
检测范围 前排脚坑 → 后备箱全覆盖
最小检测目标 婴儿呼吸(胸部微动)
检测延时 <1秒
工作温度 -40°C ~ +85°C
功耗 <5W(待机模式)

传感器布局

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Volvo EX90 车舱雷达布局(俯视图)

前挡风玻璃
┌─────────────────────┐
│ 📡 📡 📡 📡 │ ← 顶棚雷达(4个)
│ RL1 RL2 RL3 RL4│
│ │
[驾驶员] [乘客]
│ │
│ 📡 📡 │ ← B柱雷达(2个)
│ BP1 BP2 │
│ │
│ 后排座椅 │
│ │
│ 📡 │ ← 后备箱雷达(1个)
│ TR1 │
└─────────────────────┘
后备箱盖

各传感器职责

传感器 位置 检测区域 主要功能
RL1/RL2 顶棚前部 前排座椅 驾驶员/乘客呼吸检测
RL3/RL4 顶棚后部 后排座椅 儿童座椅检测
BP1/BP2 B柱 侧面覆盖 跨排检测
TR1 后备箱 后备箱 遗留宠物检测

技术原理

1. 60GHz雷达特性

1
2
3
4
5
6
7
8
radar_params = {
"频率": "60 GHz",
"波长": "5 mm",
"带宽": "7 GHz (57-64 GHz)",
"分辨率": "毫米级",
"穿透性": "可穿透毛毯/衣物",
"反射特性": "对水/人体高反射"
}

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

class RadarVitalSignsDetector:
"""
60GHz雷达生命体征检测

原理:
1. 雷达发射FMCW信号
2. 接收人体反射信号
3. 提取相位变化(胸部微动)
4. FFT分析呼吸/心跳频率
"""

def __init__(self, sample_rate=100, fft_size=1024):
self.sample_rate = sample_rate
self.fft_size = fft_size

# 呼吸频率范围(成人: 12-20 bpm, 婴儿: 30-60 bpm)
self.breath_range_adult = (12/60, 20/60) # Hz
self.breath_range_infant = (30/60, 60/60) # Hz

# 心跳频率范围
self.heart_rate_range = (60/60, 120/60) # Hz

def extract_phase(self, radar_signal):
"""
提取相位变化信号

Args:
radar_signal: (N,) 雷达接收信号

Returns:
phase_var: 相位变化序列
"""
# IQ解调
i_channel = np.real(radar_signal)
q_channel = np.imag(radar_signal)

# 相位提取
phase = np.arctan2(q_channel, i_channel)

# 相位展开
phase_unwrap = np.unwrap(phase)

return phase_unwrap

def detect_breathing(self, phase_signal):
"""
检测呼吸信号

Args:
phase_signal: 相位变化序列

Returns:
breathing_rate: 呼吸频率 (bpm)
confidence: 检测置信度
"""
# FFT分析
fft_result = np.fft.fft(phase_signal, self.fft_size)
freqs = np.fft.fftfreq(self.fft_size, 1/self.sample_rate)

# 提取呼吸频段
breath_mask = (np.abs(freqs) >= self.breath_range_infant[0]) & \
(np.abs(freqs) <= self.breath_range_infant[1])

breath_spectrum = np.abs(fft_result) * breath_mask

# 找峰值频率
peak_idx = np.argmax(breath_spectrum)
breath_freq = np.abs(freqs[peak_idx])

# 转换为bpm
breathing_rate = breath_freq * 60

# 置信度(峰值与背景比)
background = np.mean(breath_spectrum[breath_mask])
confidence = breath_spectrum[peak_idx] / (background + 1e-6)

return breathing_rate, confidence

def classify_occupant(self, breathing_rate, amplitude):
"""
分类乘员类型

Args:
breathing_rate: 呼吸频率 (bpm)
amplitude: 呼吸幅度

Returns:
occupant_type: 'adult', 'child', 'infant', 'pet', 'none'
"""
if breathing_rate < 10 or breathing_rate > 80:
return 'none'

# 婴儿:呼吸快、幅度小
if 30 <= breathing_rate <= 60 and amplitude < 0.5:
return 'infant'

# 儿童:呼吸较快
if 20 <= breathing_rate < 30:
return 'child'

# 成人:正常呼吸
if 12 <= breathing_rate < 20:
return 'adult'

# 宠物:呼吸很快
if breathing_rate > 60:
return 'pet'

return 'unknown'


# ============ 实际测试 ============

if __name__ == "__main__":
detector = RadarVitalSignsDetector()

# 模拟雷达信号(包含呼吸成分)
t = np.linspace(0, 10, 1000) # 10秒信号

# 模拟婴儿呼吸(40 bpm = 0.67 Hz)
breath_freq = 40 / 60
phase_signal = 0.3 * np.sin(2 * np.pi * breath_freq * t)
phase_signal += 0.05 * np.random.randn(len(t)) # 添加噪声

# 检测
breathing_rate, confidence = detector.detect_breathing(phase_signal)
occupant_type = detector.classify_occupant(breathing_rate, 0.3)

print("=" * 60)
print("雷达生命体征检测结果")
print("=" * 60)
print(f"检测呼吸频率: {breathing_rate:.1f} bpm")
print(f"检测置信度: {confidence:.2f}")
print(f"乘员类型: {occupant_type}")

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
class MultiRadarFusion:
"""
多雷达融合检测

Volvo EX90使用7个雷达,通过融合提升检测可靠性
"""

def __init__(self, num_radars=7):
self.num_radars = num_radars
self.detectors = [RadarVitalSignsDetector() for _ in range(num_radars)]

def detect_presence(self, radar_signals):
"""
融合检测车内生命体

Args:
radar_signals: (7, N) 7个雷达的信号

Returns:
result: {
'presence': bool,
'location': str,
'occupant_type': str,
'confidence': float
}
"""
detections = []

for i, signal in enumerate(radar_signals):
phase = self.detectors[i].extract_phase(signal)
breath_rate, conf = self.detectors[i].detect_breathing(phase)

if conf > 2.0: # 置信度阈值
occupant = self.detectors[i].classify_occupant(breath_rate, 0.5)
detections.append({
'radar_id': i,
'breath_rate': breath_rate,
'confidence': conf,
'occupant_type': occupant
})

# 融合决策
if len(detections) == 0:
return {
'presence': False,
'location': 'none',
'occupant_type': 'none',
'confidence': 0.0
}

# 取置信度最高的检测
best = max(detections, key=lambda x: x['confidence'])

# 映射位置
location_map = {
0: 'front_left', # RL1
1: 'front_right', # RL2
2: 'rear_left', # RL3
3: 'rear_right', # RL4
4: 'b_pillar_left', # BP1
5: 'b_pillar_right',# BP2
6: 'trunk' # TR1
}

return {
'presence': True,
'location': location_map[best['radar_id']],
'occupant_type': best['occupant_type'],
'confidence': best['confidence'] / 10.0 # 归一化
}

系统工作流程

场景1:锁车检测

1
2
3
4
5
6
7
8
9
10
11
12
驾驶员熄火 → 打开车门下车 → 关门 → 按钥匙锁车

7个雷达同时激活(1秒扫描)

┌──────────────┴──────────────┐
│ │
检测到生命体 未检测到生命体
│ │
禁止锁车 + 警告 允许锁车

中控屏显示:检测到后排有儿童
建议检查后座

场景2:实时监控(Euro NCAP要求)

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
def euro_ncap_cpd_scenario():
"""
Euro NCAP 2026 CPD测试场景

要求:锁车后60秒内检测到儿童并发出警告
"""

scenarios = [
{
"id": "CPD-01",
"description": "6个月婴儿在后向儿童座椅",
"test_duration": 60, # 秒
"detection_time": 5, # ≤5秒检测
"warning_time": 10, # ≤10秒警告
"cover": "无遮挡"
},
{
"id": "CPD-02",
"description": "3岁儿童在安全座椅",
"test_duration": 60,
"detection_time": 3,
"warning_time": 8,
"cover": "毛毯覆盖"
},
{
"id": "CPD-03",
"description": "宠物在后备箱",
"test_duration": 60,
"detection_time": 5,
"warning_time": 10,
"cover": "无遮挡"
},
{
"id": "CPD-04",
"description": "婴儿熟睡(极微弱呼吸)",
"test_duration": 60,
"detection_time": 10,
"warning_time": 15,
"cover": "无遮挡"
}
]

return scenarios

与竞品对比

方案 厂商 传感器 检测范围 毛毯穿透 成本
Volvo EX90 Volvo 7个60GHz雷达 全车舱
Tesla Model Y Tesla 摄像头 后排
Mercedes EQS Mercedes 4个UWB 后排
BMW iX BMW 摄像头+毫米波 后排 ⚠️

IMS开发启示

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
# 推荐雷达芯片
radar_chips = [
{
"vendor": "Texas Instruments",
"model": "IWR6843AOP",
"frequency": "60-64 GHz",
"tx_rx": "3TX, 4RX",
"features": "内置DSP, 低功耗",
"cost": "$15-20",
"recommended": True
},
{
"vendor": "Infineon",
"model": "BGT60ATR24C",
"frequency": "60 GHz",
"tx_rx": "2TX, 4RX",
"features": "紧凑封装",
"cost": "$12-18",
"recommended": True
},
{
"vendor": "Acconeer",
"model": "A121",
"frequency": "60 GHz",
"tx_rx": "1TX, 1RX",
"features": "超低功耗",
"cost": "$8-12",
"recommended": "后备箱场景"
}
]

2. 集成架构

1
2
3
4
5
6
7
8
9
10
11
12
13
┌─────────────────────────────────────────────┐
QCS8255 平台
├─────────────────────────────────────────────┤
┌─────────┐ ┌─────────┐ ┌─────────┐
雷达接口 DSP处理 融合决策
SPI/I2C │→ │ FFT/滤波 │→ 逻辑判断
└─────────┘ └─────────┘ └─────────┘

┌─────────┐ ┌─────────┐
7个雷达 警告输出
传感器 CAN总线
└─────────┘ └─────────┘
└─────────────────────────────────────────────┘

3. 开发路线图

阶段 内容 时间
P0 单雷达原型验证 1个月
P1 3雷达系统集成 2个月
P2 7雷达全车覆盖 3个月
P3 Euro NCAP认证 2个月

4. 关键挑战

挑战 解决方案
毛毯遮挡 60GHz穿透性 + 多雷达融合
宠物误检 呼吸频率特征区分
极端温度 温度补偿算法
车辆震动 自适应滤波
成本控制 雷达数量优化(最少3个)

关键结论

  1. 7雷达全覆盖是最佳方案:满足Euro NCAP所有场景
  2. 60GHz是最佳频段:穿透性+分辨率平衡
  3. 呼吸频率是可靠特征:婴儿30-60 bpm,成人12-20 bpm
  4. 多雷达融合必要:单雷达误检率高
  5. IMS应优先布局:Euro NCAP 2026强制要求

参考资源:

  • Volvo EX90技术白皮书
  • Texas Instruments IWR6843AOP数据手册
  • Euro NCAP CPD Protocol 2026
  • Acconeer A121雷达开发套件

Volvo EX90 雷达CPD系统架构解析:7个60GHz雷达实现全车舱生命检测
https://dapalm.com/2026/04/25/2026-04-25-volvo-ex90-radar-cpd-architecture/
作者
Mars
发布于
2026年4月25日
许可协议