前言
儿童遗留车内导致的中暑死亡是全球性问题。Euro NCAP 自 2025 年起将 Child Presence Detection (CPD) 纳入评分体系,且 仅接受直接感知方案(Direct Sensing),间接检测方案不再获得积分。
60GHz 毫米波雷达凭借其穿透性强、可检测呼吸心跳、隐私友好等特性,成为 CPD 检测的主流方案。本文基于 Euro NCAP 官方协议和最新技术资料,深度解析 CPD 雷达 + 摄像头融合方案的技术细节。
一、Euro NCAP CPD 检测协议详解
1.1 检测要求概述
Euro NCAP 对 CPD 系统的核心要求:
| 要求类别 |
具体内容 |
| 检测对象 |
0-6 岁儿童 |
| 检测状态 |
睡眠、清醒、被遮挡 |
| 检测位置 |
所有座椅、儿童安全座椅、脚部区域 |
| 检测信号 |
呼吸运动(必须)、肢体运动(可选) |
| 响应时间 |
锁车后 60 秒内完成检测 |
1.2 年龄与呼吸频率要求
Euro NCAP 对不同年龄段儿童的呼吸频率检测要求:
| 年龄 |
呼吸频率 (BPM) |
检测精度要求 |
| 新生儿 |
30 BPM |
±2 BPM |
| 1 岁 |
24-30 BPM |
±2 BPM |
| 3 岁 |
20-26 BPM |
±2 BPM |
| 6 岁 |
18-22 BPM |
±2 BPM |
关键挑战: 新生儿的呼吸运动幅度极小(胸部起伏约 1-2mm),对雷达灵敏度要求极高。
1.3 遮挡场景要求
Euro NCAP 要求 CPD 系统在以下遮挡场景下仍能检测:
| 场景 |
描述 |
检测要求 |
| 毛毯遮挡 |
儿童被毛毯完全覆盖 |
必须检测 |
| 座椅遮挡 |
儿童位于后排座椅后方 |
必须检测 |
| 儿童安全座椅 |
儿童位于 CRS 内 |
必须检测 |
| 侧卧/躺倒 |
儿童身体姿势异常 |
必须检测 |
1.4 检测区域与排除区域
必须覆盖的检测区域:
- 所有座椅位置(前排、后排)
- 儿童安全座椅(前向、后向)
- 脚部区域
- 第三排座椅(如有)
排除区域:
二、60GHz 雷达 CPD 检测原理
2.1 毫米波雷达基础
60GHz 雷达特性:
| 参数 |
数值 |
说明 |
| 频率 |
60-64 GHz |
ISM 频段,免授权 |
| 波长 |
~5mm |
适合检测微小运动 |
| 带宽 |
4 GHz |
高距离分辨率(~4cm) |
| 穿透性 |
穿透毛毯、衣物 |
检测遮挡目标 |
FMCW (调频连续波) 原理:
1 2 3 4 5 6 7 8 9
| 发射信号:f_tx(t) = f_c + K*t 接收信号:f_rx(t) = f_c + K*(t-τ)
其中: - f_c: 载波频率 (60GHz) - K: 调频斜率 (Hz/s) - τ: 往返时延 (s)
距离计算:R = c*τ/2 = c*f_beat/(2*K)
|
2.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
| import numpy as np
def breathing_model(t, breath_rate_bpm, amplitude_mm=2.0): """ 呼吸运动模型 参数: t: 时间 (秒) breath_rate_bpm: 呼吸频率 (次/分钟) amplitude_mm: 胸部起伏幅度 (毫米) 返回: 胸部位移 (毫米) """ frequency = breath_rate_bpm / 60.0 return amplitude_mm * np.sin(2 * np.pi * frequency * t)
breathing_params = { 'newborn': {'rate': 30, 'amplitude': 1.5}, '1_year': {'rate': 26, 'amplitude': 2.0}, '3_year': {'rate': 22, 'amplitude': 2.5}, '6_year': {'rate': 18, 'amplitude': 3.0} }
|
雷达回波相位变化:
1 2 3 4 5 6 7 8 9 10 11 12 13
| Δφ = 4π*ΔR/λ
其中: - Δφ: 相位变化 - ΔR: 目标位移 (呼吸导致的胸部起伏) - λ: 波长 (5mm @ 60GHz)
示例: - ΔR = 2mm (呼吸幅度) - λ = 5mm - Δφ = 4π*2/5 = 1.6π ≈ 288°
因此,60GHz 雷达可以高灵敏度地检测呼吸运动。
|
2.3 信号处理流程
完整的 CPD 雷达信号处理链:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 原始 ADC 数据 ↓ Range FFT (距离维 FFT) ↓ Doppler FFT (多普勒维 FFT) ↓ MTI (动目标指示) 滤波 ↓ CFAR (恒虚警检测) ↓ 相位提取与解调 ↓ 呼吸频率估计 (FFT / AR 模型) ↓ 目标分类 (成人/儿童) ↓ CPD 警告判定
|
2.4 核心算法实现
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
| import numpy as np from scipy import signal
class CPDRadarProcessor: def __init__(self, sample_rate=1000, num_samples=256): self.sample_rate = sample_rate self.num_samples = num_samples def range_fft(self, adc_data): """距离维 FFT""" return np.fft.fft(adc_data, axis=1) def doppler_fft(self, range_data): """多普勒维 FFT""" return np.fft.fftshift(np.fft.fft(range_data, axis=0), axes=0) def extract_phase(self, range_doppler, target_bin): """提取目标位置的相位""" return np.angle(range_doppler[target_bin, :]) def unwrap_phase(self, phase): """相位解缠""" return np.unwrap(phase) def estimate_breathing_rate(self, phase_signal, duration_sec): """估计呼吸频率""" phase_detrend = signal.detrend(phase_signal) n = len(phase_detrend) freq = np.fft.fftfreq(n, 1.0/self.sample_rate) spectrum = np.abs(np.fft.fft(phase_detrend)) breath_band = (freq >= 0.1) & (freq <= 1.0) breath_spectrum = spectrum[breath_band] breath_freq = freq[breath_band] peak_idx = np.argmax(breath_spectrum) breath_rate_hz = np.abs(breath_freq[peak_idx]) breath_rate_bpm = breath_rate_hz * 60 return breath_rate_bpm, breath_spectrum, breath_freq def classify_occupant(self, breath_rate_bpm): """根据呼吸频率分类乘员""" if breath_rate_bpm >= 28: return 'infant', breath_rate_bpm elif breath_rate_bpm >= 24: return 'toddler', breath_rate_bpm elif breath_rate_bpm >= 20: return 'child', breath_rate_bpm else: return 'adult', breath_rate_bpm
processor = CPDRadarProcessor(sample_rate=100, num_samples=1024)
t = np.linspace(0, 10, 1000) breathing_signal = 2.0 * np.sin(2 * np.pi * 0.4 * t) noise = 0.1 * np.random.randn(len(t)) simulated_phase = breathing_signal + noise
breath_rate, spectrum, freq = processor.estimate_breathing_rate( simulated_phase, duration_sec=10.0 )
print(f"检测到呼吸频率: {breath_rate:.1f} BPM") occupant_type, _ = processor.classify_occupant(breath_rate) print(f"乘员分类: {occupant_type}")
|
三、雷达 + 摄像头融合方案
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
| ┌─────────────────┐ ┌─────────────────┐ │ 60GHz 雷达 │ │ IR/RGB 摄像头 │ │ (呼吸/心跳检测)│ │ (姿态/位置检测)│ └────────┬────────┘ └────────┬────────┘ │ │ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ │ 雷达信号处理 │ │ 视觉感知 │ │ - Range/Doppler│ │ - 人脸检测 │ │ - 相位提取 │ │ - 姿态估计 │ │ - 呼吸频率估计 │ │ - 遮挡检测 │ └────────┬────────┘ └────────┬────────┘ │ │ └───────────┬───────────┘ │ ▼ ┌─────────────────┐ │ 融合决策层 │ │ - 目标关联 │ │ - 置信度融合 │ │ - 最终判定 │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ CPD 输出 │ │ - 儿童检测 │ │ - 位置报告 │ │ - 警告触发 │ └─────────────────┘
|
3.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
| class CPDFusion: def __init__(self): self.radar_weight = 0.6 self.camera_weight = 0.4 def fuse_detections(self, radar_result, camera_result): """ 融合雷达和摄像头检测结果 参数: radar_result: {'detected': bool, 'confidence': float, 'breath_rate': float} camera_result: {'detected': bool, 'confidence': float, 'position': tuple} 返回: {'detected': bool, 'confidence': float, 'type': str} """ weighted_conf = ( self.radar_weight * radar_result['confidence'] + self.camera_weight * camera_result['confidence'] ) if radar_result['detected'] and camera_result['detected']: detected = True final_conf = min(weighted_conf + 0.2, 1.0) elif radar_result['detected']: detected = True final_conf = radar_result['confidence'] * 0.9 elif camera_result['detected']: detected = True final_conf = camera_result['confidence'] * 0.5 else: detected = False final_conf = 0.0 return { 'detected': detected, 'confidence': final_conf, 'breath_rate': radar_result.get('breath_rate'), 'position': camera_result.get('position') }
|
3.3 融合优势
| 维度 |
单一雷达 |
单一摄像头 |
雷达+摄像头融合 |
| 遮挡鲁棒性 |
★★★★★ |
★★☆☆☆ |
★★★★★ |
| 位置精度 |
★★★☆☆ |
★★★★☆ |
★★★★★ |
| 分类准确 |
★★★★☆ |
★★★☆☆ |
★★★★★ |
| 隐私保护 |
★★★★★ |
★★☆☆☆ |
★★★★☆ |
| 成本 |
★★★☆☆ |
★★★★☆ |
★★☆☆☆ |
四、部署架构方案
4.1 传感器配置
典型 CPD 系统传感器配置:
| 传感器 |
数量 |
安装位置 |
视场角 |
| 60GHz 雷达 |
1-2 |
车顶中控台 |
120°×60° |
| IR 摄像头 |
1 |
车顶中控台 |
120° |
| UWB 雷达(可选) |
1-4 |
座椅下方 |
全向 |
4.2 计算平台适配
Qualcomm QCS8255 部署方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| void range_doppler_processing( complex_float *adc_data, complex_float *range_doppler, int num_chirps, int num_samples ) { for (int chirp = 0; chirp < num_chirps; chirp++) { fft_f32(&adc_data[chirp * num_samples], &range_doppler[chirp * num_samples], num_samples); } for (int bin = 0; bin < num_samples; bin++) { fft_f32(&range_doppler[bin], &range_doppler[bin], num_chirps); } }
|
TI IWR6843AOP 部署方案:
| 参数 |
数值 |
| 天线配置 |
3Tx / 4Rx |
| 最大距离 |
10m |
| 距离分辨率 |
4cm |
| 速度分辨率 |
0.1m/s |
| 功耗 |
<4W |
| 工作温度 |
-40°C ~ +85°C |
4.3 软件架构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| CPD 软件架构 ├── 驱动层 │ ├── 雷达驱动 (SPI/I2C) │ ├── 摄像头驱动 (MIPI CSI) │ └── GPIO 中断 ├── 中间件层 │ ├── 雷达 DSP 库 │ ├── 视觉推理引擎 (SNPE/TIDL) │ └── 融合算法库 ├── 应用层 │ ├── CPD 检测服务 │ ├── 警告管理服务 │ └── HMI 输出服务 └── 接口层 ├── CAN/LIN 总线 ├── Ethernet (SOME/IP) └── OTA 升级接口
|
五、性能指标与测试场景
5.1 Euro NCAP CPD 测试场景
完整测试场景清单(部分):
| 场景编号 |
年龄 |
状态 |
遮挡 |
预期结果 |
| CPD-01 |
新生儿 |
睡眠 |
无 |
检测呼吸 (30±2 BPM) |
| CPD-02 |
1岁 |
睡眠 |
毛毯 |
检测呼吸 (26±2 BPM) |
| CPD-03 |
3岁 |
清醒 |
无 |
检测呼吸+运动 |
| CPD-04 |
6岁 |
睡眠 |
座椅后 |
检测呼吸 (18±2 BPM) |
| CPD-05 |
新生儿 |
睡眠 |
CRS内 |
检测呼吸 (30±2 BPM) |
| CPD-06 |
多儿童 |
混合 |
无 |
检测数量+位置 |
5.2 性能指标要求
| 指标 |
Euro NCAP 要求 |
行业最佳实践 |
| 检测率 |
≥95% |
≥99% |
| 误检率 |
≤5% |
≤1% |
| 响应时间 |
≤60s |
≤10s |
| 呼吸频率误差 |
≤2 BPM |
≤1 BPM |
| 工作温度 |
-20°C ~ +60°C |
-40°C ~ +85°C |
5.3 鲁棒性测试
干扰场景测试:
| 干扰类型 |
测试条件 |
预期结果 |
| 强光干扰 |
阳光直射 |
正常工作 |
| 振动干扰 |
车辆怠速 |
正常工作 |
| 电磁干扰 |
手机通话 |
正常工作 |
| 多目标干扰 |
3 名成人 + 1 儿童 |
正确识别儿童 |
| 宠物干扰 |
宠物在车内 |
不误触发 |
六、IMS 开发落地指导
6.1 开发优先级
阶段一:基础能力(Q1-Q2)
| 任务 |
优先级 |
工作量 |
依赖 |
| 雷达驱动集成 |
P0 |
2周 |
硬件到位 |
| Range/Doppler FFT |
P0 |
1周 |
DSP 库 |
| 相位提取与解调 |
P0 |
2周 |
信号处理算法 |
| 呼吸频率估计 |
P0 |
2周 |
频谱分析 |
阶段二:融合能力(Q3)
| 任务 |
优先级 |
工作量 |
依赖 |
| 摄像头集成 |
P0 |
1周 |
驱动到位 |
| 人脸/姿态检测 |
P0 |
2周 |
视觉模型 |
| 融合算法实现 |
P0 |
2周 |
多传感器同步 |
| Euro NCAP 测试场景 |
P0 |
2周 |
测试环境 |
阶段三:优化与合规(Q4)
| 任务 |
优先级 |
工作量 |
依赖 |
| 性能优化(响应<10s) |
P0 |
2周 |
DSP 优化 |
| 误检率优化(<1%) |
P0 |
2周 |
场景测试 |
| Euro NCAP 合规认证 |
P0 |
4周 |
认证机构 |
6.2 技术选型建议
雷达选型对比:
| 方案 |
优势 |
劣势 |
适用场景 |
| TI IWR6843AOP |
性能强、文档全 |
成本较高 |
中高端车型 |
| Infineon BGT60ATR24 |
成本低、集成度高 |
性能一般 |
经济型车型 |
| NOVELIC ACAM |
车规级、成熟方案 |
需定制 |
商用车 |
摄像头选型:
| 方案 |
优势 |
劣势 |
适用场景 |
| IR 摄像头 |
夜间有效、隐私 |
成本较高 |
全场景 |
| RGB-IR |
一颗多用途 |
性能折中 |
成本敏感 |
6.3 常见问题与解决方案
| 问题 |
原因 |
解决方案 |
| 误检宠物 |
呼吸频率接近儿童 |
增加运动模式识别 |
| 遮挡场景漏检 |
信号衰减 |
优化天线布局、增加雷达数量 |
| 高温误触发 |
热噪声增加 |
温度补偿算法 |
| 多目标混淆 |
目标距离近 |
提高距离分辨率 |
七、参考资料
Euro NCAP Child Presence Detection Protocol v1.0
TI IWR6843AOP Technical Reference Manual
NOVELIC ACAM 60GHz Radar
ABI Research: Vehicular Child Presence Detection Market
IEEE: BSENSE In-vehicle Child Detection (ACM SenSys 2024)
总结
Euro NCAP 2026 CPD 检测要求为 IMS 开发带来新的挑战和机遇。关键要点:
- 直接感知强制要求:仅接受雷达、摄像头等直接检测方案
- 60GHz 雷达优势:穿透性强、可检测呼吸心跳、隐私友好
- 融合方案最优:雷达 + 摄像头融合提升鲁棒性和准确性
- 开发优先级:先实现雷达呼吸检测,再逐步集成融合能力
对于 IMS 团队,建议优先实现基于 60GHz 雷达的呼吸检测方案,再逐步集成摄像头融合能力,最终满足 Euro NCAP 合规要求。
发布日期: 2026-04-16
标签: Euro NCAP, CPD, 儿童检测, 60GHz雷达, 传感器融合
适用平台: Qualcomm QCS8255, TI IWR6843AOP, NOVELIC ACAM