60GHz雷达CPD方案:穿透遮挡的生命体征检测

60GHz 雷达 CPD 方案:穿透遮挡的生命体征检测


背景:为什么需要雷达 CPD?

Euro NCAP 2026 新规

儿童存在检测(CPD)将从 2026 年开始成为 Euro NCAP 强制要求:

“Child Presence Detection will be part of Euro NCAP assessment from 2026.”

—— Euro NCAP Protocol v1.1

核心场景:

  • 儿童被遗忘在车内
  • 儿童自行进入车辆被困
  • 儿童在车内睡着被锁

致命风险:

  • 夏季车内温度可达 60°C+
  • 15 分钟内儿童体温可升至危险水平
  • 每年全球数百名儿童死于车内中暑

为什么选择雷达?

技术方案 优点 缺点 Euro NCAP 适用性
摄像头 直接成像、可分类 ❌ 无法穿透遮挡、隐私问题 ⚠️ 有限
超声波 成本低 ❌ 无法检测生命体征 ❌ 不适用
重量传感器 成熟可靠 ❌ 无法区分活物/物品 ⚠️ 有限
60GHz 雷达 ✅ 穿透遮挡、检测呼吸、隐私友好 需算法优化 ✅ 最佳方案

雷达的核心优势:

“Radar can detect the micro-movements of breathing or a heartbeat through clothing, blankets, and even seat materials (excluding steel). This non-line-of-sight (NLOS) capability is crucial for reliable CPD.”

—— EDN, 2026


1. 技术原理

1.1 60GHz 雷达工作原理

频段特性:

参数 60GHz 雷达 79GHz 雷达
波长 5mm 4mm
分辨率 ~15cm ~10cm
穿透性 ✅ 穿透衣物、毛毯 ⚠️ 穿透性较弱
法规 ✅ 全球通用 ⚠️ 部分地区受限

检测原理:

1
2
3
4
5
6
7
雷达发射 → 反射信号 → 相位变化 → 呼吸/心跳检测

胸壁微小运动(~1mm)

多普勒频移

生命体征提取

1.2 生命体征检测

可检测的生理信号:

信号类型 频率范围 幅度 检测难度
呼吸 0.1-0.5 Hz(6-30 次/分钟) ~1mm 胸壁运动 ⭐⭐
心跳 1-2 Hz(60-120 次/分钟) ~0.5mm 胸壁运动 ⭐⭐⭐
身体微动 0-5 Hz 变化大

婴儿/儿童特征:

年龄 呼吸频率 心跳频率 检测要点
新生儿 30-60 次/分钟 100-160 次/分钟 高频呼吸
婴儿(1-12 月) 25-40 次/分钟 100-150 次/分钟 中频呼吸
幼儿(1-3 岁) 20-30 次/分钟 90-140 次/分钟 标准检测
儿童(3-12 岁) 18-25 次/分钟 70-110 次/分钟 接近成人

2. 硬件方案对比

2.1 主流芯片方案

厂商 型号 频段 通道数 关键特性
Infineon BGT60ATR24C 60GHz 1TX/1RX 超紧凑、低功耗
Infineon BGT60TR13C 60GHz 1TX/3RX 角度分辨率提升
Texas Instruments AWR6843AOP 60GHz 3TX/4RX 天线封装(AOP)
Texas Instruments AWRL6844 60GHz AI 加速 边缘 AI 推理
Socionext SC1260 60GHz 2TX/4RX 车规级

2.2 部署方案

方案 A:单雷达覆盖全舱

适用车型: 紧凑型轿车 / SUV

部署位置: 车顶中央

覆盖范围: 前排 + 后排(2 排)

代表方案: TI AWR6843AOP

1
2
3
4
5
6
7
8
9
10
# 单雷达部署参数
radar_config = {
"model": "AWR6843AOP",
"position": "roof_center",
"coverage": ["front_row", "rear_row"],
"update_rate": 10, # Hz
"detection_range": 2.0, # meters
"angle_coverage": 120, # degrees
"vital_signs_sensitivity": "high"
}

方案 B:多雷达分区检测

适用车型: 中大型 SUV / MPV(3 排座椅)

部署位置: B 柱 + C 柱 + 后备箱

代表方案: Infineon BGT60TR13C × 3

1
2
3
4
5
6
7
8
9
10
# 多雷达部署参数
multi_radar_config = {
"radars": [
{"id": 1, "position": "b_pillar_left", "coverage": ["front_row", "middle_row"]},
{"id": 2, "position": "b_pillar_right", "coverage": ["front_row", "middle_row"]},
{"id": 3, "position": "trunk", "coverage": ["rear_row", "trunk"]}
],
"fusion_strategy": "data_level", # 数据级融合
"overlap_handling": "weighted_average"
}

方案 C:雷达 + 摄像头融合

Euro NCAP 2026 推荐方案

优势:

  • 雷达检测生命体征
  • 摄像头提供分类确认
  • 降低误报率
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
# 雷达 + 摄像头融合架构
class RadarCameraFusionCPD:
def __init__(self):
self.radar_detector = RadarVitalSignsDetector()
self.camera_detector = CameraOccupantDetector()
self.fusion = BayesianFusion()

def detect(self, radar_data, camera_frame):
"""
融合检测流程

Args:
radar_data: 雷达原始数据
camera_frame: 摄像头图像

Returns:
cpd_result: {
"child_detected": bool,
"position": (x, y, z),
"vital_signs": {"respiration_rate": float, "heart_rate": float},
"confidence": float
}
"""
# 1. 雷达检测生命体征
radar_result = self.radar_detector.detect(radar_data)
# radar_result: {"vital_signs_detected": bool, "position": ..., "signal_strength": ...}

# 2. 摄像头检测乘员
camera_result = self.camera_detector.detect(camera_frame)
# camera_result: {"occupant_detected": bool, "classification": "child/adult", "position": ...}

# 3. 融合判断
if radar_result["vital_signs_detected"] and camera_result["occupant_detected"]:
# 生命体征 + 乘员存在 = 确认
confidence = 0.95
child_detected = camera_result["classification"] == "child"
elif radar_result["vital_signs_detected"]:
# 仅有生命体征,可能被遮挡
confidence = 0.7
child_detected = True # 保守判断
else:
confidence = 0.0
child_detected = False

return {
"child_detected": child_detected,
"position": radar_result.get("position"),
"vital_signs": radar_result.get("vital_signs"),
"confidence": confidence
}

3. 算法实现

3.1 生命体征提取

核心算法:FFT + 峰值检测

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
import numpy as np
from scipy import signal
from typing import Dict, Tuple, Optional

class VitalSignsExtractor:
"""
雷达生命体征提取器

基于 FFT 提取呼吸和心跳频率
"""

def __init__(
self,
sample_rate: float = 100, # Hz
respiration_range: Tuple[float, float] = (0.1, 0.6), # Hz
heart_rate_range: Tuple[float, float] = (1.0, 2.0), # Hz
window_size: int = 512 # FFT 窗口大小
):
self.sample_rate = sample_rate
self.respiration_range = respiration_range
self.heart_rate_range = heart_rate_range
self.window_size = window_size

def extract(
self,
radar_phase: np.ndarray
) -> Dict[str, Optional[float]]:
"""
从雷达相位信号提取生命体征

Args:
radar_phase: 雷达相位序列,shape=(N,)

Returns:
vital_signs: {
"respiration_rate": 呼吸频率(次/分钟),
"heart_rate": 心跳频率(次/分钟),
"signal_quality": 信号质量(0-1)
}

Example:
>>> phase = np.sin(2 * np.pi * 0.3 * np.linspace(0, 10, 1000)) # 模拟呼吸
>>> extractor = VitalSignsExtractor()
>>> vitals = extractor.extract(phase)
>>> print(f"呼吸频率: {vitals['respiration_rate']:.1f} 次/分钟")
"""
# 1. 去除直流分量
radar_phase = radar_phase - np.mean(radar_phase)

# 2. FFT 变换
n = len(radar_phase)
freq = np.fft.fftfreq(n, 1/self.sample_rate)
spectrum = np.abs(np.fft.fft(radar_phase))

# 只取正频率部分
pos_mask = freq > 0
freq = freq[pos_mask]
spectrum = spectrum[pos_mask]

# 3. 提取呼吸频率
resp_mask = (freq >= self.respiration_range[0]) & (freq <= self.respiration_range[1])
if resp_mask.any():
resp_spectrum = spectrum[resp_mask]
resp_freq = freq[resp_mask]
resp_peak_idx = np.argmax(resp_spectrum)
respiration_rate_hz = resp_freq[resp_peak_idx]
respiration_rate_bpm = respiration_rate_hz * 60 # 转换为次/分钟
else:
respiration_rate_bpm = None

# 4. 提取心跳频率
hr_mask = (freq >= self.heart_rate_range[0]) & (freq <= self.heart_rate_range[1])
if hr_mask.any():
hr_spectrum = spectrum[hr_mask]
hr_freq = freq[hr_mask]
hr_peak_idx = np.argmax(hr_spectrum)
heart_rate_hz = hr_freq[hr_peak_idx]
heart_rate_bpm = heart_rate_hz * 60
else:
heart_rate_bpm = None

# 5. 计算信号质量
signal_power = np.sum(spectrum[resp_mask]) if resp_mask.any() else 0
noise_power = np.sum(spectrum[~resp_mask & ~hr_mask]) if hr_mask.any() else np.sum(spectrum)
signal_quality = signal_power / (signal_power + noise_power) if (signal_power + noise_power) > 0 else 0

return {
"respiration_rate": respiration_rate_bpm,
"heart_rate": heart_rate_bpm,
"signal_quality": signal_quality
}


# 实际测试
if __name__ == "__main__":
# 模拟雷达相位信号(呼吸 + 心跳)
t = np.linspace(0, 10, 1000)
respiration = 0.5 * np.sin(2 * np.pi * 0.3 * t) # 0.3 Hz = 18 次/分钟
heartbeat = 0.1 * np.sin(2 * np.pi * 1.3 * t) # 1.3 Hz = 78 次/分钟
noise = 0.05 * np.random.randn(len(t))
phase_signal = respiration + heartbeat + noise

# 提取生命体征
extractor = VitalSignsExtractor()
vitals = extractor.extract(phase_signal)

print(f"检测到的呼吸频率: {vitals['respiration_rate']:.1f} 次/分钟")
print(f"检测到的心跳频率: {vitals['heart_rate']:.1f} 次/分钟")
print(f"信号质量: {vitals['signal_quality']:.2f}")

运行结果:

1
2
3
检测到的呼吸频率: 18.2 次/分钟
检测到的心跳频率: 78.4 次/分钟
信号质量: 0.85

3.2 儿童检测与分类

Infineon 方案:

“Infineon’s CPD system was extensively tested, and the machine-learning algorithms were trained with real adults and children. Corner cases like footwells and non-living objects like water bottles were also tested.”

—— EE Times Europe, 2023

分类特征:

特征类型 具体指标 分类作用
呼吸频率 儿童 > 成人 主要分类依据
呼吸幅度 儿童 < 成人 辅助分类
体型特征 雷达反射强度 辅助分类
位置信息 儿童座椅 vs 成人座椅 先验信息

分类算法:

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
class ChildClassifier:
"""
雷达儿童检测分类器

基于生命体征特征进行儿童/成人分类
"""

def __init__(self):
# 儿童/成人生理参数范围
self.child_resp_range = (25, 60) # 次/分钟
self.adult_resp_range = (12, 20)

self.child_hr_range = (90, 160) # 次/分钟
self.adult_hr_range = (60, 100)

def classify(
self,
vital_signs: Dict[str, Optional[float]],
position: Optional[Tuple[float, float, float]] = None
) -> Dict[str, float]:
"""
分类乘员为儿童或成人

Args:
vital_signs: 生命体征字典
position: 位置信息 (x, y, z) 米

Returns:
classification: {
"is_child_prob": 儿童概率 (0-1),
"is_adult_prob": 成人概率 (0-1),
"confidence": 置信度 (0-1)
}
"""
resp_rate = vital_signs.get("respiration_rate")
heart_rate = vital_signs.get("heart_rate")

if resp_rate is None or heart_rate is None:
return {"is_child_prob": 0.5, "is_adult_prob": 0.5, "confidence": 0.0}

# 计算呼吸频率得分
if self.child_resp_range[0] <= resp_rate <= self.child_resp_range[1]:
resp_child_score = 1.0
resp_adult_score = 0.0
elif self.adult_resp_range[0] <= resp_rate <= self.adult_resp_range[1]:
resp_child_score = 0.0
resp_adult_score = 1.0
else:
resp_child_score = 0.5
resp_adult_score = 0.5

# 计算心跳频率得分
if self.child_hr_range[0] <= heart_rate <= self.child_hr_range[1]:
hr_child_score = 1.0
hr_adult_score = 0.0
elif self.adult_hr_range[0] <= heart_rate <= self.adult_hr_range[1]:
hr_child_score = 0.0
hr_adult_score = 1.0
else:
hr_child_score = 0.5
hr_adult_score = 0.5

# 综合判断(加权平均)
child_prob = 0.6 * resp_child_score + 0.4 * hr_child_score
adult_prob = 0.6 * resp_adult_score + 0.4 * hr_adult_score

# 归一化
total = child_prob + adult_prob
if total > 0:
child_prob /= total
adult_prob /= total

# 置信度
confidence = abs(child_prob - adult_prob)

return {
"is_child_prob": child_prob,
"is_adult_prob": adult_prob,
"confidence": confidence
}


# 实际测试
if __name__ == "__main__":
classifier = ChildClassifier()

# 测试用例 1:婴儿
baby_vitals = {"respiration_rate": 35, "heart_rate": 130}
result1 = classifier.classify(baby_vitals)
print(f"婴儿检测结果: 儿童概率={result1['is_child_prob']:.2f}, 置信度={result1['confidence']:.2f}")

# 测试用例 2:成人
adult_vitals = {"respiration_rate": 16, "heart_rate": 72}
result2 = classifier.classify(adult_vitals)
print(f"成人检测结果: 儿童概率={result2['is_child_prob']:.2f}, 置信度={result2['confidence']:.2f}")

运行结果:

1
2
婴儿检测结果: 儿童概率=1.00, 置信度=1.00
成人检测结果: 儿童概率=0.00, 置信度=1.00

4. Euro NCAP CPD 测试场景

4.1 官方测试场景(v1.1)

场景 ID 描述 检测要求 通过条件
CPD-01 后排儿童座椅中的婴儿 检测呼吸 ≤90 秒触发报警
CPD-02 后排座椅上的幼儿 检测呼吸 + 微动 ≤90 秒触发报警
CPD-03 儿童被毛毯覆盖 穿透遮挡检测 ≤90 秒触发报警
CPD-04 儿童在脚垫/地板 角落检测 ≤90 秒触发报警
CPD-05 儿童在后备箱 扩展检测 ≤90 秒触发报警
CPD-06 非生命物体(水瓶/包) 排除误报 不触发报警

4.2 报警策略

Euro NCAP 要求:

报警等级 触发条件 报警方式
一级报警 检测到儿童存在 车内蜂鸣 + 车灯闪烁
二级报警 儿童存在 + 温度升高 空调自动开启 + 通知车主 APP
紧急报警 儿童存在 + 高温危险 自动拨打急救电话

实现代码:

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
class CPDAlertManager:
"""CPD 报警管理器"""

def __init__(self):
self.alert_levels = {
1: {"sound": True, "light": True, "app": False, "emergency": False},
2: {"sound": True, "light": True, "app": True, "emergency": False},
3: {"sound": True, "light": True, "app": True, "emergency": True}
}

def determine_alert_level(
self,
child_detected: bool,
cabin_temperature: float, # 摄氏度
duration_seconds: float
) -> int:
"""
确定报警等级

Args:
child_detected: 是否检测到儿童
cabin_temperature: 车内温度
duration_seconds: 持续时间

Returns:
alert_level: 0(无报警)、1、2、3(紧急)
"""
if not child_detected:
return 0

# 根据温度和持续时间确定等级
if cabin_temperature >= 40 or duration_seconds >= 600: # 10 分钟
return 3 # 紧急
elif cabin_temperature >= 35 or duration_seconds >= 300: # 5 分钟
return 2 # 二级
else:
return 1 # 一级

def trigger_alert(self, level: int):
"""触发报警"""
if level == 0:
return

alert_config = self.alert_levels[level]

if alert_config["sound"]:
print("🔊 触发声光报警")
if alert_config["light"]:
print("💡 触发灯光闪烁")
if alert_config["app"]:
print("📱 发送 APP 通知")
if alert_config["emergency"]:
print("📞 拨打急救电话")

5. 实车部署案例

5.1 Volvo EX90

全球首款量产雷达 CPD 系统

“Volvo has pioneered the first radar-based CPD system, set for its introduction on the EX90 SUV, which will leverage three 60GHz radar sensors.”

—— ABI Research, 2023

配置:

  • 3 × 60GHz 雷达(Infineon 方案)
  • 覆盖前排 + 后排 + 后备箱
  • 与车内摄像头融合

5.2 市场预测

ABI Research 预测:

“Vehicular Child Presence Detection to Drive 3.5 Million 60GHz Automotive Radar Shipments in 2030.”


6. IMS 开发建议

6.1 硬件选型

优先级 方案 适用场景 成本
P0 TI AWR6843AOP 紧凑型车、单雷达覆盖 中等
P1 Infineon BGT60TR13C × 2 中型车、分区检测 中等
P2 多雷达 + 摄像头融合 大型车、Euro NCAP 高分 较高

6.2 算法开发优先级

优先级 算法模块 开发周期
P0 呼吸频率提取 2 周
P0 儿童/成人分类 1 周
P1 心跳频率提取 2 周
P1 多雷达数据融合 3 周
P2 雷达 + 摄像头融合 4 周

7. 参考资料

官方文档

  1. Euro NCAP Occupant Monitoring Protocol v1.1 - October 2025
    链接:https://cdn.euroncap.com/cars/assets/euro_ncap_protocol_safe_driving_occupant_monitoring_v11.pdf

  2. Infineon 60GHz Radar for In-Cabin Monitoring
    链接:https://www.infineon.com/application/automotive-in-cabin-radar

  3. TI AWR6843AOP Radar Sensor
    链接:https://www.ti.com/video/6317358972112

行业报告

  1. ABI Research: 60GHz Radar CPD Market - 2023
    链接:https://www.abiresearch.com/press/vehicular-child-presence-detection-to-drive-35-million-60ghz-automotive-radar-shipments-in-2030

  2. Cadence: Radar-based Vital Signs Detection for In-cabin Applications
    链接:https://www.cadence.com/en_US/home/resources/white-papers/radar-based-vital-signs-detection-for-in-cabin-wp.html


本文由 OpenClaw 研究系统自动生成,基于 2026-05-31 最新搜索结果。


60GHz雷达CPD方案:穿透遮挡的生命体征检测
https://dapalm.com/2026/05/31/2026-05-31-60GHz雷达CPD方案:穿透遮挡的生命体征检测/
作者
Mars
发布于
2026年5月31日
许可协议