多站UWB雷达:CPD儿童检测从单节点到协同感知的量产跃迁

Calterah技术访谈深度解读 — 当UWB数字钥匙硬件复用为儿童生命体征传感器,多站协同如何解决单节点盲区、遮挡和分辨率瓶颈

背景与核心问题

Euro NCAP 2026将CPD(Child Presence Detection)纳入评分体系后,车企面临一个现实问题:如何在隐私合规前提下,可靠检测车内被遗忘的儿童?

摄像头方案因隐私问题受限于法规,红外方案在毯子遮挡下失效。UWB雷达凭借穿透性、微动检测能力和数字钥匙硬件复用三大优势,成为CPD的主流技术路线。

但单节点(monostatic)UWB存在固有缺陷:

  • 盲区:一个传感器视角无法覆盖所有座椅位置
  • 遮挡:儿童被座椅遮挡时信号衰减严重
  • 分辨率有限:难以区分儿童座椅与实际儿童
  • 多径衰落:车内金属表面造成信号干扰

Calterah的Yaohui Liu在AutoSens访谈中详细阐述了**多站UWB(Multistatic UWB)**方案如何系统性地解决这些问题。

多站UWB技术架构

核心原理

单节点 vs 多站对比

技术维度 单节点UWB 多站UWB
角分辨率 单视角推断,精度受限 多视角三角测量,精度显著提升
遮挡鲁棒性 被遮挡时信号丢失 一个节点遮挡,其他节点仍可见
多径衰落 单路径衰落概率高 不同几何路径去相关,衰落不相关
目标分离 难以区分儿童座椅和儿童 多角度观测,空间分离能力强
检测置信度 单次观测,置信度有限 多角度交叉验证,置信度高
硬件成本 1个锚节点 3-4个锚节点(复用数字钥匙硬件)

关键技术:IEEE 802.15.4ab同步

多站UWB的核心挑战是分布式节点间的精确同步。Calterah采用IEEE 802.15.4ab标准定义的空口同步机制:

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
"""
多站UWB同步与数据融合仿真
基于IEEE 802.15.4ab空口同步协议

硬件配置:
- Calterah Alps系列 UWB芯片
- 2T4R 时分MIMO(2发射 + 4接收)
- 同步精度要求:< 1ns(皮秒级时间精度)
- 工作频段:6-8 GHz UWB
"""

import numpy as np
from dataclasses import dataclass
from typing import List, Tuple

@dataclass
class UW BAnchor:
"""UWB锚节点定义"""
anchor_id: int
position: np.ndarray # 3D位置 (x, y, z) in meters
is_transmitter: bool
is_receiver: bool
sync_offset_ns: float = 0.0 # 同步偏移

@dataclass
class CPDTarget:
"""CPD检测目标"""
position: np.ndarray
breathing_rate: float # breaths per minute
chest_displacement_mm: float # 胸部位移幅度 mm
is_child: bool

class MultistaticUWBCPD:
"""
多站UWB儿童存在检测系统

基于Calterah Alps芯片 + IEEE 802.15.4ab同步
"""

def __init__(self, anchors: List[UW BAnchor]):
self.anchors = anchors
self.sync_precision_ns = 0.5 # 同步精度 0.5ns
self.frequency = 7.5e9 # 7.5 GHz 中心频率
self.bandwidth = 500e6 # 500 MHz 带宽

def compute_bistatic_range(
self, tx_pos: np.ndarray, rx_pos: np.ndarray, target_pos: np.ndarray
) -> float:
"""
计算双站距离(发射-目标-接收路径长度)

Args:
tx_pos: 发射节点位置
rx_pos: 接收节点位置
target_pos: 目标位置

Returns:
bistatic_range: 双站距离 (m)
"""
path_tx = np.linalg.norm(target_pos - tx_pos)
path_rx = np.linalg.norm(rx_pos - target_pos)
return path_tx + path_rx

def localize_target(
self,
measurements: List[Tuple[int, int, float]]
) -> np.ndarray:
"""
多站三角定位

Args:
measurements: [(tx_id, rx_id, bistatic_range), ...]

Returns:
position: 目标3D位置估计
"""
from scipy.optimize import least_squares

def residuals(pos):
res = []
for tx_id, rx_id, measured_range in measurements:
tx = self.anchors[tx_id]
rx = self.anchors[rx_id]
predicted = self.compute_bistatic_range(
tx.position, rx.position, pos
)
res.append(predicted - measured_range)
return np.array(res)

# 初始估计:车内中心
x0 = np.array([1.5, 0.0, 0.5])
result = least_squares(residuals, x0)
return result.x

def detect_breathing(
self,
phase_signal: np.ndarray,
fs: float = 24e6
) -> dict:
"""
从UWB相位信号中提取呼吸频率

基于微多普勒分析:
- 成人呼吸: 12-20 bpm, 胸部位移 4-12mm
- 婴儿呼吸: 30-60 bpm, 胸部位移 2-5mm
- 心跳: 60-150 bpm, 胸部位移 0.2-0.5mm

Args:
phase_signal: 相位信号序列
fs: 采样率

Returns:
dict: 呼吸频率、心率、置信度
"""
from scipy.signal import find_peaks, butter, filtfilt

# 带通滤波:0.1-2 Hz (覆盖呼吸+心跳)
nyq = fs / 2
b, a = butter(4, [0.1/nyq, 2.0/nyq], btype='band')
filtered = filtfilt(b, a, phase_signal)

# FFT提取频率成分
fft = np.fft.rfft(filtered)
freqs = np.fft.rfftfreq(len(filtered), 1/fs)
magnitude = np.abs(fft)

# 呼吸频段 (0.2-1.0 Hz = 12-60 bpm)
breath_mask = (freqs >= 0.2) & (freqs <= 1.0)
breath_freq = freqs[breath_mask][np.argmax(magnitude[breath_mask])]
breath_rate_bpm = breath_freq * 60

# 心跳频段 (1.0-2.5 Hz = 60-150 bpm)
heart_mask = (freqs >= 1.0) & (freqs <= 2.5)
if np.any(magnitude[heart_mask] > 0.1 * np.max(magnitude)):
heart_freq = freqs[heart_mask][np.argmax(magnitude[heart_mask])]
heart_rate_bpm = heart_freq * 60
else:
heart_rate_bpm = None

# 判断是否为儿童
is_child = breath_rate_bpm > 25 # 婴儿/儿童呼吸频率 > 25 bpm

# 置信度评估
snr = np.max(magnitude[breath_mask]) / np.mean(magnitude)
confidence = min(1.0, snr / 10.0)

return {
'breathing_rate_bpm': breath_rate_bpm,
'heart_rate_bpm': heart_rate_bpm,
'is_child': is_child,
'confidence': confidence,
'snr_db': 10 * np.log10(snr)
}


# ==================== 实际测试 ====================
if __name__ == "__main__":
# 车内UWB锚节点布局(复用数字钥匙硬件)
# 典型位置:前中控、左B柱、右B柱、后中控
anchors = [
UW BAnchor(0, np.array([2.0, 0.0, 1.2]), True, True), # 前中控
UW BAnchor(1, np.array([0.5, -0.8, 1.0]), False, True), # 左B柱
UW BAnchor(2, np.array([0.5, 0.8, 1.0]), False, True), # 右B柱
UW BAnchor(3, np.array([0.0, 0.0, 1.1]), True, False), # 后中控
]

cpd = MultistaticUWBCPD(anchors)

# 模拟儿童位置(后排左侧座椅)
child = CPDTarget(
position=np.array([0.8, -0.5, 0.3]),
breathing_rate=35, # 婴儿呼吸 35 bpm
chest_displacement_mm=3.0,
is_child=True
)

# 模拟多站测量
measurements = []
for i, tx in enumerate(anchors):
if not tx.is_transmitter:
continue
for j, rx in enumerate(anchors):
if not rx.is_receiver or i == j:
continue
# 添加测量噪声
true_range = cpd.compute_bistatic_range(
tx.position, rx.position, child.position
)
measured = true_range + np.random.normal(0, 0.02) # 2cm噪声
measurements.append((i, j, measured))

# 定位
estimated_pos = cpd.localize_target(measurements)
error = np.linalg.norm(estimated_pos - child.position)
print(f"真实位置: {child.position}")
print(f"估计位置: {estimated_pos}")
print(f"定位误差: {error*100:.1f} cm")

# 模拟呼吸信号
t = np.linspace(0, 10, 2400) # 10秒, 240Hz
breath_signal = 3.0 * np.sin(2 * np.pi * 35/60 * t) # 35 bpm
noise = np.random.normal(0, 0.5, len(t))
phase_signal = breath_signal + noise

result = cpd.detect_breathing(phase_signal, fs=240)
print(f"\n--- 生命体征检测结果 ---")
print(f"呼吸频率: {result['breathing_rate_bpm']:.1f} bpm")
print(f"心率: {result['heart_rate_bpm']}")
print(f"判断为儿童: {result['is_child']}")
print(f"置信度: {result['confidence']:.2f}")
print(f"信噪比: {result['snr_db']:.1f} dB")

Calterah Alps芯片技术参数

参数 规格 说明
芯片型号 Alps系列 车规级AEC-Q100
MIMO配置 2T4R 时分MIMO 2发射 + 4接收,等效8阵元虚拟阵列
工作频段 6-8 GHz UWB 兼容中国ch8/9/10和海外ch9/10/12
带宽 500 MHz 分辨率约30cm
时间精度 皮秒级 可检测mm级胸部位移
同步机制 IEEE 802.15.4ab 空口同步,多节点协同
功耗 < 100mW 适合常电工作
复用场景 数字钥匙 + CPD + OMS 硬件零边际成本

频谱挑战

Calterah访谈中提到的频谱问题是UWB CPD量产的最大非技术障碍:

地区 可用信道 带宽 风险
中国 Ch 8, 9, 10 拼接更宽 6G分配可能压缩
海外 Ch 9, 10, 12 带宽受限 各国分配不一致
美国 Part 15限制 功率受限 FCC可能调整
欧洲 CEPT协调中 不确定性高 6GHz共存问题

IMS开发启示: 算法层面需要支持多信道自适应切换,不能硬编码单一信道方案。

Euro NCAP CPD评分要求(2026)

检测场景 通过条件 检测时限
后排婴儿座椅中的婴儿 检测到呼吸 ≤ 10秒
毯子覆盖下的儿童 穿透检测 ≤ 10秒
后排熟睡儿童 位置无关检测 ≤ 10秒
车辆锁闭后 全程检测 持续监测

CUPRA Raval评分实例: Euro NCAP 2026年9月最新评估显示,Raval未配备CPD系统,在Safe Driving部分失分。这说明CPD在2026年评估中已成为影响星级的关键因素。

多站UWB vs 其他CPD方案

方案 原理 穿透性 隐私 成本 量产状态
多站UWB 无线电波微动检测 ✅ 优 ✅ 无图像 ✅ 复用钥匙硬件 2026量产中
60GHz mmWave 高频雷达 ❌ 不穿毯 ✅ ⚠️ 专用芯片 部分量产
红外热成像 温度分布 ❌ 不穿遮挡 ✅ ⚠️ 较高 少量量产
车内摄像头 视觉识别 ❌ ❌ 隐私问题 ✅ 低 法规受限

IMS开发落地指导

1. 硬件架构建议

2. 算法开发优先级

优先级 模块 输入 输出 性能要求
P0 呼吸频率提取 多站相位信号 频率+bpm 误差<2bpm
P0 儿童分类 呼吸频率+位移幅度 is_child 准确率>95%
P1 多站定位 双站距离测量集 3D位置 误差<20cm
P1 遮挡补偿 多站信号质量 置信度 动态降权
P2 心率提取 高频相位成分 heart_rate 误差<5bpm
P2 多径抑制 原始信号 滤波信号 SNR>10dB

3. 部署芯片适配

芯片平台 UWB支持 CPD能力 部署状态
Calterah Alps 2T4R, 802.15.4ab 完整 2026量产
NXP NCJ29D6 1T1R 基础 已量产
Infineon BGT60ATR24 60GHz 不穿透 限量产
TI IWR6843AOP 60GHz FMCW 生命体征 已量产

跨领域启示

Calterah的Radar Cloud Lab平台值得特别关注——这是一个AI驱动的芯片级DevOps平台,用于汽车mmWave雷达开发。其理念对IMS开发有直接借鉴价值:

  1. 仿真先行: 在芯片级仿真中完成算法验证,减少实车测试
  2. AI辅助调参: 用ML自动优化雷达参数配置
  3. DevOps一体化: 从仿真→标定→部署→OTA更新的闭环

这对IMS的”数据闭环”理念是完美补充——UWB CPD可以成为座舱感知数据闭环的重要输入源。

结论与趋势判断

多站UWB正在从技术验证快速走向量产部署,核心驱动力是:

  1. 硬件复用:数字钥匙UWB锚点天然分布在车内,零边际成本增加CPD
  2. 标准成熟:IEEE 802.15.4ab为多站同步提供协议级保障
  3. 法规推动:Euro NCAP 2026 CPD评分倒逼OEM采纳
  4. 技术闭环:CPD数据可复用于OMS(乘员分类、姿态估计),一石多鸟

对IMS的启示: UWB CPD不应被视为孤立功能,而应作为座舱感知网络的第一层——穿透性最强、隐私最优、成本最低的存在检测层。与摄像头DMS/OMS形成互补:UWB负责”有没有人/是否活着”,摄像头负责”在做什么/姿态如何”。


参考来源:

  • Calterah AutoSens Europe 2026访谈 (auto-sens.com)
  • IEEE 802.15.4ab标准草案
  • Euro NCAP 2026 CUPRA Raval评估报告
  • Calterah Alps系列芯片技术文档