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
| class TI_AWRL6844_Controller: """ TI AWRL6844 三合一应用控制器 单芯片覆盖: 1. 安全带提醒系统(SBR) 2. 儿童存在检测(CPD) 3. 入侵检测(ID) 时间分割方案: - 行驶中: SBR模式(持续) - 停泊后: CPD模式(低功耗周期) - 锁车后: ID模式(防盗) """ MODE_CONFIG = { 'seatbelt_reminder': { 'description': '安全带提醒 - 行驶中', 'update_rate': '10Hz', 'range': '0.5-2m', 'detection': '乘员存在 + 姿态粗判', 'power': '~80mW', }, 'cpd_monitoring': { 'description': '儿童存在检测 - 停泊后', 'update_rate': '1Hz (低功耗)', 'range': '0-1.5m', 'detection': '微动(呼吸/心跳)', 'power': '~10mW', }, 'intrusion_detection': { 'description': '入侵检测 - 锁车后', 'update_rate': '0.5Hz', 'range': '0-3m', 'detection': '异常运动', 'power': '~5mW', }, } def __init__(self): self.current_mode = 'seatbelt_reminder' self.detection_results = { 'seatbelt_status': None, 'cpd_detected': False, 'intrusion_detected': False, } def switch_mode(self, vehicle_state: str): """根据车辆状态切换模式""" if vehicle_state == 'driving': self.current_mode = 'seatbelt_reminder' elif vehicle_state == 'parked': self.current_mode = 'cpd_monitoring' elif vehicle_state == 'locked': self.current_mode = 'intrusion_detection' return self.MODE_CONFIG[self.current_mode] def process_radar_data(self, raw_data: np.ndarray) -> dict: """ 处理原始雷达数据(片上AI通常已处理,此处为接口模拟) Args: raw_data: ADC原始数据 (num_chirps, num_rx, num_samples) Returns: 检测结果 """ if self.current_mode == 'seatbelt_reminder': return self._process_sbr(raw_data) elif self.current_mode == 'cpd_monitoring': return self._process_cpd(raw_data) elif self.current_mode == 'intrusion_detection': return self._process_id(raw_data) def _process_sbr(self, data: np.ndarray) -> dict: """安全带提醒处理""" range_doppler = np.fft.fft2(data, axes=(0, 2)) magnitude = np.abs(range_doppler) seat_occupied = magnitude.max() > 0.5 belt_fastened = seat_occupied and self._check_belt_pattern(magnitude) return { 'seat_occupied': seat_occupied, 'belt_fastened': belt_fastened, 'alert': not belt_fastened if seat_occupied else False, } def _process_cpd(self, data: np.ndarray) -> dict: """CPD处理""" range_doppler = np.fft.fft2(data, axes=(0, 2)) magnitude = np.abs(range_doppler) low_freq_power = np.sum(magnitude[:, :, :5]**2) static_power = np.sum(magnitude**2) motion_ratio = low_freq_power / (static_power + 1e-8) cpd_detected = motion_ratio > 0.1 return { 'cpd_detected': cpd_detected, 'motion_ratio': motion_ratio, 'confidence': min(motion_ratio * 5, 1.0), } def _process_id(self, data: np.ndarray) -> dict: """入侵检测处理""" range_doppler = np.fft.fft2(data, axes=(0, 2)) magnitude = np.abs(range_doppler) motion_power = np.sum(magnitude[:, 5:, :]**2) intrusion = motion_power > 1.0 return { 'intrusion_detected': intrusion, 'motion_power': motion_power, } def _check_belt_pattern(self, magnitude: np.ndarray) -> bool: """检查安全带反射模式""" return True
|