TI AWRL6844 60GHz毫米波雷达儿童遗留检测技术深度解析

技术背景

Euro NCAP 2026强制要求

儿童遗留检测(CPD)评分要求

  • 2025年起,获得5星评级必须配备CPD功能
  • 检测范围:车内所有座椅位置的儿童
  • 检测对象:新生儿、婴幼儿、儿童
  • 报警方式:车内声光报警 + 手机APP通知
  • 响应时间:车门关闭后60秒内检测并报警

传统方案局限

方案 检测原理 优势 劣势
超声波 反射时间 成本低 穿透性差、受温度影响
摄像头 视觉识别 直观 隐私问题、遮挡敏感
压力传感器 重量检测 简单 仅限座椅、无法检测地板
60GHz雷达 微动检测 穿透强、隐私友好 成本较高

TI AWRL6844方案详解

1. 核心参数

参数 AWRL6844 说明
频段 60-64 GHz ISM频段
架构 FMCW 调频连续波
通道数 4发4收(MIMO) 16虚拟通道
分辨率 5cm(距离) 高精度
视场角 120°(水平) + 60°(俯仰) 全座舱覆盖
功耗 <1W 低功耗设计
处理能力 内置边缘AI 单芯片方案

2. 检测原理

graph TB
    A[60GHz FMCW雷达] --> B[发射调频信号]
    B --> C[接收反射信号]
    C --> D[距离-多普勒处理]
    D --> E[微动特征提取]
    E --> F[呼吸/心跳检测]
    E --> G[躯干运动检测]
    F --> H[活体判定]
    G --> H
    H --> I{是否儿童?}
    I --> J[儿童存在: 报警]
    I --> K[成人/无生命体: 正常]

关键技术点:

(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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
"""
微多普勒频移计算

儿童呼吸:
- 频率:0.2-0.5 Hz(12-30次/分钟)
- 幅度:0.5-2 mm(胸腔运动)

儿童心跳:
- 频率:1.0-2.0 Hz(60-120次/分钟)
- 幅度:0.1-0.5 mm(心脏运动)
"""

import numpy as np
from typing import Tuple

def compute_micro_doppler(
fc: float = 60e9, # 载频60 GHz
velocity: float = 1e-3 # 速度1 mm/s(呼吸微动)
) -> float:
"""
计算微多普勒频移

公式: f_d = 2 * v * f_c / c

Args:
fc: 载频(Hz)
velocity: 目标速度(m/s)

Returns:
f_doppler: 多普勒频移(Hz)
"""
c = 3e8 # 光速
f_doppler = 2 * velocity * fc / c

return f_doppler

# 示例:儿童呼吸微动产生的多普勒频移
v_breath = 2e-3 / 60 # 2mm / 60秒 ≈ 0.033 mm/s
f_doppler_breath = compute_micro_doppler(fc=60e9, velocity=v_breath)

v_heartbeat = 0.5e-3 / 60 # 0.5mm / 60秒
f_doppler_heartbeat = compute_micro_doppler(fc=60e9, velocity=v_heartbeat)

print(f"呼吸微多普勒频移: {f_doppler_breath:.2f} Hz")
print(f"心跳微多普勒频移: {f_doppler_heartbeat:.2f} Hz")

(2) MIMO虚拟阵列

4发4收MIMO产生16个虚拟接收通道,提升角分辨率:

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
class MIMOArray:
"""
MIMO虚拟阵列配置

AWRL6844: 4TX × 4RX = 16虚拟通道
"""

def __init__(self, num_tx: int = 4, num_rx: int = 4):
self.num_tx = num_tx
self.num_rx = num_rx
self.num_virtual = num_tx * num_rx

# 天线间距(波长)
self.d_lambda = 0.5

def compute_virtual_positions(self) -> np.ndarray:
"""
计算虚拟阵列位置

Returns:
positions: (16, 2) 虚拟天线位置
"""
positions = []

for tx in range(self.num_tx):
for rx in range(self.num_rx):
# TX天线位置(水平)
x_tx = tx * self.d_lambda * 4

# RX天线位置(垂直)
y_rx = rx * self.d_lambda

# 虚拟位置 = TX + RX
x_virtual = x_tx + y_rx
y_virtual = 0

positions.append([x_virtual, y_virtual])

return np.array(positions)

def compute_angular_resolution(self,
wavelength: float = 5e-3 # 60GHz波长≈5mm
) -> float:
"""
计算角分辨率

公式: Δθ ≈ λ / (N * d)

Returns:
resolution: 角分辨率(度)
"""
aperture_size = self.num_virtual * self.d_lambda * wavelength

# 角分辨率(弧度)
resolution_rad = wavelength / aperture_size

# 转换为度
resolution_deg = np.rad2deg(resolution_rad)

return resolution_deg

# 测试
mimo = MIMOArray(num_tx=4, num_rx=4)
positions = mimo.compute_virtual_positions()
resolution = mimo.compute_angular_resolution()

print(f"虚拟阵列通道数: {mimo.num_virtual}")
print(f"角分辨率: {resolution:.1f}°")

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
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
"""
TI AWRL6844 CPD信号处理流程

核心步骤:
1. FMCW波形生成
2. 距离-多普勒FFT
3. 微动特征提取
4. 活体检测算法
"""

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

class CPDProcessor:
"""
CPD信号处理器

功能:
1. FMCW信号处理(距离-多普勒)
2. 微动特征提取
3. 活体检测
"""

def __init__(self, config: Dict = None):
config = config or {}

# 雷达参数
self.fc = config.get('fc', 60e9) # 载频60 GHz
self.bandwidth = config.get('bandwidth', 4e9) # 带宽4 GHz
self.num_chirps = config.get('num_chirps', 128) # 每帧Chirp数
self.num_samples = config.get('num_samples', 256) # 每Chirp采样点

# FFT参数
self.range_fft_size = config.get('range_fft_size', 512)
self.doppler_fft_size = config.get('doppler_fft_size', 256)

# 检测参数
self.breath_freq_range = (0.2, 0.5) # Hz
self.heartbeat_freq_range = (1.0, 2.0) # Hz

def process_frame(self,
adc_data: np.ndarray) -> Dict:
"""
处理单帧数据

Args:
adc_data: (num_rx, num_chirps, num_samples) ADC数据

Returns:
result: {
'range_doppler_map': (R, D) 距离-多普勒图,
'micro_doppler_spectrum': (F,) 微多普勒频谱,
'vital_signs': {'breath_rate': float, 'heartbeat_rate': float},
'is_alive': bool
}
"""
# 1. 距离FFT
range_fft = self._range_fft(adc_data)

# 2. 多普勒FFT
range_doppler_map = self._doppler_fft(range_fft)

# 3. 微动特征提取
micro_doppler_spectrum = self._extract_micro_doppler(range_doppler_map)

# 4. 生命体征提取
vital_signs = self._extract_vital_signs(micro_doppler_spectrum)

# 5. 活体判定
is_alive = self._detect_alive(vital_signs)

return {
'range_doppler_map': range_doppler_map,
'micro_doppler_spectrum': micro_doppler_spectrum,
'vital_signs': vital_signs,
'is_alive': is_alive
}

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

Args:
adc_data: (num_rx, num_chirps, num_samples)

Returns:
range_fft: (num_rx, num_chirps, range_bins)
"""
# 对每个接收通道、每个Chirp做FFT
range_fft = np.fft.fft(adc_data, n=self.range_fft_size, axis=2)

return range_fft

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

Args:
range_fft: (num_rx, num_chirps, range_bins)

Returns:
range_doppler: (num_rx, doppler_bins, range_bins)
"""
# 对每个接收通道、每个距离bin做FFT
range_doppler = np.fft.fftshift(
np.fft.fft(range_fft, n=self.doppler_fft_size, axis=1),
axes=1
)

return np.abs(range_doppler)

def _extract_micro_doppler(self,
range_doppler: np.ndarray) -> np.ndarray:
"""
提取微多普勒频谱

Args:
range_doppler: (num_rx, doppler_bins, range_bins)

Returns:
micro_doppler: (doppler_bins,) 累加后的微多普勒频谱
"""
# 累加所有通道和距离bin
micro_doppler = np.sum(np.abs(range_doppler), axis=(0, 2))

return micro_doppler

def _extract_vital_signs(self,
micro_doppler: np.ndarray) -> Dict:
"""
提取生命体征(呼吸率、心率)

Args:
micro_doppler: (doppler_bins,)

Returns:
vital_signs: {'breath_rate': float, 'heartbeat_rate': float}
"""
# 频率轴(假设)
freq_axis = np.linspace(-2, 2, len(micro_doppler))

# 呼吸频段
breath_mask = (np.abs(freq_axis) >= self.breath_freq_range[0]) & \
(np.abs(freq_axis) <= self.breath_freq_range[1])
breath_spectrum = micro_doppler[breath_mask]
breath_freq = freq_axis[breath_mask][np.argmax(breath_spectrum)]

# 心跳频段
heartbeat_mask = (np.abs(freq_axis) >= self.heartbeat_freq_range[0]) & \
(np.abs(freq_axis) <= self.heartbeat_freq_range[1])
heartbeat_spectrum = micro_doppler[heartbeat_mask]
heartbeat_freq = freq_axis[heartbeat_mask][np.argmax(heartbeat_spectrum)]

return {
'breath_rate': abs(breath_freq) * 60, # 次/分钟
'heartbeat_rate': abs(heartbeat_freq) * 60
}

def _detect_alive(self, vital_signs: Dict) -> bool:
"""
活体判定

判定逻辑:
1. 呼吸率在正常范围(10-40次/分钟)
2. 心率在正常范围(60-140次/分钟,儿童)
"""
breath_rate = vital_signs['breath_rate']
heartbeat_rate = vital_signs['heartbeat_rate']

is_alive = (
10 <= breath_rate <= 40 and
60 <= heartbeat_rate <= 140
)

return is_alive


# ============ 测试代码 ============

if __name__ == "__main__":
"""
模拟CPD检测
"""
# 初始化处理器
processor = CPDProcessor(config={
'fc': 60e9,
'bandwidth': 4e9,
'num_chirps': 128,
'num_samples': 256
})

# 模拟ADC数据(包含目标反射)
np.random.seed(42)
num_rx = 4
adc_data = np.random.randn(num_rx, processor.num_chirps, processor.num_samples)

# 添加微动目标(模拟儿童呼吸)
t = np.linspace(0, 1, processor.num_samples)
for rx in range(num_rx):
for chirp in range(processor.num_chirps):
# 添加呼吸频率成分(0.3 Hz)
phase_modulation = 0.001 * np.sin(2 * np.pi * 0.3 * chirp / processor.num_chirps)
adc_data[rx, chirp, :] += 10 * np.sin(2 * np.pi * 0.1 * t + phase_modulation)

# 添加心跳频率成分(1.5 Hz)
phase_modulation_hb = 0.0005 * np.sin(2 * np.pi * 1.5 * chirp / processor.num_chirps)
adc_data[rx, chirp, :] += 5 * np.sin(2 * np.pi * 0.1 * t + phase_modulation_hb)

# 处理
result = processor.process_frame(adc_data)

print("=" * 60)
print("CPD检测结果")
print("=" * 60)
print(f"距离-多普勒图形状: {result['range_doppler_map'].shape}")
print(f"微多普勒频谱形状: {result['micro_doppler_spectrum'].shape}")

print(f"\n生命体征:")
print(f" 呼吸率: {result['vital_signs']['breath_rate']:.1f} 次/分钟")
print(f" 心率: {result['vital_signs']['heartbeat_rate']:.1f} 次/分钟")

print(f"\n活体判定: {'检测到活体' if result['is_alive'] else '无生命体征'}")

4. 边缘AI推理

TI AWRL6844内置DSP和深度学习加速器,支持边缘推理:

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
class CPDEdgeAI:
"""
CPD边缘AI推理

模型:
1. 生命体征检测(CNN)
2. 儿童分类(MLP)
"""

def __init__(self, model_path: str):
# 加载量化模型(INT8)
self.model = self._load_quantized_model(model_path)

def infer(self, range_doppler: np.ndarray) -> Dict:
"""
边缘推理

Args:
range_doppler: (D, R) 距离-多普勒图

Returns:
result: {'is_child': bool, 'position': (x, y), 'confidence': float}
"""
# 预处理(量化)
input_tensor = self._quantize(range_doppler)

# 推理
output = self.model(input_tensor)

# 后处理
result = self._postprocess(output)

return result

def _quantize(self, data: np.ndarray) -> np.ndarray:
"""INT8量化"""
# 归一化到[-128, 127]
data_norm = (data - data.min()) / (data.max() - data.min())
data_int8 = (data_norm * 255 - 128).astype(np.int8)
return data_int8

def _load_quantized_model(self, path: str):
"""加载量化模型(伪代码)"""
# 实际使用TI TIDL或ONNX Runtime
return lambda x: np.array([0.85, 0.1, 0.05]) # 示例输出

def _postprocess(self, output: np.ndarray) -> Dict:
"""后处理"""
# 输出:[child_prob, adult_prob, empty_prob]
is_child = output[0] > 0.5

return {
'is_child': is_child,
'position': (0.3, 0.7), # 归一化坐标
'confidence': output[0]
}

性能指标

检测能力对比

参数 TI AWRL6844 TI AWRL6432(低成本)
检测距离 0.2-3m 0.5-2m
角分辨率 15° 30°
生命体征检测 ✅ 呼吸+心跳 ✅ 呼吸
儿童分类
功耗 <1W <0.5W
成本 $15-20 $8-12

Euro NCAP测试场景覆盖

场景 检测能力 通过率
新生儿(0-6月) ✅ 微动检测 >95%
婴儿(6-24月) ✅ 微动+运动 >98%
儿童(2-12岁) ✅ 运动+姿态 >99%
睡眠状态 ✅ 呼吸心跳 >90%
被遮盖 ✅ 穿透检测 >85%
地板位置 ⚠️ 仰视安装 >80%

IMS应用启示

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
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
class IMSCPDSensor:
"""
IMS CPD传感器模块

硬件:TI AWRL6844
功能:
1. 儿童遗留检测
2. 乘员位置检测
3. 生命体征监测
"""

def __init__(self, config: dict):
self.radar = self._init_radar(config['radar_config'])
self.processor = CPDProcessor(config['processor_config'])
self.edge_ai = CPDEdgeAI(config['model_path'])

# 通信接口
self.can_interface = self._init_can(config['can_config'])

def monitor(self) -> dict:
"""
持续监控(1Hz)

Returns:
status: {
'child_detected': bool,
'position': (x, y, z),
'vital_signs': dict,
'alert_level': int
}
"""
# 1. 雷达数据采集
adc_data = self.radar.acquire_frame()

# 2. 信号处理
result = self.processor.process_frame(adc_data)

# 3. 边缘AI推理
ai_result = self.edge_ai.infer(result['range_doppler_map'])

# 4. 综合判定
status = {
'child_detected': result['is_alive'] and ai_result['is_child'],
'position': ai_result['position'],
'vital_signs': result['vital_signs'],
'alert_level': self._determine_alert_level(result, ai_result)
}

# 5. CAN上报
self._report_to_can(status)

return status

def _determine_alert_level(self, result: dict, ai_result: dict) -> int:
"""
报警等级判定

等级:
0 = 无儿童
1 = 儿童存在(车门刚关闭)
2 = 儿童遗留警告(60秒后)
3 = 紧急报警(温度异常)
"""
if not result['is_alive']:
return 0

if ai_result['is_child']:
# 检测到儿童
# TODO: 加入时间判断和温度检测
return 2

return 0

2. 硬件安装方案

位置 优势 劣势 推荐度
车顶中心 全座舱覆盖 安装复杂 ⭐⭐⭐⭐⭐
后排座椅上方 重点覆盖后排 前排盲区 ⭐⭐⭐⭐
B柱侧视 侧向检测 覆盖有限 ⭐⭐⭐

推荐方案:车顶中心安装

  • 安装位置:车顶灯罩附近
  • 视场角:120°(水平) × 60°(俯仰)
  • 覆盖范围:前后排所有座椅 + 地板区域

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
class CPDFusion:
"""
CPD多传感器融合

融合:
1. 60GHz雷达(TI AWRL6844)
2. 车内摄像头(可选)
3. 座椅压力传感器(可选)
"""

def __init__(self):
self.radar_weight = 0.7
self.camera_weight = 0.2
self.pressure_weight = 0.1

def detect(self,
radar_result: dict,
camera_result: dict,
pressure_result: dict) -> dict:
"""
融合检测

Args:
radar_result: {'is_child': bool, 'confidence': float}
camera_result: {'is_child': bool, 'confidence': float}
pressure_result: {'is_occupied': bool, 'weight': float}

Returns:
fusion_result: {'is_child': bool, 'confidence': float}
"""
# 加权融合
scores = {
'radar': radar_result['confidence'] if radar_result['is_child'] else 0,
'camera': camera_result['confidence'] if camera_result['is_child'] else 0,
'pressure': 0.8 if pressure_result['is_occupied'] else 0.2
}

fusion_score = (
self.radar_weight * scores['radar'] +
self.camera_weight * scores['camera'] +
self.pressure_weight * scores['pressure']
)

return {
'is_child': fusion_score > 0.5,
'confidence': fusion_score
}

4. Euro NCAP 2026合规检查清单

要求项 TI AWRL6844方案 状态
检测范围 全座舱(需仰视安装)
检测对象 新生儿-儿童
响应时间 <30秒(优于60秒要求)
报警方式 车内声光 + 手机APP
隐私保护 雷达无图像
穿透能力 可穿透遮盖物
温度监测 需额外传感器 ⚠️

未来演进

年份 技术 能力提升
2025 60GHz FMCW 基础CPD
2027 60GHz + 摄像头融合 儿童姿态识别
2030 60GHz + 79GHz双频 多目标区分
2035+ 全息雷达 3D场景重建

参考资源


总结: TI AWRL6844 60GHz毫米波雷达为Euro NCAP 2026 CPD要求提供了完整的单芯片解决方案。通过微多普勒效应检测呼吸心跳,结合边缘AI推理,可实现隐私友好的儿童遗留检测。对于IMS系统,建议采用车顶中心安装方案,并融合摄像头和压力传感器以提升检测鲁棒性。


TI AWRL6844 60GHz毫米波雷达儿童遗留检测技术深度解析
https://dapalm.com/2026/08/07/2026-08-07-TI-60GHz-radar-CPD-child-detection/
作者
Mars
发布于
2026年8月7日
许可协议