From c77b6c239e90e4005e4bf2f8819d4ece95ad0cc4 Mon Sep 17 00:00:00 2001 From: waiwaylee Date: Fri, 30 Oct 2026 16:40:54 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E6=97=B6=E8=8C=83=E5=9B=B4=E5=88=A4=E6=96=AD=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E5=AF=BC=E8=87=B4=E5=8F=82=E6=95=B0=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B=202?= =?UTF-8?q?=E3=80=81=E6=96=B0=E5=A2=9E4=E4=BB=BD=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6=EF=BC=9B=203=E3=80=81=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=8D=95=E8=B7=9F=E8=B8=AA=E6=A8=A1=E5=BC=8F=E4=B8=8B=EF=BC=8C?= =?UTF-8?q?=E4=BC=9A=E5=81=B6=E5=B0=94=E5=8F=91=E9=80=81TWS=E6=B3=A2?= =?UTF-8?q?=E6=9D=9F=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B=204=E3=80=81?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=89=8B=E5=8A=A8=E5=8F=96=E6=B6=88=E7=9B=AE?= =?UTF-8?q?=E6=A0=87TAS=E8=B7=9F=E8=B8=AA=E6=97=B6=E8=BE=93=E5=87=BA?= =?UTF-8?q?=E8=88=AA=E8=BF=B9=E6=9B=B4=E6=96=B0=E4=BF=A1=E6=81=AF=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=89=8B=E5=8A=A8=E5=8F=96=E6=B6=88=E7=9B=AE?= =?UTF-8?q?=E6=A0=87TAS=E8=B7=9F=E8=B8=AA=E8=88=AA=E8=BF=B9=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E4=B8=8D=E6=9B=B4=E6=96=B0=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=9B=205=E3=80=81=E6=96=B0=E5=A2=9E=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97=E8=BE=93=E5=87=BA=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: waiwaylee --- CHANGELOG.md | 3 +- README.md | 7 +- config/X1024_MS_4.8S.toml | 161 ++++++++++++++++++ config/X256_MS_4S.toml | 161 ++++++++++++++++++ config/X256_PS_3S_TAS_1Hz.toml | 161 ++++++++++++++++++ config/X256_PS_3S_TAS_2Hz.toml | 161 ++++++++++++++++++ config/config_tmp.toml | 2 +- data_process_class_dll/data_process.cpp | 16 +- .../rdp_parameter_loader.cpp | 4 +- data_process_class_dll/struct.h | 1 + data_process_class_dll/tas_ctrl.cpp | 155 ++++++++++------- docs/data_process_flow_report.md | 4 +- 12 files changed, 763 insertions(+), 73 deletions(-) create mode 100644 config/X1024_MS_4.8S.toml create mode 100644 config/X256_MS_4S.toml create mode 100644 config/X256_PS_3S_TAS_1Hz.toml create mode 100644 config/X256_PS_3S_TAS_2Hz.toml diff --git a/CHANGELOG.md b/CHANGELOG.md index 59a18ea..33362cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ ### Changed +- **放宽 `data_rate_tas` 校验允许 0(修复机扫配置加载失败,工作区未提交)**:`rdp_parameter_loader.cpp` 对 `data_rate_tas` 的校验由 `>0` 放宽为 `≥0`——代码中该值只用于 `delta_T_last_track > data_rate_tas` 门控比较(无除法),**0 表示不做 DLL 内部 TAS 波束限速,TAS 波束输出间隔由宿主 `Beam_Ctrl` 调用频率决定**;`data_rate_tws` 仍要求 >0(外推步长不可为 0),`data_rate_track_only` 保持 ≥0。修复 `config/X256_MS_4S.toml`、`config/X1024_MS_4.8S.toml`(均配置 `data_rate_tas = 0`)经 `parameters_reload()` 加载返回 -1 的问题。同步更新 `config/config_tmp.toml` 的 `data_rate_tas` 注释(0 语义)。验证(Lead 实测,2026-10-30):加载器单元测试 240 项断言全部通过(新增「`data_rate_tas=0` 允许且取值正确」「`data_rate_tas=-1` 拒绝」「`data_rate_tws=0` 拒绝」);4 配置重建 0 warning / 0 error;5 份配置(含两份机扫配置)经 DLL 公开接口 `parameters_reload()` 全部返回 0;公开接口运行期测试 4 配置 × 38 项断言全部通过(回归)。 - **日志组件行为改为 spdlog(日志组件 spdlog 改造,24ce1e6)**:`data_process_class_dll.cpp` 的 `Data_Process_Factory::GetB()` 每次创建实例时调用 `rdp_log::Init()`(在 `rdp_record::Init()` 之前,使记录模块初始化日志也写入同一文件),`Destroy()` 在 `rdp_record::Shutdown()` 之后调用 `rdp_log::Shutdown()`(flush 并关闭日志文件);不再使用 `rdbuf()` 重定向/恢复 `std::cout`,`std::cout` 保持宿主原始语义,日志的双写完全由 spdlog 双 sink 完成;`RDP_LOG_DIR` 路径与 `.\rdp_logs\` 命名风格保持与旧实现一致。全部 `RDP_LOG` 调用点按语义迁移为级别宏:`data_process.cpp`(`parameters_reload` 成功 INFO / 失败 ERROR)、`track_asso_tas.cpp`(ΔT≤0 告警 WARN)、`rdp_record.cpp`(19 处:初始化/统计/建表/关闭 INFO,PRAGMA 回退/队满丢弃/时间获取失败/数据库打开失败 WARN,写入失败/连续错误熔断/写线程异常 ERROR),其余注释代码中的旧宏引用同步改为对应级别宏注释;`parameters.h` 的日志说明改为 spdlog + `SPDLOG_ACTIVE_LEVEL`/`RDP_LOG_LEVEL` 描述。 - **日志改造的第三方告警隔离**:spdlog 静态库第三方源码以目标级 `/w` 编译,包含其头文件的 `rdp_log.h` 用 `#pragma warning(push, 0)` / `(pop)` 包裹(README 4.5 已同步为第三个第三方告警例外),项目源码仍保持 `/W3` 零告警。 - **本次日志改造的验证(Lead 实测,2026-10-28)**:① 构建:4 个配置(Release/Debug × REC_OFF/REC_ON)经 `.vscode/scripts/build_config.bat` 全部成功、退出码 0、**0 warning / 0 error**;重复执行无编译步骤(增量幂等);`RDP_LOG_LEVEL=BAD` 在 configure 阶段被拒绝(退出码 1)。② compile_commands:Debug 配置 `-DSPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE`、Release 配置 `-DSPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_INFO`(AUTO),各目标均含 `-DSPDLOG_COMPILED_LIB`,REC_ON 的 `rdp_record.cpp`(C++20)与 DLL 源文件定义一致。③ DLL 体积:Release REC_OFF 537,088 B(较改造前 331,264 B +205,824 B)、Release REC_ON 1,855,488 B(+202,752 B)、Debug REC_OFF 3,317,760 B(+1,602,560 B)、Debug REC_ON 5,867,520 B(+1,175,552 B),增量来自内置 spdlog/{fmt}(DLL 公开接口与业务数值行为不变);导出表仍 **31 项**(无 spdlog 符号导出),导入表仅 KERNEL32/MSVCP140/VCRUNTIME140*/api-ms-win-crt-*,无新增第三方 DLL 依赖(spdlog 为静态库)。④ 运行期(4 配置逐一编译并运行 `build/verify/build_api_test.bat`,各 38 项断言 0 失败):同一批日志消息在 stdout 与日志文件中逐行一致;日志文件名匹配 `rdp_\d{8}_\d{6}(_\d+)?\.log`,每次 GetB 一个文件、同秒 Destroy→GetB 重连产生 `_1` 后缀新文件;日志行匹配 `[YYYY-MM-DD HH:MM:SS.mmm] [级别] [文件:行号] 内容`(中文消息正常),REC_ON 配置可见 `[rdp_record]` 的 `journal_mode`/`enabled`/`table ... created without AUTOINCREMENT`/`stats`/`shutdown` 等日志并随双写落盘。⑤ 编译期级别隔离实测:在 `build/verify/` 下独立配置构建 `RDP_LOG_LEVEL=WARN` 与 `=OFF`(不污染标准构建目录)均 0 warning;WARN 构建运行期 stdout/日志无 `[info]` 行、仅有 `[error]`(失败路径)且日志文件仍创建;OFF 构建运行期不创建 `rdp_logs` 目录/文件、stdout 无任何日志行、接口退出码正常。⑥ 静态检查:源码已无 `RDP_LOG <<` 与 `RDP_LOG_ENABLE` 残留;`rdp_log.h` 提供 6 个级别宏 + `RDP_LOG_ERR` 别名;`GetB()/Destroy()` 已实际调用 `rdp_log::Init()/Shutdown()`(非注释)。验证程序/日志位于 git 忽略的 `build/verify/`,未入库;另由独立验证者以冻结源码快照复验全部验收项(4 配置干净构建 0 warning/0 error、双写/文件名/行格式/逐行一致、WARN/OFF 隔离、dumpbin 导出与依赖、幂等与非法值),结论一致,报告见 `build/verify/verification_report.md`(未入库)。 @@ -58,7 +59,7 @@ - **旧宏与旧 `RadarPara` 字段的等价替换(参数配置方式改造)**:如 `SIGMA_R/A/E/V`→`sigma_range/azimuth/pitch/velocity`、`DOT_COH_RANGE/V/AZI`→`point_cohesion_range/velocity/azimuth`、`R_MIN/R_MAX`→`point_cohesion_range_min/max`、`FREQ0`→`freq_0_GHz`、`ASSO_THORD`→`associate_threshold`、`MAX_EXTRAPOLATE_NUM(_TAS)`→`extrapolate_max(_tas)`、`H_F_WIN_LEN`→`height_smooth_win`、`TRACK_START_THRESHOLD/ALPHA_START`→`track_init_threshold/track_init_angle`、`TRACK_START_QUALITY_L3~L7`→`track_init_quality_L3~L7`、`TRACK_DIE_QUALITY(_PRAMARY)/TRACK_DIE_ROUND(_PRIMARY/_TAS)`→`track_die_quality(_pramary)/track_die_round(_pramary/_tas)`、`TRACK_QUALITY_*`→`track_quality_*`、`work_mode/Height/Sys_delay`→`radar_work_mode/radar_height/radar_system_delay`、`track_start_point_num`→`track_init_point_num_min`、`V_MAX/V_MIN`→`track_init_velocity_max/min`、`track_prohibite_area_*`→`track_init_prohibite_area_*`、`TAS_prohibite_area_*`→`tas_prohibite_area_*`、`Model1/2/3_Q_fast/slow`→`model_1/2/3_Q_fast/slow`、`DATA_RATE_SHORT/MIDDLE/FAR`→`data_rate_tws`(契约确认的等价改法)、`DATA_RATE_TAS`→`data_rate_tas`;完整对照见 `README.md` 10.3 节。 - **航迹号、TAS 队列与跟踪波束类型改为按配置分配(参数配置方式改造)**:`track_index_mangement.cpp` 的定长数组 `int List[MAX_TRACK_INDEX]` 改为按 `rdp_parameter.track_index_max` 分配的 `std::vector`;TAS 队列固定容量改用编译期常量 `RDP_TAS_QUEUE_CAPACITY`(30),运行期同时跟踪目标数上限改用配置项 `tas_track_num_max`(加载器校验 0~30,原 `MAX_TAS_NUM` 相扫 4 / 机扫 1);跟踪波束 `Tracking_beam->type` 由硬编码 1 改为配置项 `default_track_beam_type`。 - **`parameters.h` 精简为编译期常量(参数配置方式改造)**:删除全部雷达工作参数宏,仅保留 `PI`、版本宏(`MAJOR_VERSION`/`MINOR_VERSION`/`PATCH_VERSION`/`VERSION_INFO`/`VERSION_STRING`)、日志宏(`RDP_LOG_*`)、记录宏(`RDP_RECORD_*`)、接口容量常量 `MAX_TRACK_NUM`(500)/`RDP_TAS_QUEUE_CAPACITY`(30)与 `Round`;`requirements.md` 同时改写为本次参数配置方式改造的需求说明。 -- **本次改造的验证(Lead 实测,2026-10-27,机扫/相扫合并前)**:① 构建:8 个配置(X256_PS/X256_MS × Release/Debug × REC_OFF/REC_ON)全部成功、退出码 0、0 warning 0 error,每个配置均生成 `bin/data_process_class_dll.dll`;Release REC_OFF DLL 体积 331,776 字节(约 324 KB,较改造前约 178 KB 增大,原因是纯头文件的 toml++ 解析器编入 DLL),Debug REC_ON 为 4,694,016 字节。② 导出表(Release REC_OFF,共 31 个导出):新增 `parameters_reload`(`?parameters_reload@Data_process_class_dll@@UEAAHPEBD@Z`),`track_process_parameters_initial`/`track_process_parameters_modify` 与 `RadarPara` 相关符号已不存在,`Data_Process_Factory::GetB/Destroy` 等其余接口不变。③ 加载器单元测试(229 项断言全部通过):样例配置 62 个键逐字段取值正确(含整数/浮点与负的二次/一次衰减系数;该轮为 `scan_mode` 新增前的验证,新增后样例共 63 个键,见上一条 `scan_mode` 验证);文件不存在、空路径、nullptr、TOML 语法错误、缺标量键、类型错误、未知键、缺配置段、取值越界(起批点数 2、`data_rate_tas=0`)、区域数 31、区域方位 min≥max、数组长度与 `*_num` 不一致等失败路径均返回 -1 且不修改当前参数,失败后可重新加载成功;屏蔽区数组按 `*_num` 读取、未使用位置保持 0。④ 公开接口运行期测试(8 个配置逐一编译链接运行,各 29 项断言全部通过):`GetB()`/`version_info`(`V1.5.8.PS`/`V1.5.8.MS`)、`parameters_reload` 成功/失败返回值与「失败后再加载成功」、TWS/TAS 主流程冒烟、`Beam_Ctrl`、`track_clear_all`、`track_delete`/`tracking_start`/`tracking_stop`/`primary_target_add`/`primary_target_cancel`/`tracking_point`、`Destroy()` 后重新 `GetB()` 并再次加载配置均正常。⑤ 静态审计:源码无 `Work_Parameter`/`RadarPara`/旧参数宏残留(区分大小写整词审计 0 命中);首轮验证时 62 个 `RDP_parameter` 成员 ↔ 62 个加载器键 ↔ 62 个 TOML 键一一对应(新增 `scan_mode` 后为 63 个),11 个配置段与加载器一致。验证程序与日志位于 git 忽略的构建目录中,未入库。 +- **本次改造的验证(Lead 实测,2026-10-27,机扫/相扫合并前)**:① 构建:8 个配置(X256_PS/X256_MS × Release/Debug × REC_OFF/REC_ON)全部成功、退出码 0、0 warning 0 error,每个配置均生成 `bin/data_process_class_dll.dll`;Release REC_OFF DLL 体积 331,776 字节(约 324 KB,较改造前约 178 KB 增大,原因是纯头文件的 toml++ 解析器编入 DLL),Debug REC_ON 为 4,694,016 字节。② 导出表(Release REC_OFF,共 31 个导出):新增 `parameters_reload`(`?parameters_reload@Data_process_class_dll@@UEAAHPEBD@Z`),`track_process_parameters_initial`/`track_process_parameters_modify` 与 `RadarPara` 相关符号已不存在,`Data_Process_Factory::GetB/Destroy` 等其余接口不变。③ 加载器单元测试(229 项断言全部通过):样例配置 62 个键逐字段取值正确(含整数/浮点与负的二次/一次衰减系数;该轮为 `scan_mode` 新增前的验证,新增后样例共 63 个键,见上一条 `scan_mode` 验证);文件不存在、空路径、nullptr、TOML 语法错误、缺标量键、类型错误、未知键、缺配置段、取值越界(起批点数 2、`data_rate_tas<0`(0 自 2026-10-30 起允许,见本区上方))、区域数 31、区域方位 min≥max、数组长度与 `*_num` 不一致等失败路径均返回 -1 且不修改当前参数,失败后可重新加载成功;屏蔽区数组按 `*_num` 读取、未使用位置保持 0。④ 公开接口运行期测试(8 个配置逐一编译链接运行,各 29 项断言全部通过):`GetB()`/`version_info`(`V1.5.8.PS`/`V1.5.8.MS`)、`parameters_reload` 成功/失败返回值与「失败后再加载成功」、TWS/TAS 主流程冒烟、`Beam_Ctrl`、`track_clear_all`、`track_delete`/`tracking_start`/`tracking_stop`/`primary_target_add`/`primary_target_cancel`/`tracking_point`、`Destroy()` 后重新 `GetB()` 并再次加载配置均正常。⑤ 静态审计:源码无 `Work_Parameter`/`RadarPara`/旧参数宏残留(区分大小写整词审计 0 命中);首轮验证时 62 个 `RDP_parameter` 成员 ↔ 62 个加载器键 ↔ 62 个 TOML 键一一对应(新增 `scan_mode` 后为 63 个),11 个配置段与加载器一致。验证程序与日志位于 git 忽略的构建目录中,未入库。 - **构建脚本适配机扫/相扫合并(本次构建配置调整)**:构建目录由「扫描体制 × 构建类型 × 记录模式」改为「构建类型 × 记录模式」——`build//`,不再有 `X256_PS`/`X256_MS` 维度。 - `config_paths.bat` / `configure.bat` / `build.bat` / `clean.bat` 参数改为 ` [AUTO|ON|OFF]`,构建目录自动推导;`build_all.bat` 由 `build_config.bat`(单配置「配置 + 构建」)取代,失败即中止并返回非 0;`clean_all.bat` 在清理 4 种配置的同时清理旧版 `build/X256_PS`、`build/X256_MS` 目录(`build/output` 保留)。 - VS Code 配置同步:`settings.json` 的 `cmake.buildDirectory` 改为 `${workspaceFolder}/build/${buildType}/${variant:recordMode}`、`compileCommands` 指向 `build/Debug/REC_ON/compile_commands.json`;`cmake-variants.yaml` 移除 `scanMode` 变体(仅保留 `buildType` + `recordMode`);`c_cpp_properties.json` 合并为单个「X256 (MSVC2022 x64)」配置(不再带 `PHASE_SCANNING`/`MECHANICAL_SCANNING` 宏);`launch.json` 的 `preLaunchTask` 改为「配置并构建(Debug/REC_ON)」,`program`/`symbolSearchPath` 指向 `build/Debug/REC_ON/bin`。 diff --git a/README.md b/README.md index 4165364..1ef5aff 100644 --- a/README.md +++ b/README.md @@ -930,7 +930,7 @@ $$ - **入队条件**(仅手动):manual_tracking_flag==1 且 Track_Mode==0 且队列未满(配置项 `tas_track_num_max`,样例为相扫 4;机扫需配 1,上限 `RDP_TAS_QUEUE_CAPACITY`=30)且不在 TAS 禁止区内。入队即置 Track_Mode=1、以航迹时间初始化 last_track_time,并输出一次航迹更新。 - **出队**:队列中目标在航迹表中不存在、或不再处于手动 TAS 状态时清除。(自动转 TAS / 自动退出的 tas_auto_start/tas_auto_end 逻辑全部注释停用——只支持手动。) -- **波束输出**:在 TAS 队列内遍历,逐个目标先按**数据率门控**筛选——仅要求目标距上次波束输出(`last_track_time`)的时间 `delta_T_last_track = (latest_timestamp − last_track_time)/1000` 大于配置项 `data_rate_tas` 秒(单位 s,1521592 起由 Hz 改为 s,加载器校验须 >0),保证 TAS 目标输出间隔不随波束时间(Beam_Ctrl 调用频率)变化;对通过门控的目标再比较航迹时间 `T_track`,取 CPI 时间最早者,选中后按其 CPI 时间与最新时间戳之差外推到 latest_timestamp: +- **波束输出**:在 TAS 队列内遍历,逐个目标先按**数据率门控**筛选——仅要求目标距上次波束输出(`last_track_time`)的时间 `delta_T_last_track = (latest_timestamp − last_track_time)/1000` 大于配置项 `data_rate_tas` 秒(单位 s,1521592 起由 Hz 改为 s;加载器校验须 ≥0,**0 表示不做 DLL 内部 TAS 波束限速、输出间隔改由宿主 `Beam_Ctrl` 调用频率决定**),保证 TAS 目标输出间隔不随波束时间(Beam_Ctrl 调用频率)变化;对通过门控的目标再比较航迹时间 `T_track`,取 CPI 时间最早者,选中后按其 CPI 时间与最新时间戳之差外推到 latest_timestamp: $$ \Delta T=(latest\_timestamp-CPI\_time)/1000,\qquad @@ -1055,7 +1055,7 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一 1. 11 个配置段**全部必填**,且必须是 TOML 表;顶层出现未知配置段直接拒绝; 2. 所有**标量键必填**,类型必须匹配(浮点参数接受整数或浮点,整数参数只接受整数),且不得超出 C++ `float`/`int` 可表示范围; 3. 每个段内只允许登记过的键,**拼错的键按未知参数拒绝**(不会静默忽略); -4. 取值范围校验:如 `radar_work_mode∈[0,2]`、`scan_mode∈{0,1}`、`freq_0_GHz>0`、`data_rate_tws/data_rate_tas>0`、`sigma_*>0`、`associate_threshold>0`、`height_smooth_win≥1`、`track_init_point_num_min∈[3,9]`、`track_init_angle∈(0,180]`、`track_init_quality_L3~L7∈[0,1]`、`track_init_velocity_max>min≥0`、消亡圈数≥0、质量门限∈[0,1]、质量衰减系数≤0、`track_index_max∈[1, MAX_TRACK_NUM]`、`tas_track_num_max∈[0, RDP_TAS_QUEUE_CAPACITY]`、Singer 模型 Q>0 等(完整清单以源码为准); +4. 取值范围校验:如 `radar_work_mode∈[0,2]`、`scan_mode∈{0,1}`、`freq_0_GHz>0`、`data_rate_tws>0`、`data_rate_tas≥0`(**0 表示不做 DLL 内部 TAS 波束限速、由宿主 `Beam_Ctrl` 调用频率决定**)、`sigma_*>0`、`associate_threshold>0`、`height_smooth_win≥1`、`track_init_point_num_min∈[3,9]`、`track_init_angle∈(0,180]`、`track_init_quality_L3~L7∈[0,1]`、`track_init_velocity_max>min≥0`、消亡圈数≥0、质量门限∈[0,1]、质量衰减系数≤0、`track_index_max∈[1, MAX_TRACK_NUM]`、`tas_track_num_max∈[0, RDP_TAS_QUEUE_CAPACITY]`、Singer 模型 Q>0 等(完整清单以源码为准); 5. 屏蔽区:`*_num∈[0,30]`;4 个数组的元素个数必须**等于** `*_num`(`*_num=0` 时数组可省略,存在时必须为空数组);并逐区校验距离 `0≤min0;原 `DATA_RATE_TAS`,1521592 起单位由 Hz 改为 s) | +| radar_params | `data_rate_tas` | 1 | TAS 波束输出间隔(s,校验 ≥0;**0 表示不做 DLL 内部限速、输出间隔由宿主 `Beam_Ctrl` 调用频率决定**;原 `DATA_RATE_TAS`,1521592 起单位由 Hz 改为 s) | | radar_params | `data_rate_track_only` | 0.2 | 纯跟踪模式数据率(s;当前实现保留未用) | | cohesion | `point_cohesion_range` | 80 | 距离凝聚门限(m;原 `DOT_COH_RANGE`) | | cohesion | `point_cohesion_velocity` | 2 | 速度凝聚门限(m/s;原 `DOT_COH_V`) | @@ -1278,6 +1278,7 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一 | 提交 | 内容 | |---|---| +| 工作区(`data_rate_tas=0` 加载修复,未提交) | 放宽 `data_rate_tas` 校验为 `≥0`:`rdp_parameter_loader.cpp` 原要求 `data_rate_tas > 0`,导致 `config/X256_MS_4S.toml` / `config/X1024_MS_4.8S.toml`(`data_rate_tas = 0`)经 `parameters_reload()` 加载返回 -1;现允许 0(代码中该值仅用于 `delta_T_last_track > data_rate_tas` 比较,无除法),**0 表示不做 DLL 内部 TAS 波束限速、输出间隔由宿主 `Beam_Ctrl` 调用频率决定**;`data_rate_tws` 仍要求 >0。验证(Lead 实测,2026-10-30):加载器单测 240 项断言全通过(新增 0 允许 / 负值拒绝 / data_rate_tws=0 拒绝);4 配置重建 0 warning 0 error;5 份配置经 DLL 公开接口 `parameters_reload()` 全部返回 0;公开接口运行期测试 4 配置 × 38 项断言通过。详见 CHANGELOG `[1.5.9]` | | eb9f30c | 修复手动转 TAS 时输出航迹更新信息不完整:`tas_target_add()` 的即时输出行改为与常规关联输出同一套字段(含 `Quality`/`Direction_Angle`/`Flag_Direction`/关联点信息/`x,y,v_x,v_y`/十字星数据等),并补写 `point_type=0` | | 0f3da99 | 增加航迹指纹:`Trust_Track::Track_fingerprint`(16 bit,起批时按末点 `r`/`azi`/`vr`/`RCS`/`CPI_time` 量化 + splitmix64 + 折叠生成);TAS 波束改为下发指纹、TAS 数据帧按指纹匹配航迹(不再按批号),实现 TAS 回放(见 9.12) | | 24ce1e6 | **日志组件由 `std::cout` 重定向改为内置 spdlog v1.17.0**:新增内置第三方库 `third_party/spdlog`(`include/` + `src/` + `LICENSE` + `UPSTREAM.md`,MIT,spdlog v1.17.0 上游快照,含随库内置的 {fmt} 12.1.0);根 `CMakeLists.txt` 新增静态库目标 `spdlog`(`SPDLOG_COMPILED_LIB`,第三方源码以 `/w` 编译)与缓存变量 `RDP_LOG_LEVEL`(`AUTO`/`TRACE`/`DEBUG`/`INFO`/`WARN`/`ERROR`/`CRITICAL`/`OFF`,AUTO 时 Debug=TRACE、其它构建=INFO),映射为 PUBLIC 编译定义 `SPDLOG_ACTIVE_LEVEL` 同时提供给 `data_process_class_dll` 与 `rdp_record`;`data_process_class_dll/rdp_log.h/.cpp` 重写:不再重定向 `std::cout`,`rdp_log::Init()` 创建 `RDP_LOG_DIR`(`.\rdp_logs\`)下 `rdp_YYYYMMDD_HHMMSS.log`(每次 `GetB()` 一个文件,同秒冲突追加 `_1`~`_999`),默认 logger 同时输出到标准输出与文件,行格式 `"[%Y-%m-%d %H:%M:%S.%e] [%l] [%s:%#] %v"`(毫秒时间戳、级别、文件名:行号、内容),所有级别逐条 flush,文件创建失败时降级为仅标准输出并返回 false;`rdp_log::Shutdown()` flush 并关闭日志文件;原流式 `RDP_LOG` 宏改为 `RDP_LOG_TRACE` / `RDP_LOG_DEBUG` / `RDP_LOG_INFO` / `RDP_LOG_WARN` / `RDP_LOG_ERROR` / `RDP_LOG_CRITICAL`(`RDP_LOG_ERR` 为 ERROR 别名)的 fmt 风格调用;`RDP_LOG_ENABLE` 宏已删除,日志级别改由 `SPDLOG_ACTIVE_LEVEL` 在编译期控制(OFF = 编译期关闭且不创建日志文件);`Data_Process_Factory::GetB()` 中启用 `rdp_log::Init()`(在 `rdp_record::Init()` 之前)、`Destroy()` 中在 `rdp_record::Shutdown()` 之后调用 `rdp_log::Shutdown()`;调用点迁移(`data_process.cpp` 参数重载成功 INFO / 失败 ERROR、`track_asso_tas.cpp` ΔT≤0 告警 WARN、`rdp_record.cpp` 19 处 info/warn/error 分级;其余注释代码中的旧宏同步改写);`parameters.h` 删除 `RDP_LOG_ENABLE`、保留 `RDP_LOG_DIR`,注释改为说明 spdlog + `SPDLOG_ACTIVE_LEVEL`。验证(Lead 实测,2026-10-28):4 配置(Release/Debug × REC_OFF/REC_ON)0 warning 0 error;公开接口测试 38 项断言全部通过;运行期实测日志同时写入标准输出与文件、文件名/行格式正确、`Destroy()`→`GetB()` 同秒重连生成 `_1` 后缀新文件。详见 CHANGELOG `[1.5.9]` | diff --git a/config/X1024_MS_4.8S.toml b/config/X1024_MS_4.8S.toml new file mode 100644 index 0000000..8fed1f2 --- /dev/null +++ b/config/X1024_MS_4.8S.toml @@ -0,0 +1,161 @@ +# 雷达数据处理配置文件 +# +# 适用雷达型号:X1024单面阵 +# 工作模式:搜索:机扫/跟踪:单目标转台跟踪 +# 其他:搜索一圈4.8S,TAS数据率30Hz + +## 雷达工作参数 +[radar_params] +# 工作模式:0 近程 / 1 中程 / 2 远程 +radar_work_mode = 0 +# 扫描模式:0 相扫模式 / 1 机扫模式 +scan_mode = 1 +# 频点0频率(GHz) +freq_0_GHz = 9.2 +# 雷达平台高度(m) +radar_height = 0 +# 系统延迟(s) +radar_system_delay = 0 +# TWS模式数据率(s) +data_rate_tws = 4.8 +# TAS模式数据率(s) +data_rate_tas = 0 +# 纯跟踪模式数据率(s) +data_rate_track_only = 0 + +## 点迹凝聚参数 +[cohesion] +# 距离凝聚范围(m) +point_cohesion_range = 80 +# 速度凝聚范围(m/s) +point_cohesion_velocity = 2 +# 方位凝聚范围(度) +point_cohesion_azimuth = 6 +# 最小凝聚距离(m) +point_cohesion_range_min = 100 +# 最大凝聚距离(m) +point_cohesion_range_max = 100000 + +## 航迹关联参数 +[track_associate] +# 距离量测精度(m) +sigma_range = 10.0 +# 方位量测精度(弧度) +sigma_azimuth = 0.02 +# 俯仰量测精度(弧度) +sigma_pitch = 0.2 +# 速度量测精度(m/s) +sigma_velocity = 2.0 +# 关联门限 +associate_threshold = 4.0 +# 最大外推点数 +extrapolate_max = 3 +# TAS最大外推点数 +extrapolate_max_tas = 100 +# 高度平滑窗长 +height_smooth_win = 6 + +## 航迹起始参数 +[track_init] +# 起航波门 +track_init_threshold = 8 +# 起航夹角(度) +track_init_angle = 60 +# 最少起批点数(3~9) +track_init_point_num_min = 3 +# 3点起批质量门限 +track_init_quality_L3 = 0.7 +# 4点起批质量门限 +track_init_quality_L4 = 0.6 +# 5点起批质量门限 +track_init_quality_L5 = 0.5 +# 6点起批质量门限 +track_init_quality_L6 = 0.4 +# 7点起批质量门限 +track_init_quality_L7 = 0.3 +# 航迹起始最小速度(m/s) +track_init_velocity_min = 1 +# 航迹起始最大速度(m/s) +track_init_velocity_max = 50 + +## 航迹消亡参数 +[track_die] +# 航迹消亡圈数 +track_die_round = 5 +# 重点航迹消亡圈数 +track_die_round_pramary = 10 +# TAS航迹消亡圈数 +track_die_round_tas = 300 +# 航迹消批质量条件 +track_die_quality = 0.3 +# 重点航迹消批质量条件 +track_die_quality_pramary = 0.3 + +## 航迹质量管理参数 +[track_quality] +# 航迹质量最大值 +track_quality_max = 100 +# 航迹质量最小值 +track_quality_min = 0 +# 马氏距离权重 +track_quality_d_weight = 0.5 +# 信噪比权重 +track_quality_snr_weight = 0.3 +# 航迹长度权重 +track_quality_len_weight = 0.2 +# 航迹质量迭代系数 +track_quality_iter_coeff = 0.8 +# 航迹质量下降系数2次项(必须 <= 0) +track_quality_decrease_coeff_o2 = -0.0008 +# 航迹质量下降系数1次项(必须 <= 0) +track_quality_decrease_coeff_o1 = -0.0025 + +## 航迹批号管理 +[track_index] +# 最大航迹批号(1~500) +track_index_max = 500 + +## 波束调度 +[beam_control] +# 默认跟踪波束类型 +default_track_beam_type = 1 +# 最大同时跟踪目标数(TAS 队列容量上限 30) +tas_track_num_max = 1 + +## singer模型机动参数(均必须 > 0) +[singer_model] +# 模型1 +model_1_Q_fast = 0.000001 +model_1_Q_slow = 0.000001 +# 模型2 +model_2_Q_fast = 0.01 +model_2_Q_slow = 0.01 +# 模型3 +model_3_Q_fast = 1.0 +model_3_Q_slow = 1.0 + +## 航迹起始屏蔽区(数组元素个数必须等于 track_init_prohibite_area_num) +[track_init_prohibite_area] +# 航迹起始屏蔽区数(0~30) +track_init_prohibite_area_num = 0 +# 最小距离 (m) +track_init_prohibite_area_range_min = [] +# 最大距离 (m) +track_init_prohibite_area_range_max = [] +# 最小方位角 (度) +track_init_prohibite_area_azimuth_min = [] +# 最大方位角 (度) +track_init_prohibite_area_azimuth_max = [] + +## 禁止TAS跟踪区域(数组元素个数必须等于 tas_prohibite_area_num) +[tas_prohibite_area] +# 禁止TAS的区域数(0~30) +tas_prohibite_area_num = 0 +# 最小距离 (m) +tas_prohibite_area_range_min = [] +# 最大距离 (m) +tas_prohibite_area_range_max = [] +# 最小方位角 (度) +tas_prohibite_area_azimuth_min = [] +# 最大方位角 (度) +tas_prohibite_area_azimuth_max = [] diff --git a/config/X256_MS_4S.toml b/config/X256_MS_4S.toml new file mode 100644 index 0000000..ef9cbc0 --- /dev/null +++ b/config/X256_MS_4S.toml @@ -0,0 +1,161 @@ +# 雷达数据处理配置文件 +# +# 适用雷达型号:X256单面阵 +# 工作模式:搜索:机扫/跟踪:单目标转台跟踪 +# 其他:搜索一圈4S,TAS数据率30Hz + +## 雷达工作参数 +[radar_params] +# 工作模式:0 近程 / 1 中程 / 2 远程 +radar_work_mode = 0 +# 扫描模式:0 相扫模式 / 1 机扫模式 +scan_mode = 1 +# 频点0频率(GHz) +freq_0_GHz = 9.2 +# 雷达平台高度(m) +radar_height = 0 +# 系统延迟(s) +radar_system_delay = 0 +# TWS模式数据率(s) +data_rate_tws = 4 +# TAS模式数据率(s) +data_rate_tas = 0 +# 纯跟踪模式数据率(s) +data_rate_track_only = 0 + +## 点迹凝聚参数 +[cohesion] +# 距离凝聚范围(m) +point_cohesion_range = 80 +# 速度凝聚范围(m/s) +point_cohesion_velocity = 2 +# 方位凝聚范围(度) +point_cohesion_azimuth = 6 +# 最小凝聚距离(m) +point_cohesion_range_min = 100 +# 最大凝聚距离(m) +point_cohesion_range_max = 100000 + +## 航迹关联参数 +[track_associate] +# 距离量测精度(m) +sigma_range = 10.0 +# 方位量测精度(弧度) +sigma_azimuth = 0.02 +# 俯仰量测精度(弧度) +sigma_pitch = 0.2 +# 速度量测精度(m/s) +sigma_velocity = 2.0 +# 关联门限 +associate_threshold = 4.0 +# 最大外推点数 +extrapolate_max = 3 +# TAS最大外推点数 +extrapolate_max_tas = 30 +# 高度平滑窗长 +height_smooth_win = 6 + +## 航迹起始参数 +[track_init] +# 起航波门 +track_init_threshold = 8 +# 起航夹角(度) +track_init_angle = 60 +# 最少起批点数(3~9) +track_init_point_num_min = 3 +# 3点起批质量门限 +track_init_quality_L3 = 0.7 +# 4点起批质量门限 +track_init_quality_L4 = 0.6 +# 5点起批质量门限 +track_init_quality_L5 = 0.5 +# 6点起批质量门限 +track_init_quality_L6 = 0.4 +# 7点起批质量门限 +track_init_quality_L7 = 0.3 +# 航迹起始最小速度(m/s) +track_init_velocity_min = 1 +# 航迹起始最大速度(m/s) +track_init_velocity_max = 50 + +## 航迹消亡参数 +[track_die] +# 航迹消亡圈数 +track_die_round = 6 +# 重点航迹消亡圈数 +track_die_round_pramary = 10 +# TAS航迹消亡圈数 +track_die_round_tas = 90 +# 航迹消批质量条件 +track_die_quality = 0.3 +# 重点航迹消批质量条件 +track_die_quality_pramary = 0.3 + +## 航迹质量管理参数 +[track_quality] +# 航迹质量最大值 +track_quality_max = 100 +# 航迹质量最小值 +track_quality_min = 0 +# 马氏距离权重 +track_quality_d_weight = 0.5 +# 信噪比权重 +track_quality_snr_weight = 0.3 +# 航迹长度权重 +track_quality_len_weight = 0.2 +# 航迹质量迭代系数 +track_quality_iter_coeff = 0.8 +# 航迹质量下降系数2次项(必须 <= 0) +track_quality_decrease_coeff_o2 = -0.0008 +# 航迹质量下降系数1次项(必须 <= 0) +track_quality_decrease_coeff_o1 = -0.0025 + +## 航迹批号管理 +[track_index] +# 最大航迹批号(1~500) +track_index_max = 500 + +## 波束调度 +[beam_control] +# 默认跟踪波束类型 +default_track_beam_type = 1 +# 最大同时跟踪目标数(TAS 队列容量上限 30) +tas_track_num_max = 1 + +## singer模型机动参数(均必须 > 0) +[singer_model] +# 模型1 +model_1_Q_fast = 0.000001 +model_1_Q_slow = 0.000001 +# 模型2 +model_2_Q_fast = 0.01 +model_2_Q_slow = 0.01 +# 模型3 +model_3_Q_fast = 1.0 +model_3_Q_slow = 1.0 + +## 航迹起始屏蔽区(数组元素个数必须等于 track_init_prohibite_area_num) +[track_init_prohibite_area] +# 航迹起始屏蔽区数(0~30) +track_init_prohibite_area_num = 0 +# 最小距离 (m) +track_init_prohibite_area_range_min = [] +# 最大距离 (m) +track_init_prohibite_area_range_max = [] +# 最小方位角 (度) +track_init_prohibite_area_azimuth_min = [] +# 最大方位角 (度) +track_init_prohibite_area_azimuth_max = [] + +## 禁止TAS跟踪区域(数组元素个数必须等于 tas_prohibite_area_num) +[tas_prohibite_area] +# 禁止TAS的区域数(0~30) +tas_prohibite_area_num = 0 +# 最小距离 (m) +tas_prohibite_area_range_min = [] +# 最大距离 (m) +tas_prohibite_area_range_max = [] +# 最小方位角 (度) +tas_prohibite_area_azimuth_min = [] +# 最大方位角 (度) +tas_prohibite_area_azimuth_max = [] diff --git a/config/X256_PS_3S_TAS_1Hz.toml b/config/X256_PS_3S_TAS_1Hz.toml new file mode 100644 index 0000000..79e55da --- /dev/null +++ b/config/X256_PS_3S_TAS_1Hz.toml @@ -0,0 +1,161 @@ +# 雷达数据处理配置文件 +# +# 适用雷达型号:X256单面阵/X256多面阵 +# 工作模式:相扫 +# 其他:搜索一圈3S,TAS数据率1Hz + +## 雷达工作参数 +[radar_params] +# 工作模式:0 近程 / 1 中程 / 2 远程 +radar_work_mode = 0 +# 扫描模式:0 相扫模式 / 1 机扫模式 +scan_mode = 0 +# 频点0频率(GHz) +freq_0_GHz = 9.2 +# 雷达平台高度(m) +radar_height = 0 +# 系统延迟(s) +radar_system_delay = 0 +# TWS模式数据率(s) +data_rate_tws = 3 +# TAS模式数据率(s) +data_rate_tas = 0.85 +# 纯跟踪模式数据率(s) +data_rate_track_only = 0 + +## 点迹凝聚参数 +[cohesion] +# 距离凝聚范围(m) +point_cohesion_range = 80 +# 速度凝聚范围(m/s) +point_cohesion_velocity = 2 +# 方位凝聚范围(度) +point_cohesion_azimuth = 6 +# 最小凝聚距离(m) +point_cohesion_range_min = 100 +# 最大凝聚距离(m) +point_cohesion_range_max = 100000 + +## 航迹关联参数 +[track_associate] +# 距离量测精度(m) +sigma_range = 10.0 +# 方位量测精度(弧度) +sigma_azimuth = 0.02 +# 俯仰量测精度(弧度) +sigma_pitch = 0.2 +# 速度量测精度(m/s) +sigma_velocity = 2.0 +# 关联门限 +associate_threshold = 4.0 +# 最大外推点数 +extrapolate_max = 3 +# TAS最大外推点数 +extrapolate_max_tas = 5 +# 高度平滑窗长 +height_smooth_win = 6 + +## 航迹起始参数 +[track_init] +# 起航波门 +track_init_threshold = 8 +# 起航夹角(度) +track_init_angle = 60 +# 最少起批点数(3~9) +track_init_point_num_min = 3 +# 3点起批质量门限 +track_init_quality_L3 = 0.7 +# 4点起批质量门限 +track_init_quality_L4 = 0.6 +# 5点起批质量门限 +track_init_quality_L5 = 0.5 +# 6点起批质量门限 +track_init_quality_L6 = 0.4 +# 7点起批质量门限 +track_init_quality_L7 = 0.3 +# 航迹起始最小速度(m/s) +track_init_velocity_min = 1 +# 航迹起始最大速度(m/s) +track_init_velocity_max = 50 + +## 航迹消亡参数 +[track_die] +# 航迹消亡圈数 +track_die_round = 6 +# 重点航迹消亡圈数 +track_die_round_pramary = 10 +# TAS航迹消亡圈数 +track_die_round_tas = 20 +# 航迹消批质量条件 +track_die_quality = 0.3 +# 重点航迹消批质量条件 +track_die_quality_pramary = 0.3 + +## 航迹质量管理参数 +[track_quality] +# 航迹质量最大值 +track_quality_max = 100 +# 航迹质量最小值 +track_quality_min = 0 +# 马氏距离权重 +track_quality_d_weight = 0.5 +# 信噪比权重 +track_quality_snr_weight = 0.3 +# 航迹长度权重 +track_quality_len_weight = 0.2 +# 航迹质量迭代系数 +track_quality_iter_coeff = 0.8 +# 航迹质量下降系数2次项(必须 <= 0) +track_quality_decrease_coeff_o2 = -0.0008 +# 航迹质量下降系数1次项(必须 <= 0) +track_quality_decrease_coeff_o1 = -0.0025 + +## 航迹批号管理 +[track_index] +# 最大航迹批号(1~500) +track_index_max = 500 + +## 波束调度 +[beam_control] +# 默认跟踪波束类型 +default_track_beam_type = 1 +# 最大同时跟踪目标数(TAS 队列容量上限 30) +tas_track_num_max = 4 + +## singer模型机动参数(均必须 > 0) +[singer_model] +# 模型1 +model_1_Q_fast = 0.000001 +model_1_Q_slow = 0.000001 +# 模型2 +model_2_Q_fast = 0.01 +model_2_Q_slow = 0.01 +# 模型3 +model_3_Q_fast = 1.0 +model_3_Q_slow = 1.0 + +## 航迹起始屏蔽区(数组元素个数必须等于 track_init_prohibite_area_num) +[track_init_prohibite_area] +# 航迹起始屏蔽区数(0~30) +track_init_prohibite_area_num = 0 +# 最小距离 (m) +track_init_prohibite_area_range_min = [] +# 最大距离 (m) +track_init_prohibite_area_range_max = [] +# 最小方位角 (度) +track_init_prohibite_area_azimuth_min = [] +# 最大方位角 (度) +track_init_prohibite_area_azimuth_max = [] + +## 禁止TAS跟踪区域(数组元素个数必须等于 tas_prohibite_area_num) +[tas_prohibite_area] +# 禁止TAS的区域数(0~30) +tas_prohibite_area_num = 0 +# 最小距离 (m) +tas_prohibite_area_range_min = [] +# 最大距离 (m) +tas_prohibite_area_range_max = [] +# 最小方位角 (度) +tas_prohibite_area_azimuth_min = [] +# 最大方位角 (度) +tas_prohibite_area_azimuth_max = [] diff --git a/config/X256_PS_3S_TAS_2Hz.toml b/config/X256_PS_3S_TAS_2Hz.toml new file mode 100644 index 0000000..5f884c8 --- /dev/null +++ b/config/X256_PS_3S_TAS_2Hz.toml @@ -0,0 +1,161 @@ +# 雷达数据处理配置文件 +# +# 适用雷达型号:X256单面阵/X256多面阵 +# 工作模式:相扫 +# 其他:搜索一圈3S,TAS数据率2Hz + +## 雷达工作参数 +[radar_params] +# 工作模式:0 近程 / 1 中程 / 2 远程 +radar_work_mode = 0 +# 扫描模式:0 相扫模式 / 1 机扫模式 +scan_mode = 0 +# 频点0频率(GHz) +freq_0_GHz = 9.2 +# 雷达平台高度(m) +radar_height = 0 +# 系统延迟(s) +radar_system_delay = 0 +# TWS模式数据率(s) +data_rate_tws = 3 +# TAS模式数据率(s) +data_rate_tas = 0.3 +# 纯跟踪模式数据率(s) +data_rate_track_only = 0 + +## 点迹凝聚参数 +[cohesion] +# 距离凝聚范围(m) +point_cohesion_range = 80 +# 速度凝聚范围(m/s) +point_cohesion_velocity = 2 +# 方位凝聚范围(度) +point_cohesion_azimuth = 6 +# 最小凝聚距离(m) +point_cohesion_range_min = 100 +# 最大凝聚距离(m) +point_cohesion_range_max = 100000 + +## 航迹关联参数 +[track_associate] +# 距离量测精度(m) +sigma_range = 10.0 +# 方位量测精度(弧度) +sigma_azimuth = 0.02 +# 俯仰量测精度(弧度) +sigma_pitch = 0.2 +# 速度量测精度(m/s) +sigma_velocity = 2.0 +# 关联门限 +associate_threshold = 4.0 +# 最大外推点数 +extrapolate_max = 3 +# TAS最大外推点数 +extrapolate_max_tas = 5 +# 高度平滑窗长 +height_smooth_win = 6 + +## 航迹起始参数 +[track_init] +# 起航波门 +track_init_threshold = 8 +# 起航夹角(度) +track_init_angle = 60 +# 最少起批点数(3~9) +track_init_point_num_min = 3 +# 3点起批质量门限 +track_init_quality_L3 = 0.7 +# 4点起批质量门限 +track_init_quality_L4 = 0.6 +# 5点起批质量门限 +track_init_quality_L5 = 0.5 +# 6点起批质量门限 +track_init_quality_L6 = 0.4 +# 7点起批质量门限 +track_init_quality_L7 = 0.3 +# 航迹起始最小速度(m/s) +track_init_velocity_min = 1 +# 航迹起始最大速度(m/s) +track_init_velocity_max = 50 + +## 航迹消亡参数 +[track_die] +# 航迹消亡圈数 +track_die_round = 6 +# 重点航迹消亡圈数 +track_die_round_pramary = 10 +# TAS航迹消亡圈数 +track_die_round_tas = 20 +# 航迹消批质量条件 +track_die_quality = 0.3 +# 重点航迹消批质量条件 +track_die_quality_pramary = 0.3 + +## 航迹质量管理参数 +[track_quality] +# 航迹质量最大值 +track_quality_max = 100 +# 航迹质量最小值 +track_quality_min = 0 +# 马氏距离权重 +track_quality_d_weight = 0.5 +# 信噪比权重 +track_quality_snr_weight = 0.3 +# 航迹长度权重 +track_quality_len_weight = 0.2 +# 航迹质量迭代系数 +track_quality_iter_coeff = 0.8 +# 航迹质量下降系数2次项(必须 <= 0) +track_quality_decrease_coeff_o2 = -0.0008 +# 航迹质量下降系数1次项(必须 <= 0) +track_quality_decrease_coeff_o1 = -0.0025 + +## 航迹批号管理 +[track_index] +# 最大航迹批号(1~500) +track_index_max = 500 + +## 波束调度 +[beam_control] +# 默认跟踪波束类型 +default_track_beam_type = 1 +# 最大同时跟踪目标数(TAS 队列容量上限 30) +tas_track_num_max = 4 + +## singer模型机动参数(均必须 > 0) +[singer_model] +# 模型1 +model_1_Q_fast = 0.000001 +model_1_Q_slow = 0.000001 +# 模型2 +model_2_Q_fast = 0.01 +model_2_Q_slow = 0.01 +# 模型3 +model_3_Q_fast = 1.0 +model_3_Q_slow = 1.0 + +## 航迹起始屏蔽区(数组元素个数必须等于 track_init_prohibite_area_num) +[track_init_prohibite_area] +# 航迹起始屏蔽区数(0~30) +track_init_prohibite_area_num = 0 +# 最小距离 (m) +track_init_prohibite_area_range_min = [] +# 最大距离 (m) +track_init_prohibite_area_range_max = [] +# 最小方位角 (度) +track_init_prohibite_area_azimuth_min = [] +# 最大方位角 (度) +track_init_prohibite_area_azimuth_max = [] + +## 禁止TAS跟踪区域(数组元素个数必须等于 tas_prohibite_area_num) +[tas_prohibite_area] +# 禁止TAS的区域数(0~30) +tas_prohibite_area_num = 0 +# 最小距离 (m) +tas_prohibite_area_range_min = [] +# 最大距离 (m) +tas_prohibite_area_range_max = [] +# 最小方位角 (度) +tas_prohibite_area_azimuth_min = [] +# 最大方位角 (度) +tas_prohibite_area_azimuth_max = [] diff --git a/config/config_tmp.toml b/config/config_tmp.toml index 84a9d16..20f3343 100644 --- a/config/config_tmp.toml +++ b/config/config_tmp.toml @@ -20,7 +20,7 @@ radar_height = 0 radar_system_delay = 0 # TWS模式数据率(s) data_rate_tws = 3 -# TAS模式数据率(s) +# TAS模式数据率(s;0 表示不做 DLL 内部 TAS 波束限速,由宿主调用频率决定) data_rate_tas = 1 # 纯跟踪模式数据率(s) data_rate_track_only = 0.2 diff --git a/data_process_class_dll/data_process.cpp b/data_process_class_dll/data_process.cpp index f5e2f0c..da4271f 100644 --- a/data_process_class_dll/data_process.cpp +++ b/data_process_class_dll/data_process.cpp @@ -209,9 +209,8 @@ int model) //查找指定指纹的Track_idx int tas_track_idx = -1; for(auto& t : trust_track){ - if(t.Track_fingerprint == TAS_track_fingerprint){ + if(t.Track_fingerprint == TAS_track_fingerprint && t.manual_untracking_flag == 0){ tas_track_idx = t.Track_Index; - t.manual_tracking_flag = 1; t.Track_Mode = 1; break; } @@ -284,6 +283,8 @@ int Data_Process::track_clear_all(void) tas_ctrl.reset(); last_beam_num = INT_MAX; + RDP_LOG_INFO("All track clear"); + return 0; } @@ -299,7 +300,7 @@ int Data_Process:: track_delete(int delete_track_num, //手动 { trust_track[j].manual_delete_flag=1; - // RDP_LOG_DEBUG("Delete : {}", trust_track[j].Track_Index); + RDP_LOG_INFO("Track <{}> deleted by user", trust_track[j].Track_Index); } } @@ -316,7 +317,7 @@ int Data_Process::primary_target_add(int track_index) if(trust_track[i].Track_Index==track_index) { trust_track[i].primary_target_flag = 1; - //std::cout<< "Add primary target :" << trust_track[i].Track_Index << std::endl; + RDP_LOG_INFO("Track <{}> is set as a primary target by the user", trust_track[i].Track_Index); break; } } @@ -332,7 +333,7 @@ int Data_Process::primary_target_cancel(int track_index) if(trust_track[i].Track_Index==track_index) { trust_track[i].primary_target_flag = 0; - //std::cout<< "Cancel primary target :" << trust_track[i].Track_Index << std::endl; + RDP_LOG_INFO("Track <{}> has been cancelled as a primary target by the user", trust_track[i].Track_Index); break; } } @@ -348,6 +349,8 @@ int Data_Process:: tracking_start(int track_index) //需要手动 if(trust_track[i].Track_Index==track_index) { trust_track[i].manual_tracking_flag = 1; + trust_track[i].manual_untracking_flag = 0; + RDP_LOG_INFO("Track <{}> is set to tracking mode by the user", trust_track[i].Track_Index); break; } } @@ -363,7 +366,8 @@ int Data_Process:: tracking_stop(int track_index) //需要手动转 if(trust_track[i].Track_Index==track_index) { trust_track[i].manual_tracking_flag = 0; - trust_track[i].Track_Mode = 0; + trust_track[i].manual_untracking_flag = 1; + RDP_LOG_INFO("Track <{}> has been canceled from tracking mode by the user", trust_track[i].Track_Index); break; } } diff --git a/data_process_class_dll/rdp_parameter_loader.cpp b/data_process_class_dll/rdp_parameter_loader.cpp index 67eda9a..551ea26 100644 --- a/data_process_class_dll/rdp_parameter_loader.cpp +++ b/data_process_class_dll/rdp_parameter_loader.cpp @@ -366,8 +366,8 @@ bool validate_parameter(const RDP_parameter& p, LoadContext& ctx) return ctx.fail("参数 radar_system_delay 不能为负"); if (!(p.data_rate_tws > 0.0f)) return ctx.fail("参数 data_rate_tws 必须大于 0"); - if (!(p.data_rate_tas > 0.0f)) - return ctx.fail("参数 data_rate_tas 必须大于 0"); + if (p.data_rate_tas < 0.0f) + return ctx.fail("参数 data_rate_tas 不能为负(0 表示不做 DLL 内部 TAS 波束限速,由宿主调用频率决定)"); if (p.data_rate_track_only < 0.0f) return ctx.fail("参数 data_rate_track_only 不能为负"); diff --git a/data_process_class_dll/struct.h b/data_process_class_dll/struct.h index dccfda6..9b8b927 100644 --- a/data_process_class_dll/struct.h +++ b/data_process_class_dll/struct.h @@ -74,6 +74,7 @@ struct Trust_Track int manual_delete_flag; //手动航迹删除 int manual_tracking_flag; //手动TAS + int manual_untracking_flag; //手动取消TAS int primary_target_flag; //重点目标标记 int Target_Type; //目标类型 搜索目标 低空目标 地面目标 diff --git a/data_process_class_dll/tas_ctrl.cpp b/data_process_class_dll/tas_ctrl.cpp index c8b5d22..d298312 100644 --- a/data_process_class_dll/tas_ctrl.cpp +++ b/data_process_class_dll/tas_ctrl.cpp @@ -66,7 +66,7 @@ void TAS_Ctrl::tas_target_add(std::vector *trust_track, && (*trust_track)[i].Track_Mode == 0 && tas_prohibite_area( r, azi, v, h) == 0) { - for(int j=0;j *trust_track, Trust_Track_Output[*Trust_track_num_Output-1][0].Point_Sum=1; double x,y; - x=(*trust_track)[i].X[0]+(*trust_track)[i].X[1]*rdp_parameter.radar_system_delay; - y=(*trust_track)[i].X[3]+(*trust_track)[i].X[4]*rdp_parameter.radar_system_delay; + x=(*trust_track)[i].X[0]; + y=(*trust_track)[i].X[3]; coor_trans Coor_trans; double r, azi; Coor_trans.cart2polar(x, y, &r, &azi); @@ -194,78 +194,116 @@ void TAS_Ctrl::tas_target_del(std::vector *trust_track, { //查找TAS目标是否已经消批 若消批则移出TAS队列 - for (int i=0;isize();j++){ - { - if(tas_target_queue[i].Index==(*trust_track)[j].Track_Index && (*trust_track)[j].Track_Mode == 1 && (*trust_track)[j].manual_tracking_flag == 1) - { + if(tas_target_queue[i].Index==(*trust_track)[j].Track_Index){ + track_index = static_cast(j); + if((*trust_track)[j].Track_Mode == 1 && (*trust_track)[j].manual_tracking_flag == 1){ flag=1; } + break; } } //目标不存在 说明已消批 从队列里删除 if(flag == 0) { + RDP_LOG_INFO("Tatget <{}> delete from TAS queue", tas_target_queue[i].Index); + memset(&tas_target_queue[i],0,sizeof(Tracking_Target)); tas_target_num=tas_target_num-1; + + if(track_index != -1){ + //目标跟踪状态发生改变 对外输出航迹更新信息 + *Trust_track_num_Output= *Trust_track_num_Output+1; + Trust_Track_Output[*Trust_track_num_Output-1][0].Point_Sum=1; + + (*trust_track)[track_index].Track_Mode = 0; + + double x,y; + x=(*trust_track)[track_index].X[0]; + y=(*trust_track)[track_index].X[3]; + coor_trans Coor_trans; + double r, azi; + Coor_trans.cart2polar(x, y, &r, &azi); + Trust_Track_Output[*Trust_track_num_Output-1][0].Range=static_cast(r); + Trust_Track_Output[*Trust_track_num_Output-1][0].Azimuth=static_cast(azi/PI*180); + + if((*trust_track)[track_index].Height(asin((*trust_track)[track_index].Height/r)/PI*180); + else + Trust_Track_Output[*Trust_track_num_Output-1][0].Elevation = static_cast((*trust_track)[track_index].elev_point); + + Trust_Track_Output[*Trust_track_num_Output-1][0].Track_Index=(*trust_track)[track_index].Track_Index; + + Trust_Track_Output[*Trust_track_num_Output-1][0].Range_V = static_cast(sqrt((*trust_track)[track_index].X[1]*(*trust_track)[track_index].X[1]+(*trust_track)[track_index].X[4]*(*trust_track)[track_index].X[4])); + Trust_Track_Output[*Trust_track_num_Output-1][0].Amplitude = static_cast((*trust_track)[track_index].Amplitude); + + Trust_Track_Output[*Trust_track_num_Output-1][0].Track_Mode=(*trust_track)[track_index].Track_Mode; + Trust_Track_Output[*Trust_track_num_Output-1][0].track_time=static_cast((*trust_track)[track_index].T_track/1000.0); + Trust_Track_Output[*Trust_track_num_Output-1][0].GNSS_time=(*trust_track)[track_index].GNSS_time; + Trust_Track_Output[*Trust_track_num_Output-1][0].Flag_Point = (*trust_track)[track_index].point_flag; + Trust_Track_Output[*Trust_track_num_Output-1][0].z=static_cast((*trust_track)[track_index].Height+rdp_parameter.radar_height); + Trust_Track_Output[*Trust_track_num_Output-1][0].Quality = static_cast((*trust_track)[track_index].Quality * rdp_parameter.track_quality_max); + + double Direction_Angle; + Direction_Angle=atan2((*trust_track)[track_index].X[4], (*trust_track)[track_index].X[1]); + if(Direction_Angle<0){Direction_Angle=Direction_Angle+2*PI;} + Trust_Track_Output[*Trust_track_num_Output-1][0].Direction_Angle=static_cast(Direction_Angle/PI*180); + + //关联点信息 + Trust_Track_Output[*Trust_track_num_Output-1][0].range_point=static_cast((*trust_track)[track_index].range_point); + Trust_Track_Output[*Trust_track_num_Output-1][0].azi_point=static_cast((*trust_track)[track_index].azi_point); + Trust_Track_Output[*Trust_track_num_Output-1][0].elev_point=static_cast((*trust_track)[track_index].elev_point); + Trust_Track_Output[*Trust_track_num_Output-1][0].vr_point=static_cast((*trust_track)[track_index].vr_point); + Trust_Track_Output[*Trust_track_num_Output-1][0].point_type=0; + Trust_Track_Output[*Trust_track_num_Output-1][0].prf_point = static_cast((*trust_track)[track_index].prf_point); + Trust_Track_Output[*Trust_track_num_Output-1][0].track_snr = static_cast((*trust_track)[track_index].snr_point); + Trust_Track_Output[*Trust_track_num_Output-1][0].amp_asv_point = static_cast((*trust_track)[track_index].amp_asv_point); + Trust_Track_Output[*Trust_track_num_Output-1][0].prn_fftn_point = static_cast((*trust_track)[track_index].prn_fftn_point); + + //输出平滑后的高度 + Trust_Track_Output[*Trust_track_num_Output-1][0].z = static_cast((*trust_track)[track_index].Height+rdp_parameter.radar_height); + Trust_Track_Output[*Trust_track_num_Output-1][0].x=static_cast((*trust_track)[track_index].X[0]); + Trust_Track_Output[*Trust_track_num_Output-1][0].y=static_cast((*trust_track)[track_index].X[3]); + Trust_Track_Output[*Trust_track_num_Output-1][0].v_x=static_cast((*trust_track)[track_index].X[1]); + Trust_Track_Output[*Trust_track_num_Output-1][0].v_y=static_cast((*trust_track)[track_index].X[4]); + + if(acos((-x * cos(Direction_Angle) - y * sin(Direction_Angle)) / r ) < PI / 2) + { + Trust_Track_Output[*Trust_track_num_Output-1][0].Flag_Direction=1; + // if(r*abs(sin(azi - Direction_Angle))<500) + // { + // Trust_Track_Output[*Trust_track_num_Output-1][0].Flag_Direction=1; + // } + // else + // { + // Trust_Track_Output[*Trust_track_num_Output-1][0].Flag_Direction=0; + // } + } + else + { + Trust_Track_Output[*Trust_track_num_Output-1][0].Flag_Direction=0; + } + + Trust_Track_Output[*Trust_track_num_Output-1][0].track_rcs = static_cast((*trust_track)[track_index].RCS); + Trust_Track_Output[*Trust_track_num_Output-1][0].pitch_num = (*trust_track)[track_index].pitch_num; + + std::memcpy(Trust_Track_Output[*Trust_track_num_Output-1][0].speed_dim, (*trust_track)[track_index].speed_dim, sizeof(Trust_Track_Output[*Trust_track_num_Output-1][0].speed_dim)); + std::memcpy(Trust_Track_Output[*Trust_track_num_Output-1][0].range_dim, (*trust_track)[track_index].range_dim, sizeof(Trust_Track_Output[*Trust_track_num_Output-1][0].range_dim)); + + break; + } } } } - //判断TAS目标是否满足自动跟踪条件 若不满足移除TAS队列 通知界面改变目标状态 -// for ( int i=0;isize();i++) -// { -// double r=sqrt(pow((*trust_track)[i].X[0],2)+pow((*trust_track)[i].X[3],2)); -// double v=sqrt(pow((*trust_track)[i].X[1],2)+pow((*trust_track)[i].X[4],2)); -// double h=(*trust_track)[i].Height+rdp_parameter.radar_height; - -// if((*trust_track)[i].manual_tracking_flag == 0 && (*trust_track)[i].Track_Mode == 1 && tas_auto_end(v,r,h) == 1) //满足结束跟踪条件 -// { - -// int track_index=(*trust_track)[i].Track_Index; - -// for (int ii=0;ii(r_output); -// Trust_Track_Output[*Trust_track_num_Output-1][0].Azimuth=static_cast(azmi_output/PI*180); -// Trust_Track_Output[*Trust_track_num_Output-1][0].Track_Index=(*trust_track)[i].Track_Index; //航迹号 -// Trust_Track_Output[*Trust_track_num_Output-1][0].Range_V=static_cast(sqrt((*trust_track)[i].X[1]*(*trust_track)[i].X[1]+(*trust_track)[i].X[4]*(*trust_track)[i].X[4])); -// Trust_Track_Output[*Trust_track_num_Output-1][0].Amplitude=static_cast((*trust_track)[i].Amplitude); -// Trust_Track_Output[*Trust_track_num_Output-1][0].Flag_Point=(*trust_track)[i].point_flag; -// Trust_Track_Output[*Trust_track_num_Output-1][0].Track_Mode=(*trust_track)[i].Track_Mode; -// Trust_Track_Output[*Trust_track_num_Output-1][0].Elevation=static_cast(asin((*trust_track)[i].Height/r_output)/PI*180); -// Trust_Track_Output[*Trust_track_num_Output-1][0].z=static_cast((*trust_track)[i].Height+rdp_parameter.radar_height); -// Trust_Track_Output[*Trust_track_num_Output-1][0].Target_Type=(*trust_track)[i].Target_Type; -// Trust_Track_Output[*Trust_track_num_Output-1][0].track_snr = static_cast((*trust_track)[i].snr_point); -// } -// } -// } - -// } - }; // 说明:TAS 自动结束(tas_auto_end)的原实现同样依赖未纳入 RDP_parameter 的 @@ -286,7 +324,7 @@ void TAS_Ctrl::tas_beam_output(std::vector *trust_track double X_now[6] = {0}; //查找TAS队列中CPI时间最早的目标且满足TAS数据率的目标 - for(int tas_idx=0;tas_idx *trust_track delta_T_last_track = (latest_timestamp - tas_target_queue[tas_idx].last_track_time) / 1000.0f; //查找CPI时间最早,且满足TAS数据率的目标 - if(CPI_time < earliest_CPI_time && (delta_T_last_track > rdp_parameter.data_rate_tas)) + if(CPI_time < earliest_CPI_time && (delta_T_last_track >= rdp_parameter.data_rate_tas)) { earliest_CPI_time = CPI_time; H_track = (*trust_track)[track_idx].Height; @@ -324,6 +362,7 @@ void TAS_Ctrl::tas_beam_output(std::vector *trust_track if(earliest_track_idx == -1) { Tracking_beam->open_flag = 0; + // RDP_LOG_INFO("TAS close {} {} {}", CPI_time, earliest_CPI_time, delta_T_last_track); return; } diff --git a/docs/data_process_flow_report.md b/docs/data_process_flow_report.md index dc461f7..5ad020d 100644 --- a/docs/data_process_flow_report.md +++ b/docs/data_process_flow_report.md @@ -526,7 +526,7 @@ flowchart TD **要点** -- 门控只用一个条件(e0bf227 修正):目标「距上次波束输出的时间」(`latest_timestamp − last_track_time`)要大于配置项 `data_rate_tas` 秒(单位是秒,由 TOML 配置文件提供、加载器校验须 > 0)→ 保证 TAS 目标的数据率**不随 Beam_Ctrl 的调用频率变化**;修正前还要求「航迹时间与最新时间戳之差」也大于该门限,与"取最早 CPI 目标"的语义冲突,会漏掉本应输出的波束; +- 门控只用一个条件(e0bf227 修正):目标「距上次波束输出的时间」(`latest_timestamp − last_track_time`)要大于配置项 `data_rate_tas` 秒(单位是秒,由 TOML 配置文件提供、加载器校验须 ≥ 0;**0 表示不做 DLL 内部限速、输出间隔由宿主 `Beam_Ctrl` 调用频率决定**)→ 非 0 时保证 TAS 目标的数据率**不随 Beam_Ctrl 的调用频率变化**;修正前还要求「航迹时间与最新时间戳之差」也大于该门限,与"取最早 CPI 目标"的语义冲突,会漏掉本应输出的波束; - 多目标时选**队列中 CPI 时间最早**的目标(同时要求其 CPI 时间早于当前已选者),等价于"按最久未更新者优先"的轮转; - 选中后才按该目标的 CPI 时间算外推步长 `ΔT = (最新时间戳 − CPI 时间)/1000`; - 原来的"每次调用整队循环移位"已停用; @@ -547,7 +547,7 @@ flowchart TD | `[radar_params] freq_0_GHz` | 9.2 | 盲速计算基准频率(原 `FREQ0`) | | `[radar_params] radar_height` / `radar_system_delay` | 0 / 0 | 输出 z 叠加平台高度 / 输出位置系统延迟补偿(原 `Height` / `Sys_delay`) | | `[radar_params] data_rate_tws` | 3 | TWS 未关联航迹外推步长(秒;原按 `work_mode` 在 `DATA_RATE_SHORT/MIDDLE/FAR` 中三选一,现统一单字段) | -| `[radar_params] data_rate_tas` | 1 | TAS 波束输出间隔门控(秒,须 > 0) | +| `[radar_params] data_rate_tas` | 1 | TAS 波束输出间隔门控(秒,≥0;**0=不做 DLL 内部限速,由宿主调用频率决定**) | | `[cohesion] point_cohesion_range/velocity/azimuth` | 80 / 2 / 6 | 凝聚门限:距离 m / 速度 m/s / 方位 °(原 `DOT_COH_*`) | | `[cohesion] point_cohesion_range_min/max` | 100 / 100000 | 有效量程(凝聚后过滤;原 `R_MIN/R_MAX`) | | `[track_associate] sigma_range/azimuth/pitch/velocity` | 10 / 0.02 / 0.2 / 2.0 | 量测噪声、EKF 的 R、转换量测协方差(原 `SIGMA_*`) | From b728ebccf1b43c75564376c1b2308ce9be603195 Mon Sep 17 00:00:00 2001 From: waiwaylee Date: Mon, 2 Nov 2026 14:29:50 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0X1024=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: waiwaylee --- config/X1024_MS_5S.toml | 161 ++++++++++++++++++++++++++++++++ config/X1024_PS_3S_TAS_2Hz.toml | 161 ++++++++++++++++++++++++++++++++ 2 files changed, 322 insertions(+) create mode 100644 config/X1024_MS_5S.toml create mode 100644 config/X1024_PS_3S_TAS_2Hz.toml diff --git a/config/X1024_MS_5S.toml b/config/X1024_MS_5S.toml new file mode 100644 index 0000000..62495ac --- /dev/null +++ b/config/X1024_MS_5S.toml @@ -0,0 +1,161 @@ +# 雷达数据处理配置文件 +# +# 适用雷达型号:X1024单面阵 +# 工作模式:搜索:机扫/跟踪:单目标转台跟踪 +# 其他:搜索一圈5S,TAS数据率145Hz + +## 雷达工作参数 +[radar_params] +# 工作模式:0 近程 / 1 中程 / 2 远程 +radar_work_mode = 0 +# 扫描模式:0 相扫模式 / 1 机扫模式 +scan_mode = 1 +# 频点0频率(GHz) +freq_0_GHz = 9.2 +# 雷达平台高度(m) +radar_height = 0 +# 系统延迟(s) +radar_system_delay = 0 +# TWS模式数据率(s) +data_rate_tws = 5 +# TAS模式数据率(s) +data_rate_tas = 0 +# 纯跟踪模式数据率(s) +data_rate_track_only = 0 + +## 点迹凝聚参数 +[cohesion] +# 距离凝聚范围(m) +point_cohesion_range = 80 +# 速度凝聚范围(m/s) +point_cohesion_velocity = 2 +# 方位凝聚范围(度) +point_cohesion_azimuth = 6 +# 最小凝聚距离(m) +point_cohesion_range_min = 100 +# 最大凝聚距离(m) +point_cohesion_range_max = 100000 + +## 航迹关联参数 +[track_associate] +# 距离量测精度(m) +sigma_range = 10.0 +# 方位量测精度(弧度) +sigma_azimuth = 0.02 +# 俯仰量测精度(弧度) +sigma_pitch = 0.2 +# 速度量测精度(m/s) +sigma_velocity = 2.0 +# 关联门限 +associate_threshold = 4.0 +# 最大外推点数 +extrapolate_max = 3 +# TAS最大外推点数 +extrapolate_max_tas = 150 +# 高度平滑窗长 +height_smooth_win = 6 + +## 航迹起始参数 +[track_init] +# 起航波门 +track_init_threshold = 8 +# 起航夹角(度) +track_init_angle = 60 +# 最少起批点数(3~9) +track_init_point_num_min = 3 +# 3点起批质量门限 +track_init_quality_L3 = 0.7 +# 4点起批质量门限 +track_init_quality_L4 = 0.6 +# 5点起批质量门限 +track_init_quality_L5 = 0.5 +# 6点起批质量门限 +track_init_quality_L6 = 0.4 +# 7点起批质量门限 +track_init_quality_L7 = 0.3 +# 航迹起始最小速度(m/s) +track_init_velocity_min = 1 +# 航迹起始最大速度(m/s) +track_init_velocity_max = 50 + +## 航迹消亡参数 +[track_die] +# 航迹消亡圈数 +track_die_round = 5 +# 重点航迹消亡圈数 +track_die_round_pramary = 10 +# TAS航迹消亡圈数 +track_die_round_tas = 450 +# 航迹消批质量条件 +track_die_quality = 0.3 +# 重点航迹消批质量条件 +track_die_quality_pramary = 0.3 + +## 航迹质量管理参数 +[track_quality] +# 航迹质量最大值 +track_quality_max = 100 +# 航迹质量最小值 +track_quality_min = 0 +# 马氏距离权重 +track_quality_d_weight = 0.5 +# 信噪比权重 +track_quality_snr_weight = 0.3 +# 航迹长度权重 +track_quality_len_weight = 0.2 +# 航迹质量迭代系数 +track_quality_iter_coeff = 0.8 +# 航迹质量下降系数2次项(必须 <= 0) +track_quality_decrease_coeff_o2 = -0.0008 +# 航迹质量下降系数1次项(必须 <= 0) +track_quality_decrease_coeff_o1 = -0.0025 + +## 航迹批号管理 +[track_index] +# 最大航迹批号(1~500) +track_index_max = 500 + +## 波束调度 +[beam_control] +# 默认跟踪波束类型 +default_track_beam_type = 1 +# 最大同时跟踪目标数(TAS 队列容量上限 30) +tas_track_num_max = 1 + +## singer模型机动参数(均必须 > 0) +[singer_model] +# 模型1 +model_1_Q_fast = 0.000001 +model_1_Q_slow = 0.000001 +# 模型2 +model_2_Q_fast = 0.01 +model_2_Q_slow = 0.01 +# 模型3 +model_3_Q_fast = 1.0 +model_3_Q_slow = 1.0 + +## 航迹起始屏蔽区(数组元素个数必须等于 track_init_prohibite_area_num) +[track_init_prohibite_area] +# 航迹起始屏蔽区数(0~30) +track_init_prohibite_area_num = 0 +# 最小距离 (m) +track_init_prohibite_area_range_min = [] +# 最大距离 (m) +track_init_prohibite_area_range_max = [] +# 最小方位角 (度) +track_init_prohibite_area_azimuth_min = [] +# 最大方位角 (度) +track_init_prohibite_area_azimuth_max = [] + +## 禁止TAS跟踪区域(数组元素个数必须等于 tas_prohibite_area_num) +[tas_prohibite_area] +# 禁止TAS的区域数(0~30) +tas_prohibite_area_num = 0 +# 最小距离 (m) +tas_prohibite_area_range_min = [] +# 最大距离 (m) +tas_prohibite_area_range_max = [] +# 最小方位角 (度) +tas_prohibite_area_azimuth_min = [] +# 最大方位角 (度) +tas_prohibite_area_azimuth_max = [] diff --git a/config/X1024_PS_3S_TAS_2Hz.toml b/config/X1024_PS_3S_TAS_2Hz.toml new file mode 100644 index 0000000..e194d72 --- /dev/null +++ b/config/X1024_PS_3S_TAS_2Hz.toml @@ -0,0 +1,161 @@ +# 雷达数据处理配置文件 +# +# 适用雷达型号:X1024面阵 +# 工作模式:相扫 +# 其他:搜索一圈3S,TAS数据率2Hz + +## 雷达工作参数 +[radar_params] +# 工作模式:0 近程 / 1 中程 / 2 远程 +radar_work_mode = 0 +# 扫描模式:0 相扫模式 / 1 机扫模式 +scan_mode = 0 +# 频点0频率(GHz) +freq_0_GHz = 9.2 +# 雷达平台高度(m) +radar_height = 0 +# 系统延迟(s) +radar_system_delay = 0 +# TWS模式数据率(s) +data_rate_tws = 3 +# TAS模式数据率(s) +data_rate_tas = 0.4 +# 纯跟踪模式数据率(s) +data_rate_track_only = 0 + +## 点迹凝聚参数 +[cohesion] +# 距离凝聚范围(m) +point_cohesion_range = 80 +# 速度凝聚范围(m/s) +point_cohesion_velocity = 2 +# 方位凝聚范围(度) +point_cohesion_azimuth = 6 +# 最小凝聚距离(m) +point_cohesion_range_min = 100 +# 最大凝聚距离(m) +point_cohesion_range_max = 100000 + +## 航迹关联参数 +[track_associate] +# 距离量测精度(m) +sigma_range = 10.0 +# 方位量测精度(弧度) +sigma_azimuth = 0.02 +# 俯仰量测精度(弧度) +sigma_pitch = 0.2 +# 速度量测精度(m/s) +sigma_velocity = 2.0 +# 关联门限 +associate_threshold = 4.0 +# 最大外推点数 +extrapolate_max = 3 +# TAS最大外推点数 +extrapolate_max_tas = 5 +# 高度平滑窗长 +height_smooth_win = 6 + +## 航迹起始参数 +[track_init] +# 起航波门 +track_init_threshold = 8 +# 起航夹角(度) +track_init_angle = 60 +# 最少起批点数(3~9) +track_init_point_num_min = 3 +# 3点起批质量门限 +track_init_quality_L3 = 0.7 +# 4点起批质量门限 +track_init_quality_L4 = 0.6 +# 5点起批质量门限 +track_init_quality_L5 = 0.5 +# 6点起批质量门限 +track_init_quality_L6 = 0.4 +# 7点起批质量门限 +track_init_quality_L7 = 0.3 +# 航迹起始最小速度(m/s) +track_init_velocity_min = 1 +# 航迹起始最大速度(m/s) +track_init_velocity_max = 50 + +## 航迹消亡参数 +[track_die] +# 航迹消亡圈数 +track_die_round = 6 +# 重点航迹消亡圈数 +track_die_round_pramary = 10 +# TAS航迹消亡圈数 +track_die_round_tas = 20 +# 航迹消批质量条件 +track_die_quality = 0.3 +# 重点航迹消批质量条件 +track_die_quality_pramary = 0.3 + +## 航迹质量管理参数 +[track_quality] +# 航迹质量最大值 +track_quality_max = 100 +# 航迹质量最小值 +track_quality_min = 0 +# 马氏距离权重 +track_quality_d_weight = 0.5 +# 信噪比权重 +track_quality_snr_weight = 0.3 +# 航迹长度权重 +track_quality_len_weight = 0.2 +# 航迹质量迭代系数 +track_quality_iter_coeff = 0.8 +# 航迹质量下降系数2次项(必须 <= 0) +track_quality_decrease_coeff_o2 = -0.0008 +# 航迹质量下降系数1次项(必须 <= 0) +track_quality_decrease_coeff_o1 = -0.0025 + +## 航迹批号管理 +[track_index] +# 最大航迹批号(1~500) +track_index_max = 500 + +## 波束调度 +[beam_control] +# 默认跟踪波束类型 +default_track_beam_type = 1 +# 最大同时跟踪目标数(TAS 队列容量上限 30) +tas_track_num_max = 4 + +## singer模型机动参数(均必须 > 0) +[singer_model] +# 模型1 +model_1_Q_fast = 0.000001 +model_1_Q_slow = 0.000001 +# 模型2 +model_2_Q_fast = 0.01 +model_2_Q_slow = 0.01 +# 模型3 +model_3_Q_fast = 1.0 +model_3_Q_slow = 1.0 + +## 航迹起始屏蔽区(数组元素个数必须等于 track_init_prohibite_area_num) +[track_init_prohibite_area] +# 航迹起始屏蔽区数(0~30) +track_init_prohibite_area_num = 0 +# 最小距离 (m) +track_init_prohibite_area_range_min = [] +# 最大距离 (m) +track_init_prohibite_area_range_max = [] +# 最小方位角 (度) +track_init_prohibite_area_azimuth_min = [] +# 最大方位角 (度) +track_init_prohibite_area_azimuth_max = [] + +## 禁止TAS跟踪区域(数组元素个数必须等于 tas_prohibite_area_num) +[tas_prohibite_area] +# 禁止TAS的区域数(0~30) +tas_prohibite_area_num = 0 +# 最小距离 (m) +tas_prohibite_area_range_min = [] +# 最大距离 (m) +tas_prohibite_area_range_max = [] +# 最小方位角 (度) +tas_prohibite_area_azimuth_min = [] +# 最大方位角 (度) +tas_prohibite_area_azimuth_max = [] From 66cabb8b458145820bc93abcb99acea04d01641a Mon Sep 17 00:00:00 2001 From: waiwaylee Date: Tue, 3 Nov 2026 09:34:25 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0TAS=E6=B3=A2=E6=9D=9F=E4=BF=AF=E4=BB=B0?= =?UTF-8?q?=E8=A7=92=E4=B8=8B=E9=99=90=EF=BC=8C=E9=81=BF=E5=85=8DTAS?= =?UTF-8?q?=E6=B3=A2=E6=9D=9F=E6=89=93=E5=88=B0=E5=9C=B0=E9=9D=A2=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: waiwaylee --- config/X1024_MS_4.8S.toml | 2 ++ config/X1024_MS_5S.toml | 2 ++ config/X1024_PS_3S_TAS_2Hz.toml | 2 ++ config/X256_MS_4S.toml | 2 ++ config/X256_PS_3S_TAS_1Hz.toml | 2 ++ config/X256_PS_3S_TAS_2Hz.toml | 2 ++ config/config_tmp.toml | 2 ++ data_process_class_dll/rdp_parameter_loader.cpp | 2 ++ data_process_class_dll/struct.h | 1 + data_process_class_dll/tas_ctrl.cpp | 2 +- 10 files changed, 18 insertions(+), 1 deletion(-) diff --git a/config/X1024_MS_4.8S.toml b/config/X1024_MS_4.8S.toml index 8fed1f2..5e67643 100644 --- a/config/X1024_MS_4.8S.toml +++ b/config/X1024_MS_4.8S.toml @@ -121,6 +121,8 @@ track_index_max = 500 default_track_beam_type = 1 # 最大同时跟踪目标数(TAS 队列容量上限 30) tas_track_num_max = 1 +# TAS波束最小俯仰角度 +tas_beam_pitch_min = 3.0 ## singer模型机动参数(均必须 > 0) [singer_model] diff --git a/config/X1024_MS_5S.toml b/config/X1024_MS_5S.toml index 62495ac..4c50331 100644 --- a/config/X1024_MS_5S.toml +++ b/config/X1024_MS_5S.toml @@ -121,6 +121,8 @@ track_index_max = 500 default_track_beam_type = 1 # 最大同时跟踪目标数(TAS 队列容量上限 30) tas_track_num_max = 1 +# TAS波束最小俯仰角度 +tas_beam_pitch_min = 3.0 ## singer模型机动参数(均必须 > 0) [singer_model] diff --git a/config/X1024_PS_3S_TAS_2Hz.toml b/config/X1024_PS_3S_TAS_2Hz.toml index e194d72..7cd3953 100644 --- a/config/X1024_PS_3S_TAS_2Hz.toml +++ b/config/X1024_PS_3S_TAS_2Hz.toml @@ -121,6 +121,8 @@ track_index_max = 500 default_track_beam_type = 1 # 最大同时跟踪目标数(TAS 队列容量上限 30) tas_track_num_max = 4 +# TAS波束最小俯仰角度 +tas_beam_pitch_min = 3.0 ## singer模型机动参数(均必须 > 0) [singer_model] diff --git a/config/X256_MS_4S.toml b/config/X256_MS_4S.toml index ef9cbc0..57a056b 100644 --- a/config/X256_MS_4S.toml +++ b/config/X256_MS_4S.toml @@ -121,6 +121,8 @@ track_index_max = 500 default_track_beam_type = 1 # 最大同时跟踪目标数(TAS 队列容量上限 30) tas_track_num_max = 1 +# TAS波束最小俯仰角度 +tas_beam_pitch_min = 5.4 ## singer模型机动参数(均必须 > 0) [singer_model] diff --git a/config/X256_PS_3S_TAS_1Hz.toml b/config/X256_PS_3S_TAS_1Hz.toml index 79e55da..5862e58 100644 --- a/config/X256_PS_3S_TAS_1Hz.toml +++ b/config/X256_PS_3S_TAS_1Hz.toml @@ -121,6 +121,8 @@ track_index_max = 500 default_track_beam_type = 1 # 最大同时跟踪目标数(TAS 队列容量上限 30) tas_track_num_max = 4 +# TAS波束最小俯仰角度 +tas_beam_pitch_min = 5.4 ## singer模型机动参数(均必须 > 0) [singer_model] diff --git a/config/X256_PS_3S_TAS_2Hz.toml b/config/X256_PS_3S_TAS_2Hz.toml index 5f884c8..e1c0421 100644 --- a/config/X256_PS_3S_TAS_2Hz.toml +++ b/config/X256_PS_3S_TAS_2Hz.toml @@ -121,6 +121,8 @@ track_index_max = 500 default_track_beam_type = 1 # 最大同时跟踪目标数(TAS 队列容量上限 30) tas_track_num_max = 4 +# TAS波束最小俯仰角度 +tas_beam_pitch_min = 5.4 ## singer模型机动参数(均必须 > 0) [singer_model] diff --git a/config/config_tmp.toml b/config/config_tmp.toml index 20f3343..e670119 100644 --- a/config/config_tmp.toml +++ b/config/config_tmp.toml @@ -123,6 +123,8 @@ track_index_max = 500 default_track_beam_type = 1 # 最大同时跟踪目标数(TAS 队列容量上限 30) tas_track_num_max = 4 +# TAS波束最小俯仰角度 +tas_beam_pitch_min = 3.0 ## singer模型机动参数(均必须 > 0) [singer_model] diff --git a/data_process_class_dll/rdp_parameter_loader.cpp b/data_process_class_dll/rdp_parameter_loader.cpp index 551ea26..3000b17 100644 --- a/data_process_class_dll/rdp_parameter_loader.cpp +++ b/data_process_class_dll/rdp_parameter_loader.cpp @@ -128,6 +128,8 @@ const FloatField kFloatFields[] = { {"track_quality", "track_quality_iter_coeff", &RDP_parameter::track_quality_iter_coeff}, {"track_quality", "track_quality_decrease_coeff_o2", &RDP_parameter::track_quality_decrease_coeff_o2}, {"track_quality", "track_quality_decrease_coeff_o1", &RDP_parameter::track_quality_decrease_coeff_o1}, + // [beam_control] 波束调度参数 + {"beam_control", "tas_beam_pitch_min", &RDP_parameter::tas_beam_pitch_min}, // [singer_model] singer 模型机动参数 {"singer_model", "model_1_Q_fast", &RDP_parameter::model_1_Q_fast}, {"singer_model", "model_1_Q_slow", &RDP_parameter::model_1_Q_slow}, diff --git a/data_process_class_dll/struct.h b/data_process_class_dll/struct.h index 9b8b927..ebadf22 100644 --- a/data_process_class_dll/struct.h +++ b/data_process_class_dll/struct.h @@ -256,6 +256,7 @@ struct RDP_parameter // ******************* 波束调度参数 ************************// int default_track_beam_type; //默认跟踪波束类型 int tas_track_num_max; //最大同时跟踪目标数 + float tas_beam_pitch_min; //TAS跟踪波束俯仰最小值 // ******************* singer模型机动参数 ************************// float model_1_Q_fast; //模型1 diff --git a/data_process_class_dll/tas_ctrl.cpp b/data_process_class_dll/tas_ctrl.cpp index d298312..476c4c9 100644 --- a/data_process_class_dll/tas_ctrl.cpp +++ b/data_process_class_dll/tas_ctrl.cpp @@ -391,7 +391,7 @@ void TAS_Ctrl::tas_beam_output(std::vector *trust_track // else // elev=elev; - Tracking_beam->Elev=(float)elev; + Tracking_beam->Elev= max((float)elev, rdp_parameter.tas_beam_pitch_min); //跟踪波束类型 Tracking_beam->type=rdp_parameter.default_track_beam_type; From a002961e012b3f0013063be83e7f589c648b86b3 Mon Sep 17 00:00:00 2001 From: waiwaylee Date: Tue, 3 Nov 2026 15:19:09 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0Ku2304=E9=9B=B7=E8=BE=BE=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: waiwaylee --- config/Ku2304_PS.toml | 163 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 config/Ku2304_PS.toml diff --git a/config/Ku2304_PS.toml b/config/Ku2304_PS.toml new file mode 100644 index 0000000..f579601 --- /dev/null +++ b/config/Ku2304_PS.toml @@ -0,0 +1,163 @@ +# 雷达数据处理配置文件(TOML 格式) +# +# 适用雷达型号:Ku2304单面阵 +# 工作模式:搜索:机扫/跟踪:单目标转台跟踪 +# 其他:搜索一圈4S,TAS数据率30Hz + +## 雷达工作参数 +[radar_params] +# 工作模式:0 近程 / 1 中程 / 2 远程 +radar_work_mode = 0 +# 扫描模式:0 相扫模式 / 1 机扫模式 +scan_mode = 0 +# 频点0频率(GHz) +freq_0_GHz = 16.5 +# 雷达平台高度(m) +radar_height = 0 +# 系统延迟(s) +radar_system_delay = 0 +# TWS模式数据率(s) +data_rate_tws = 0.0342 +# TAS模式数据率(s;0 表示不做 DLL 内部 TAS 波束限速,由宿主调用频率决定) +data_rate_tas = 0 +# 纯跟踪模式数据率(s) +data_rate_track_only = 0 + +## 点迹凝聚参数 +[cohesion] +# 距离凝聚范围(m) +point_cohesion_range = 80 +# 速度凝聚范围(m/s) +point_cohesion_velocity = 2 +# 方位凝聚范围(度) +point_cohesion_azimuth = 6 +# 最小凝聚距离(m) +point_cohesion_range_min = 100 +# 最大凝聚距离(m) +point_cohesion_range_max = 100000 + +## 航迹关联参数 +[track_associate] +# 距离量测精度(m) +sigma_range = 10.0 +# 方位量测精度(弧度) +sigma_azimuth = 0.02 +# 俯仰量测精度(弧度) +sigma_pitch = 0.2 +# 速度量测精度(m/s) +sigma_velocity = 2.0 +# 关联门限 +associate_threshold = 4.0 +# 最大外推点数 +extrapolate_max = 0 +# TAS最大外推点数 +extrapolate_max_tas = 0 +# 高度平滑窗长 +height_smooth_win = 6 + +## 航迹起始参数 +[track_init] +# 起航波门 +track_init_threshold = 8 +# 起航夹角(度) +track_init_angle = 60 +# 最少起批点数(3~9) +track_init_point_num_min = 3 +# 3点起批质量门限 +track_init_quality_L3 = 0.7 +# 4点起批质量门限 +track_init_quality_L4 = 0.6 +# 5点起批质量门限 +track_init_quality_L5 = 0.5 +# 6点起批质量门限 +track_init_quality_L6 = 0.4 +# 7点起批质量门限 +track_init_quality_L7 = 0.3 +# 航迹起始最小速度(m/s) +track_init_velocity_min = 1 +# 航迹起始最大速度(m/s) +track_init_velocity_max = 1000 + +## 航迹消亡参数 +[track_die] +# 航迹消亡圈数 +track_die_round = 6 +# 重点航迹消亡圈数 +track_die_round_pramary = 10 +# TAS航迹消亡圈数 +track_die_round_tas = 20 +# 航迹消批质量条件 +track_die_quality = 0.3 +# 重点航迹消批质量条件 +track_die_quality_pramary = 0.3 + +## 航迹质量管理参数 +[track_quality] +# 航迹质量最大值 +track_quality_max = 100 +# 航迹质量最小值 +track_quality_min = 0 +# 马氏距离权重 +track_quality_d_weight = 0.5 +# 信噪比权重 +track_quality_snr_weight = 0.3 +# 航迹长度权重 +track_quality_len_weight = 0.2 +# 航迹质量迭代系数 +track_quality_iter_coeff = 0.8 +# 航迹质量下降系数2次项(必须 <= 0) +track_quality_decrease_coeff_o2 = -0.0008 +# 航迹质量下降系数1次项(必须 <= 0) +track_quality_decrease_coeff_o1 = -0.0025 + +## 航迹批号管理 +[track_index] +# 最大航迹批号(1~500) +track_index_max = 500 + +## 波束调度 +[beam_control] +# 默认跟踪波束类型 +default_track_beam_type = 1 +# 最大同时跟踪目标数(TAS 队列容量上限 30) +tas_track_num_max = 1 +# TAS波束最小俯仰角度 +tas_beam_pitch_min = -90.0 + +## singer模型机动参数(均必须 > 0) +[singer_model] +# 模型1 +model_1_Q_fast = 0.000001 +model_1_Q_slow = 0.000001 +# 模型2 +model_2_Q_fast = 0.01 +model_2_Q_slow = 0.01 +# 模型3 +model_3_Q_fast = 1.0 +model_3_Q_slow = 1.0 + +## 航迹起始屏蔽区(数组元素个数必须等于 track_init_prohibite_area_num) +[track_init_prohibite_area] +# 航迹起始屏蔽区数(0~30) +track_init_prohibite_area_num = 0 +# 最小距离 (m) +track_init_prohibite_area_range_min = [] +# 最大距离 (m) +track_init_prohibite_area_range_max = [] +# 最小方位角 (度) +track_init_prohibite_area_azimuth_min = [] +# 最大方位角 (度) +track_init_prohibite_area_azimuth_max = [] + +## 禁止TAS跟踪区域(数组元素个数必须等于 tas_prohibite_area_num) +[tas_prohibite_area] +# 禁止TAS的区域数(0~30) +tas_prohibite_area_num = 0 +# 最小距离 (m) +tas_prohibite_area_range_min = [] +# 最大距离 (m) +tas_prohibite_area_range_max = [] +# 最小方位角 (度) +tas_prohibite_area_azimuth_min = [] +# 最大方位角 (度) +tas_prohibite_area_azimuth_max = [] From 4926e90791fe250bd381f94a9917e971216db585 Mon Sep 17 00:00:00 2001 From: waiwaylee Date: Tue, 3 Nov 2026 15:59:37 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=A2=91=E7=8E=87=E6=AD=A5=E8=BF=9B=E5=80=BC?= =?UTF-8?q?=E5=8F=82=E6=95=B0=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: waiwaylee --- config/Ku2304_PS.toml | 2 ++ data_process_class_dll/kalman.cpp | 2 +- data_process_class_dll/rdp_parameter_loader.cpp | 3 +++ data_process_class_dll/struct.h | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/config/Ku2304_PS.toml b/config/Ku2304_PS.toml index f579601..63382f6 100644 --- a/config/Ku2304_PS.toml +++ b/config/Ku2304_PS.toml @@ -12,6 +12,8 @@ radar_work_mode = 0 scan_mode = 0 # 频点0频率(GHz) freq_0_GHz = 16.5 +# 频点步进(GHz) +freq_step_GHz = 0.05 # 雷达平台高度(m) radar_height = 0 # 系统延迟(s) diff --git a/data_process_class_dll/kalman.cpp b/data_process_class_dll/kalman.cpp index e140d83..d93579a 100644 --- a/data_process_class_dll/kalman.cpp +++ b/data_process_class_dll/kalman.cpp @@ -779,7 +779,7 @@ double kalman::d_cal_track_init_with_doppler(double Z[2],double X[4],double P[4] double kalman::Bind_speed(double prt,double freq_ind) { - double freq=rdp_parameter.freq_0_GHz+freq_ind*0.02; + double freq=rdp_parameter.freq_0_GHz + freq_ind * rdp_parameter.freq_step_GHz; if (prt <= 0.0 || freq <= 0.0) return 1.0; // 避免除零;正常流程 PRI 不允许为 0 diff --git a/data_process_class_dll/rdp_parameter_loader.cpp b/data_process_class_dll/rdp_parameter_loader.cpp index 3000b17..d61f9ac 100644 --- a/data_process_class_dll/rdp_parameter_loader.cpp +++ b/data_process_class_dll/rdp_parameter_loader.cpp @@ -89,6 +89,7 @@ struct IntField const FloatField kFloatFields[] = { // [radar_params] 雷达工作参数 {"radar_params", "freq_0_GHz", &RDP_parameter::freq_0_GHz}, + {"radar_params", "freq_step_GHz", &RDP_parameter::freq_step_GHz}, {"radar_params", "radar_height", &RDP_parameter::radar_height}, {"radar_params", "radar_system_delay", &RDP_parameter::radar_system_delay}, {"radar_params", "data_rate_tws", &RDP_parameter::data_rate_tws}, @@ -364,6 +365,8 @@ bool validate_parameter(const RDP_parameter& p, LoadContext& ctx) return ctx.fail("参数 scan_mode 必须为 0(相扫模式)或 1(机扫模式)(实际 " + std::to_string(p.scan_mode) + ")"); if (!(p.freq_0_GHz > 0.0f)) return ctx.fail("参数 freq_0_GHz 必须大于 0"); + if (!(p.freq_step_GHz > 0.0f)) + return ctx.fail("参数 freq_step_GHz 必须大于 0"); if (p.radar_system_delay < 0.0f) return ctx.fail("参数 radar_system_delay 不能为负"); if (!(p.data_rate_tws > 0.0f)) diff --git a/data_process_class_dll/struct.h b/data_process_class_dll/struct.h index ebadf22..7a3b6c5 100644 --- a/data_process_class_dll/struct.h +++ b/data_process_class_dll/struct.h @@ -198,6 +198,7 @@ struct RDP_parameter int radar_work_mode; //工作模式 int scan_mode; //扫描模式 0=相扫模式 1=机扫模式 float freq_0_GHz; //频点0频率 + float freq_step_GHz; //频点步进值 float radar_height; //雷达平台高度 (m) float radar_system_delay; //系统延迟 (s) float data_rate_tws; //TWS模式数据率 From 95118d85cc627c3b24307ce1e34b4e788f9f416a Mon Sep 17 00:00:00 2001 From: waiwaylee Date: Tue, 3 Nov 2026 16:00:55 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: waiwaylee --- config/X1024_MS_4.8S.toml | 2 ++ config/X1024_MS_5S.toml | 2 ++ config/X1024_PS_3S_TAS_2Hz.toml | 2 ++ config/X256_MS_4S.toml | 2 ++ config/X256_PS_3S_TAS_1Hz.toml | 2 ++ config/X256_PS_3S_TAS_2Hz.toml | 2 ++ config/config_tmp.toml | 2 ++ 7 files changed, 14 insertions(+) diff --git a/config/X1024_MS_4.8S.toml b/config/X1024_MS_4.8S.toml index 5e67643..1239452 100644 --- a/config/X1024_MS_4.8S.toml +++ b/config/X1024_MS_4.8S.toml @@ -12,6 +12,8 @@ radar_work_mode = 0 scan_mode = 1 # 频点0频率(GHz) freq_0_GHz = 9.2 +# 频点步进(GHz) +freq_step_GHz = 0.02 # 雷达平台高度(m) radar_height = 0 # 系统延迟(s) diff --git a/config/X1024_MS_5S.toml b/config/X1024_MS_5S.toml index 4c50331..61fe752 100644 --- a/config/X1024_MS_5S.toml +++ b/config/X1024_MS_5S.toml @@ -12,6 +12,8 @@ radar_work_mode = 0 scan_mode = 1 # 频点0频率(GHz) freq_0_GHz = 9.2 +# 频点步进(GHz) +freq_step_GHz = 0.02 # 雷达平台高度(m) radar_height = 0 # 系统延迟(s) diff --git a/config/X1024_PS_3S_TAS_2Hz.toml b/config/X1024_PS_3S_TAS_2Hz.toml index 7cd3953..6e399a7 100644 --- a/config/X1024_PS_3S_TAS_2Hz.toml +++ b/config/X1024_PS_3S_TAS_2Hz.toml @@ -12,6 +12,8 @@ radar_work_mode = 0 scan_mode = 0 # 频点0频率(GHz) freq_0_GHz = 9.2 +# 频点步进(GHz) +freq_step_GHz = 0.02 # 雷达平台高度(m) radar_height = 0 # 系统延迟(s) diff --git a/config/X256_MS_4S.toml b/config/X256_MS_4S.toml index 57a056b..091f1b9 100644 --- a/config/X256_MS_4S.toml +++ b/config/X256_MS_4S.toml @@ -12,6 +12,8 @@ radar_work_mode = 0 scan_mode = 1 # 频点0频率(GHz) freq_0_GHz = 9.2 +# 频点步进(GHz) +freq_step_GHz = 0.02 # 雷达平台高度(m) radar_height = 0 # 系统延迟(s) diff --git a/config/X256_PS_3S_TAS_1Hz.toml b/config/X256_PS_3S_TAS_1Hz.toml index 5862e58..8315497 100644 --- a/config/X256_PS_3S_TAS_1Hz.toml +++ b/config/X256_PS_3S_TAS_1Hz.toml @@ -12,6 +12,8 @@ radar_work_mode = 0 scan_mode = 0 # 频点0频率(GHz) freq_0_GHz = 9.2 +# 频点步进(GHz) +freq_step_GHz = 0.02 # 雷达平台高度(m) radar_height = 0 # 系统延迟(s) diff --git a/config/X256_PS_3S_TAS_2Hz.toml b/config/X256_PS_3S_TAS_2Hz.toml index e1c0421..6cad1bf 100644 --- a/config/X256_PS_3S_TAS_2Hz.toml +++ b/config/X256_PS_3S_TAS_2Hz.toml @@ -12,6 +12,8 @@ radar_work_mode = 0 scan_mode = 0 # 频点0频率(GHz) freq_0_GHz = 9.2 +# 频点步进(GHz) +freq_step_GHz = 0.02 # 雷达平台高度(m) radar_height = 0 # 系统延迟(s) diff --git a/config/config_tmp.toml b/config/config_tmp.toml index e670119..7cf5705 100644 --- a/config/config_tmp.toml +++ b/config/config_tmp.toml @@ -14,6 +14,8 @@ radar_work_mode = 0 scan_mode = 0 # 频点0频率(GHz) freq_0_GHz = 9.2 +# 频点步进(GHz) +freq_step_GHz = 0.02 # 雷达平台高度(m) radar_height = 0 # 系统延迟(s)