60GHz雷达CPD儿童检测:穿透遮挡的生命守护

60GHz雷达CPD儿童检测:穿透遮挡的生命守护

Euro NCAP 2026 CPD强制要求

从2026年开始,Euro NCAP将儿童遗留检测(Child Presence Detection, CPD)列为强制评分项,未配备CPD系统的车型将无法获得五星安全评级。

CPD核心要求:

检测项 要求 说明
检测对象 新生儿到6岁儿童 最小体重2.5kg
检测位置 所有座椅 包括第三排
检测条件 车辆熄火后 锁车后自动启动
响应时间 ≤90秒 发现后90秒内告警
告警方式 车内+远程 车内蜂鸣+手机推送

技术挑战:

  1. 遮挡穿透:儿童可能被座椅、衣物、毯子遮挡
  2. 微小目标:新生儿体积小、呼吸微弱
  3. 宠物区分:需区分儿童和宠物
  4. 温度适应:车内温度可达60°C以上
  5. 低功耗要求:熄火后监测,电池容量有限

60GHz雷达技术优势

与其他传感器对比

传感器 穿透遮挡 精度 成本 功耗 CPD适配
60GHz雷达 ✅ 优秀 中等 ✅ 最佳方案
摄像头 ❌ 无穿透 中等 🟡 需配合
红外热成像 🟡 部分 中等 🟡 辅助方案
超声波 ✅ 部分穿透 极低 极低 ❌ 精度不足
UWB雷达 ✅ 优秀 中等 中等 ✅ 可选方案

60GHz雷达特性

参数 典型值 说明
频率 60-64GHz ISM免授权频段
分辨率 <5cm 可区分成人和儿童
穿透能力 混凝土/布料/皮革 穿透车内常见材料
探测距离 0.2-5m 覆盖车内所有位置
功耗 <0.5W 低功耗模式更低

TI IWR6843AOP方案解析

硬件架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
┌─────────────────────────────────────┐
│ TI IWR6843AOP芯片 │
├─────────────────────────────────────┤
│ 天线阵列: │
│ - 34收(MIMO) │
│ - 俯仰角±60°,方位角±60° │
├─────────────────────────────────────┤
│ RF前端: │
│ - 发射功率12dBm │
│ - 接收增益20-60dB
├─────────────────────────────────────┤
│ DSP: │
│ - C674x DSP核心 │
│ - FFT加速器 │
│ - 低功耗R4F核心 │
└─────────────────────────────────────┘

信号处理流程

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
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
"""
TI IWR6843AOP CPD信号处理流程

步骤:
1. FMCW调频连续波发射
2. 中频信号采集
3. 距离-多普勒FFT
4. 点云聚类
5. 生命体征提取
6. 儿童/成人/宠物分类
"""

import numpy as np
from scipy import signal
from typing import List, Tuple, Dict
import dataclasses

@dataclasses.dataclass
class DetectedObject:
"""检测目标"""
range: float # 距离 (m)
velocity: float # 速度 (m/s)
angle: Tuple[float, float] # (方位角, 俯仰角) (度)
rcs: float # 雷达散射截面 (dBsm)
vital_sign: float # 生命体征频率 (Hz)
classification: str # 分类结果


class TI_Radar_CPD:
"""
TI IWR6843AOP CPD检测器

硬件配置:
- 采样率:2MHz
- Chirp数:128
- 帧率:10Hz
"""

# 雷达参数
c = 3e8 # 光速
fc = 60e9 # 载频60GHz
B = 4e9 # 带宽4GHz
Tc = 50e-6 # Chirp周期50us
N_samples = 256 # 每Chirp采样数
N_chirps = 128 # 每帧Chirp数

def __init__(self):
self.calibration_data = None

def process_frame(self, adc_data: np.ndarray) -> List[DetectedObject]:
"""
处理一帧雷达数据

Args:
adc_data: ADC数据 (N_rx, N_chirps, N_samples)

Returns:
objects: 检测到的目标列表
"""
# 1. 距离FFT (快时间维度)
range_fft = self._range_fft(adc_data)

# 2. 多普勒FFT (慢时间维度)
range_doppler = self._doppler_fft(range_fft)

# 3. CFAR检测
detections = self._cfar_detection(range_doppler)

# 4. 角度估计
objects = self._angle_estimation(detections, range_doppler)

# 5. 生命体征提取
objects = self._extract_vital_signs(objects, adc_data)

# 6. 分类
objects = self._classify_objects(objects)

return objects

def _range_fft(self, adc_data: np.ndarray) -> np.ndarray:
"""
距离FFT

Returns:
range_fft: (N_rx, N_chirps, N_samples//2)
"""
# FFT
range_fft = np.fft.fft(adc_data, axis=2)

# 只取正频率部分
range_fft = range_fft[:, :, :self.N_samples // 2]

return range_fft

def _doppler_fft(self, range_fft: np.ndarray) -> np.ndarray:
"""
多普勒FFT

Returns:
range_doppler: (N_rx, N_doppler, N_range)
"""
# FFT并FFT Shift
doppler_fft = np.fft.fft(range_fft, axis=1)
doppler_fft = np.fft.fftshift(doppler_fft, axes=1)

return doppler_fft

def _cfar_detection(self, range_doppler: np.ndarray) -> List[Tuple]:
"""
CFAR恒虚警检测

Returns:
detections: [(range_idx, doppler_idx, magnitude), ...]
"""
# 取幅值
magnitude = np.abs(range_doppler)

# 平均所有接收通道
magnitude_avg = np.mean(magnitude, axis=0)

# CFAR参数
guard_cells = 2
training_cells = 8
threshold_factor = 3.0

detections = []

# 滑动窗口检测
for r in range(training_cells, magnitude_avg.shape[1] - training_cells):
for d in range(training_cells, magnitude_avg.shape[0] - training_cells):
# 训练窗均值
training_region = magnitude_avg[
d-training_cells:d+training_cells+1,
r-training_cells:r+training_cells+1
]
# 排除保护单元
noise_level = np.mean(training_region)

# 检测
if magnitude_avg[d, r] > threshold_factor * noise_level:
detections.append((r, d, magnitude_avg[d, r]))

return detections

def _angle_estimation(
self,
detections: List[Tuple],
range_doppler: np.ndarray
) -> List[DetectedObject]:
"""
角度估计(数字波束成形)
"""
objects = []

for range_idx, doppler_idx, mag in detections:
# 距离计算
distance = range_idx * self.c / (2 * self.B) * (self.N_samples / self.N_samples)

# 速度计算
velocity = doppler_idx * self.c / (2 * self.fc * self.N_chirps * self.Tc)

# 角度估计(简化版)
# 实际应使用MUSIC或ESPRIT算法
azimuth = 0.0 # 方位角
elevation = 0.0 # 俯仰角

# RCS估计
rcs = 10 * np.log10(mag)

obj = DetectedObject(
range=distance,
velocity=velocity,
angle=(azimuth, elevation),
rcs=rcs,
vital_sign=0.0,
classification='unknown'
)
objects.append(obj)

return objects

def _extract_vital_signs(
self,
objects: List[DetectedObject],
adc_data: np.ndarray
) -> List[DetectedObject]:
"""
生命体征提取

方法:提取呼吸和心跳引起的微多普勒信号
"""
for obj in objects:
# 取目标位置的时域信号
# 分析频谱(0.1-2Hz为呼吸,0.8-2Hz为心跳)

# 简化:假设检测到生命体征
obj.vital_sign = 0.3 # 0.3Hz,约18次/分呼吸

return objects

def _classify_objects(self, objects: List[DetectedObject]) -> List[DetectedObject]:
"""
目标分类

规则:
- RCS < -20dBsm:儿童
- RCS -20~-10dBsm:成人
- 无生命体征:物品/宠物
"""
for obj in objects:
if obj.vital_sign > 0.05:
if obj.rcs < -20:
obj.classification = 'child'
elif obj.rcs < -10:
obj.classification = 'adult'
else:
obj.classification = 'pet'
else:
obj.classification = 'object'

return objects


# CPD告警系统
class CPD_Alert_System:
"""
CPD告警系统

功能:
1. 车内蜂鸣告警
2. 手机App推送
3. 紧急联系人通知
"""

def __init__(self):
self.alert_level = 0 # 0: 无告警, 1: 低级, 2: 高级

def check_and_alert(self, objects: List[DetectedObject]) -> Dict:
"""
检查并发出告警

Returns:
alert_info: 告警信息
"""
# 检测儿童
children = [obj for obj in objects if obj.classification == 'child']

if len(children) > 0:
# 提升告警等级
self.alert_level = min(self.alert_level + 1, 2)

# 告警信息
alert_info = {
'alert': True,
'level': self.alert_level,
'children_count': len(children),
'locations': [(obj.range, obj.angle) for obj in children],
'timestamp': np.datetime64('now')
}

# 发送告警
if self.alert_level >= 1:
self._sound_alarm(self.alert_level)

if self.alert_level >= 2:
self._send_mobile_notification(alert_info)

return alert_info
else:
# 重置告警
self.alert_level = 0
return {'alert': False, 'level': 0}

def _sound_alarm(self, level: int):
"""车内蜂鸣"""
if level == 1:
print("[WARN] 低级告警:检测到儿童,短促蜂鸣")
elif level == 2:
print("[ALERT] 高级告警:持续蜂鸣!")

def _send_mobile_notification(self, info: Dict):
"""手机推送"""
print(f"[ALERT] 推送通知:检测到{info['children_count']}名儿童遗留车内!")


# 实时监测循环
def cpd_monitoring_loop():
"""
CPD实时监测主循环

场景:车辆熄火后启动
"""
radar = TI_Radar_CPD()
alerter = CPD_Alert_System()

# 模拟ADC数据(实际从TI DCA1000读取)
while True:
# 读取一帧数据
adc_data = np.random.randn(4, 128, 256) # 4接收通道

# 处理
objects = radar.process_frame(adc_data)

# 告警判断
alert_info = alerter.check_and_alert(objects)

if alert_info['alert']:
print(f"检测到儿童:{alert_info['children_count']}名")
for i, (dist, angle) in enumerate(alert_info['locations']):
print(f" 儿童{i+1}: 距离{dist:.2f}m, 方位角{angle[0]:.1f}°")

# 低功耗:每2秒检测一次
import time
time.sleep(2)


if __name__ == "__main__":
print("启动CPD儿童检测系统...")
# cpd_monitoring_loop()

验证测试标准

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
### CPD-01 儿童遗留检测测试

**前置条件:**
- 测试假人:Euro NCAP认证CPD假人(新生儿、6个月、1岁、3岁、6岁)
- 环境温度:-10°C ~ +60°C
- 遮挡条件:无遮挡、座椅遮挡、毯子遮挡、全遮挡

**测试步骤:**
1. 放置CPD假人到指定座椅
2. 锁车,启动CPD监测
3. 记录检测时间和告警响应

**判定条件:**
| 测试项 | 通过条件 | 失败条件 |
|--------|---------|---------|
| 检测准确率 | ≥95% | <95% |
| 响应时间 | ≤90秒 | >90秒 |
| 遮挡穿透(全遮挡) | ≥80%检测 | <80% |
| 误报率(空车) | ≤1次/24h | >1次/24h |

**预期输出:**

[00:00:30] INFO: 检测到目标,距离: 1.2m,分类: child
[00:00:30] INFO: 启动低级告警,短促蜂鸣
[00:01:00] INFO: 儿童仍在车内,升级高级告警
[00:01:05] INFO: 发送手机推送通知
[00:01:10] INFO: 告警已确认,等待响应

1

部署建议

传感器布置方案

座位数 推荐雷达数 布置位置
2座(跑车) 1个 顶棚中央
5座(轿车) 2个 B柱两侧
7座(SUV) 3个 B柱+C柱
9座(MPV) 4个 各排顶棚

功耗优化策略

模式 功耗 检测周期 适用场景
正常模式 0.5W 连续监测 有人下车后5分钟
低功耗模式 0.1W 10秒周期 熄火后5-30分钟
超低功耗模式 0.02W 30秒周期 熄火30分钟后

参考资料

  1. TI资料: IWR6843AOP Technical Reference Manual
  2. Euro NCAP: CPD Test and Assessment Protocol v1.3
  3. 4activeSystems: CPD Dummies产品手册
  4. 论文: “60-GHz Radar for Child Presence Detection in Vehicles”, IEEE Sensors 2024

总结: 60GHz雷达是Euro NCAP 2026 CPD检测的最佳方案,穿透性强、精度高、功耗低。TI IWR6843AOP是成熟量产方案,建议结合视觉辅助提升分类准确率。部署时注意功耗优化,分级监测延长续航。


60GHz雷达CPD儿童检测:穿透遮挡的生命守护
https://dapalm.com/2026/08/09/2026-08-09-60GHz-Radar-CPD-Implementation/
作者
Mars
发布于
2026年8月9日
许可协议