Euro NCAP 2026 CPD儿童存在检测:从60GHz雷达到UWB的技术路线

引言:2026年强制要求

Euro NCAP 2026关键变化

“Child Presence Detection (CPD) will become mandatory in 2026.”

核心要求

  • 必须使用直接检测方法确认儿童存在
  • 间接检测(如压力传感器)不再得分
  • 必须覆盖所有座椅位置

一、CPD技术分类

1.1 直接检测 vs 间接检测

方法 类型 Euro NCAP得分
摄像头 直接 ✅ 可得分
雷达 直接 ✅ 可得分
UWB 直接 ✅ 可得分
压力传感器 间接 ❌ 不得分
车门开关检测 间接 ❌ 不得分

1.2 技术路线对比

技术 优势 劣势 适用场景
摄像头 成本低、功能多 受光线影响 DMS+OMS融合
60GHz雷达 穿透性强、全天候 分辨率有限 独立CPD
UWB雷达 高精度、低功耗 成本较高 高端车型
TOF深度 3D信息丰富 成本高 多功能融合

二、60GHz雷达方案

2.1 工作原理

生命体征检测原理

1
2
3
4
5
6
7
8
9
10
60GHz雷达信号

发射电磁波 → 反射 → 接收

解析微动信号:
├── 呼吸运动(0.1-0.5Hz)
│ 胸部起伏 → 相位变化

└── 心跳振动(0.8-2.0Hz)
心脏跳动 → 微小位移

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

class RadarCPD:
"""
60GHz雷达CPD检测
"""
def __init__(self):
# 雷达参数
self.center_freq = 60e9 # 60GHz
self.bandwidth = 7e9 # 7GHz带宽
self.sample_rate = 1000 # 1kHz

# 信号处理器
self.bandpass_respiratory = signal.butter(
4, [0.1, 0.5], btype='band', fs=self.sample_rate
)
self.bandpass_heart = signal.butter(
4, [0.8, 2.0], btype='band', fs=self.sample_rate
)

def detect_vital_signs(self, radar_data):
"""
检测生命体征
"""
# 1. 解调获取相位信号
phase_signal = self.demodulate(radar_data)

# 2. 提取呼吸信号
respiratory_signal = signal.filtfilt(
self.bandpass_respiratory[0],
self.bandpass_respiratory[1],
phase_signal
)

# 3. 提取心跳信号
heart_signal = signal.filtfilt(
self.bandpass_heart[0],
self.bandpass_heart[1],
phase_signal
)

# 4. 计算呼吸频率
respiratory_rate = self.compute_frequency(respiratory_signal)

# 5. 计算心率
heart_rate = self.compute_frequency(heart_signal)

# 6. 判断是否有人
is_presence = self.check_presence(respiratory_signal, heart_signal)

return {
'presence': is_presence,
'respiratory_rate': respiratory_rate,
'heart_rate': heart_rate
}

def demodulate(self, radar_data):
"""
解调雷达信号
"""
# 正交解调
I = np.real(radar_data)
Q = np.imag(radar_data)

# 相位计算
phase = np.arctan2(Q, I)

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

return phase_unwrapped

def compute_frequency(self, signal_data):
"""
计算主频率
"""
# FFT
fft_result = np.fft.fft(signal_data)
freqs = np.fft.fftfreq(len(signal_data), 1/self.sample_rate)

# 找主频
positive_freqs = freqs[:len(freqs)//2]
magnitude = np.abs(fft_result[:len(fft_result)//2])

main_freq_idx = np.argmax(magnitude)
main_freq = positive_freqs[main_freq_idx]

# 转换为BPM
bpm = main_freq * 60

return bpm

def check_presence(self, respiratory_signal, heart_signal):
"""
判断是否有人
"""
# 能量阈值
respiratory_energy = np.sum(respiratory_signal**2)
heart_energy = np.sum(heart_signal**2)

# 判断条件
if respiratory_energy > 0.1 and heart_energy > 0.01:
return True

return False

2.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
71
72
73
class MultiTargetCPD:
"""
多目标CPD检测
"""
def __init__(self, num_seats=5):
self.num_seats = num_seats
self.detectors = [RadarCPD() for _ in range(num_seats)]

def scan_cabin(self, radar_frame):
"""
扫描整个座舱
"""
results = []

# 对每个座椅区域进行分析
for seat_id in range(self.num_seats):
# 提取该座椅的雷达数据
seat_data = self.extract_seat_region(radar_frame, seat_id)

# 检测生命体征
vital_signs = self.detectors[seat_id].detect_vital_signs(seat_data)

results.append({
'seat_id': seat_id,
'presence': vital_signs['presence'],
'respiratory_rate': vital_signs['respiratory_rate'],
'heart_rate': vital_signs['heart_rate'],
'is_child': self.classify_child(vital_signs)
})

return results

def classify_child(self, vital_signs):
"""
判断是否为儿童
"""
# 儿童特征:
# 1. 呼吸频率较高(20-30次/分)
# 2. 心率较高(80-120次/分)
# 3. 运动幅度较小

rr = vital_signs['respiratory_rate']
hr = vital_signs['heart_rate']

if rr > 20 and rr < 35 and hr > 80 and hr < 130:
return True

return False

def extract_seat_region(self, radar_frame, seat_id):
"""
提取座椅区域的雷达数据
"""
# 座椅位置映射
seat_regions = {
0: {'range': (0.5, 1.2), 'angle': (-30, -10)}, # 驾驶座
1: {'range': (0.5, 1.2), 'angle': (10, 30)}, # 副驾
2: {'range': (1.0, 1.8), 'angle': (-20, 0)}, # 后左
3: {'range': (1.0, 1.8), 'angle': (0, 20)}, # 后右
4: {'range': (1.2, 2.0), 'angle': (-10, 10)} # 后中
}

region = seat_regions[seat_id]

# 提取数据
range_mask = (radar_frame['range'] >= region['range'][0]) & \
(radar_frame['range'] <= region['range'][1])
angle_mask = (radar_frame['angle'] >= region['angle'][0]) & \
(radar_frame['angle'] <= region['angle'][1])

seat_data = radar_frame[range_mask & angle_mask]

return seat_data

三、UWB雷达方案

3.1 NOVELDA UWB传感器

技术特点

特性 参数
频率范围 6-8GHz
分辨率 2cm
功耗 <50mW
检测距离 0.5-3m

3.2 技术优势

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
UWB雷达优势

┌─────────────────────────────────┐
│ 高分辨率 │
│ ├── 2cm空间分辨率 │
│ ├── 精确位置检测 │
│ └── 多目标区分 │
└─────────────────────────────────┘

┌─────────────────────────────────┐
│ 穿透性强 │
│ ├── 穿透座椅 │
│ ├── 穿透毛毯 │
│ └── 覆盖脚窝区域 │
└─────────────────────────────────┘

┌─────────────────────────────────┐
│ 低功耗 │
│ ├── 工作电流<10mA
│ ├── 支持常开监控 │
│ └── 不影响电池寿命 │
└─────────────────────────────────┘

3.3 Infineon BGT60TR13C

集成方案

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
class InfineonCPD:
"""
Infineon 60GHz雷达CPD方案
"""
def __init__(self):
self.radar = BGT60TR13C()
self.ml_model = load_model('cpd_classifier.tflite')

def detect(self, frame):
"""
检测儿童存在
"""
# 1. 获取雷达数据
radar_data = self.radar.acquire()

# 2. 提取特征
features = self.extract_features(radar_data)

# 3. ML分类
prediction = self.ml_model.predict(features)

# 4. 后处理
if prediction['class'] == 'child':
self.trigger_alert()

return prediction

四、Euro NCAP测试协议

4.1 测试场景

场景 测试内容 通过标准
正常坐姿 儿童正常坐在座椅上 100%检出
被遮挡 毛毯/衣物覆盖 100%检出
脚窝位置 儿童藏在脚窝 95%检出
空座 无乘客 <5%误报
物品误检 水瓶/背包等 <5%误报

4.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
class CPDAlertSystem:
"""
CPD报警系统
"""
def __init__(self):
self.alert_levels = {
'level_1': {
'delay': 0, # 立即
'action': 'horn_honk',
'duration': 5
},
'level_2': {
'delay': 60, # 1分钟后
'action': 'send_notification',
'recipients': ['owner', 'emergency']
},
'level_3': {
'delay': 300, # 5分钟后
'action': 'call_emergency',
'service': '112'
}
}

def trigger_alert(self, child_detected):
"""
触发报警
"""
if not child_detected:
return

# Level 1: 车辆喇叭
self.execute_alert(self.alert_levels['level_1'])

# 启动定时器
threading.Timer(
self.alert_levels['level_2']['delay'],
lambda: self.execute_alert(self.alert_levels['level_2'])
).start()

threading.Timer(
self.alert_levels['level_3']['delay'],
lambda: self.execute_alert(self.alert_levels['level_3'])
).start()

五、方案选择建议

5.1 成本分析

方案 硬件成本 开发成本 总成本
摄像头 $15 $50k
60GHz雷达 $25 $30k
UWB雷达 $35 $20k 中高
多传感器融合 $50+ $80k

5.2 技术路线

短期方案(已有摄像头):

1
2
3
4
使用现有OMS摄像头
├── 成本最低
├── 开发快
└── 受光线限制

中期方案

1
2
3
4
60GHz雷达
├── 全天候工作
├── 覆盖脚窝
└── 技术成熟

高端方案

1
2
3
4
摄像头+雷达融合
├── 最高可靠性
├── 多功能
└── 成本较高

六、总结

6.1 关键结论

结论 说明
直接检测必须 间接检测不再得分
雷达穿透性 覆盖脚窝等遮挡区域
儿童分类 基于生命体征特征
分级报警 鸣笛→通知→紧急呼叫

6.2 实施建议

  1. 评估现有系统:摄像头可复用?
  2. 选择技术路线:根据成本和时间
  3. 数据收集:真实儿童测试数据
  4. 验证测试:按Euro NCAP协议

参考文献

  1. Euro NCAP. “CPD Test and Assessment Protocol v1.3.” 2025.
  2. Infineon. “In-Cabin Monitoring System.” 2025.
  3. NOVELDA. “UWB Child Presence Sensor.” 2025.
  4. ABI Research. “60GHz Automotive Radar Shipments.” 2023.

本文是IMS Euro NCAP系列文章之一,上一篇:Euro NCAP DSM测试协议解读


Euro NCAP 2026 CPD儿童存在检测:从60GHz雷达到UWB的技术路线
https://dapalm.com/2026/03/13/2026-03-13-Euro-NCAP-2026-CPD儿童存在检测-从60GHz雷达到UWB的技术路线/
作者
Mars
发布于
2026年3月13日
许可协议