更新:1、更新文档;

Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
2026-11-05 15:38:26 +08:00
parent c3d5b8fcff
commit 2943788356
5 changed files with 100 additions and 46 deletions
+23 -14
View File
@@ -395,16 +395,16 @@ dis ≥ |v_r,head| · ΔT 同上,用航迹头的多普勒约
| 通道 | 条件(满足其一即消亡) |
|---|---|
| TWS 普通航迹 | `Track_Mode==0` 且 `primary_target_flag==0` 且 **`Quality < track_die_quality`(配置项 0.3)** —— V1.5.8(782bff5)起改按航迹质量,不再看外推圈数 |
| TWS 普通航迹 | `Track_Mode==0` 且 `primary_target_flag==0` 且(`track_die_quality_enable==1` → **`Quality < track_die_quality`(配置项 0.3)**;`==0` → **`Extrapolate_round > track_die_round`(配置项 6)**) |
| TWS 重点航迹 | `Track_Mode==0` 且 `primary_target_flag==1` 且 `Extrapolate_round > track_die_round_pramary`(配置项 10) |
| TAS 航迹 | `Track_Mode==1` 且 `Extrapolate_round > track_die_round_tas`(配置项;样例相扫 20 / 机扫需配 96) |
| 手动删除 | `manual_delete_flag == 1`(各通道单独判定,置位即消亡,由外部删除接口 `track_delete` 置位) |
轮数类判据都改为 `die_flag` 组合("或"关系),且比较符由 `>=` 改为 `>`(50e0b5c):即允许的外推圈数比旧版各多 1 圈,且**重点航迹与普通航迹走不同门限**。由于每圈未关联只自增 1,判据为 `>` 时实际是"连续 N+1 圈没有实点关联"才消亡:重点航迹 11 圈、TAS 相扫 21 圈(阈值于 5d105d2 由 10 提高到 20)/ 机扫 97 圈。
> **普通 TWS 航迹的消亡时长(V1.5.8)**:改按质量后不再有固定圈数,存活时长由质量衰减速度决定——未关联期间按 `Unupdated_time` 的二次函数加速衰减(见 9.9 / README 9.11),`Quality` 跌破 `track_die_quality`(配置项 0.3)即消亡;`track_die_round`(配置项 6)已不再被引用。
> **普通 TWS 航迹的消亡判据可配置(V1.5.11,2c0d2c2)**:`track_die_quality_enable==1`(默认)时按质量——存活时长由质量衰减速度决定(未关联期间按 `Unupdated_time` 的二次函数加速衰减,见 README 9.11),`Quality` 跌破 `track_die_quality`(配置项 0.3)即消亡;`==0` 时改按圈数——`Extrapolate_round > track_die_round`(配置项 6)即消亡,与 1.5.8 之前语义一致(该分支曾误写为 `<`,4449312 修正)。8 份配置当前均为 1,`track_die_round` 作为备用值仍须填写(X1024 两份 5、Ku2304 25、其余 6)。
> `primary_target_flag`(重点目标标记)由外部接口 `Data_Process::primary_target_add / primary_target_cancel` 按批号置 1 / 清 0(`data_process.cpp`);新起批航迹在 `track_init.cpp` 中以 `Trust_Track trust_track_tmp = {}` 零初始化,故恒为 0。该标记在 TWS 上决定走「质量消亡(普通)」还是「10 圈消亡(重点)」。
> `primary_target_flag`(重点目标标记)由外部接口 `Data_Process::primary_target_add / primary_target_cancel` 按批号置 1 / 清 0(`data_process.cpp`);新起批航迹在 `track_init.cpp` 中以 `Trust_Track trust_track_tmp = {}` 零初始化,故恒为 0。该标记在 TWS 上决定走「质量消亡(普通)」还是「圈数消亡(重点)」。
消亡时把批号写入消亡输出数组并从航迹表删除;**临时航迹消亡不对外输出**(起批失败的中间态对宿主不可见)。
@@ -495,20 +495,20 @@ flowchart TD
E --> F["输出 TrackingBeam"]
```
**入队条件**(只支持手动转 TAS):
**入队条件**(手动或自动,V1.5.11):
- 该航迹 `manual_tracking_flag == 1`(由外部 `tracking_start` 置位);
- 该航迹满足**手动或自动**入队条件(V1.5.11):`manual_tracking_flag == 1`(由外部 `tracking_start` 置位)**或** `auto_tas_enable==1` 且合速度落在 `[auto_tas_velocity_min, auto_tas_velocity_max]`(`tas_auto_start()` 判定,距离/高度形参不参与);
- 航迹当前 `Track_Mode == 0`(还不是 TAS);
- 队列未满(遍历/容量判定以配置项 `tas_track_num_max` 为界:样例相扫 4 / 机扫与单跟踪 1,上限 `RDP_TAS_QUEUE_CAPACITY`=30);
- 不在 TAS 禁止区(距离-方位矩形)。
入队动作:写 `Track_Index`(队列内部键,仍是批号)、标记非空、`last_track_time = T_track`、**航迹 Track_Mode 置 1**,并**立即输出一次该航迹更新**(通知宿主跟踪状态变化;V1.5.9 起该行按常规关联输出的完整字段填充,V1.5.10 起坐标不再叠加 `radar_system_delay`,见 README 9.10 与 CHANGELOG)。
**出队条件**:队列中的批号在航迹表中已不存在,或不再处于"手动 + TAS"状态(`manual_tracking_flag≠1`)→ 清空该队列项;**目标仍存在时出队会置 `Track_Mode=0` 并输出一整套完整航迹更新行**(V1.5.10;用户 `tracking_stop` 后走此路径,宿主据此刷新界面/回放状态;目标已消亡则只清队列项)。
**出队条件**:队列中的批号在航迹表中已不存在,或「`Track_Mode==1` 但 `manual_untracking_flag==1`」(用户已取消跟踪)→ 清空该队列项;**目标仍存在时出队会置 `Track_Mode=0` 并输出一整套完整航迹更新行**(V1.5.10;用户 `tracking_stop` 后走此路径,宿主据此刷新界面/回放状态;目标已消亡则只清队列项)。V1.5.11 起在队判定由 `manual_tracking_flag==1` 改为 `manual_untracking_flag!=1`,避免自动 TAS 目标(无手动标志)被误判为已取消而立即出队。
> 自动开启/退出 TAS 的逻辑(按距离/速度/高度阈值)已全部注释停用,**只支持手动**。
> **自动/手动 TAS 的差异(V1.5.11)**:自动入口只按**合速度区间**筛选(`auto_tas_enable=1` 时生效,样例仅 Ku2304 启用 700~900 m/s),不检查距离/高度、也没有自动退出条件;手动入口只由 `tracking_start` 置 `manual_tracking_flag`。两者入队后走同一套关联/波束逻辑,退出途径都是 `tracking_stop` 或目标消亡。
>
> **指纹与批号的分工(V1.5.9 / V1.5.10)**:队列、内部关联与出队仍以 `Track_Index` 为键;只有跨 DLL 边界的 `DataRev.TAS_track_index`(输入)与 `TrackingBeam.TAS_track_index`(输出)改用 **16 bit 航迹指纹** `Track_fingerprint`(起批时按末点特征生成,见 README 9.12)。手动取消跟踪由 `tracking_stop` 置 `manual_untracking_flag=1`,TAS 输入按指纹匹配航迹时要求该标志为 0,避免刚取消又被数据帧重新置为 TAS(V1.5.10)。
> **指纹与批号的分工(V1.5.9 / V1.5.10 / V1.5.11)**:队列、内部关联与出队仍以 `Track_Index` 为键;只有跨 DLL 边界的 `DataRev.TAS_track_index`(输入)与 `TrackingBeam.TAS_track_index`(输出)改用 **16 bit 航迹指纹** `Track_fingerprint`(V1.5.11 起按临时航迹首点的 `vr`/`RCS`/`CPI_time` 生成,不再含距离/方位,见 README 9.12)。手动取消跟踪由 `tracking_stop` 置 `manual_untracking_flag=1`,TAS 输入按指纹匹配航迹时要求该标志为 0,避免刚取消又被数据帧重新置为 TAS(V1.5.10)。
### 8.2 波束输出调度(关键)
@@ -561,18 +561,21 @@ flowchart TD
| `[track_init] track_init_point_num_min` | 3 | 起批所需点数(校验 3~9;原 `RadarPara.track_start_point_num`) |
| `[track_init] track_init_quality_L3~L7` | 0.7 / 0.6 / 0.5 / 0.4 / 0.3 | 起批最低质量(按临时航迹长度 3/4/5/6/≥7;原 `TRACK_START_QUALITY_L3~L7`) |
| `[track_init] track_init_velocity_min/max` | 1 / 50 | 航迹头-点关联的速度区间(原 `V_MIN/V_MAX`) |
| `[track_die] track_die_round` | 6 | **已不被引用**:V1.5.8 起 TWS 普通航迹改按质量消亡(保留备用;原 `TRACK_DIE_ROUND`) |
| `[track_die] track_die_round` | 6 | 普通 TWS 圈数消亡门限(仅 `track_die_quality_enable=0` 时生效;X1024 两份配 5、Ku2304 配 25;原 `TRACK_DIE_ROUND`) |
| `[track_die] track_die_round_pramary` | 10 | TWS 重点航迹(`primary_target_flag==1`)消亡轮数(原 `TRACK_DIE_ROUND_PRIMARY`) |
| `[track_die] track_die_round_tas` | 20(**机扫配 96**) | TAS 航迹消亡轮数(判据 `Extrapolate_round > 该值`;原 `TRACK_DIE_ROUND_TAS`) |
| `[track_die] track_die_quality_enable` | 1 | **消批方式开关(V1.5.11)**:1=非重点 TWS 按质量消批(`Quality < track_die_quality`);0=按圈数消批(`Extrapolate_round > track_die_round`);校验仅允许 0/1 |
| `[track_die] track_die_quality` | 0.3 | TWS 普通航迹质量消亡门限(`Quality < 该值`;原 `TRACK_DIE_QUALITY`) |
| `[track_quality] track_quality_*` | 100 / 0 / 0.5 / 0.3 / 0.2 / 0.8 / −0.0008 / −0.0025 | 质量折算上限/下限、三项权重(D/SNR/LEN)、平滑系数、衰减系数 O2/O1(原 `TRACK_QUALITY_*`) |
| `[track_index] track_index_max` | 500 | 航迹号上限(原 `MAX_TRACK_INDEX`,内部航迹号表按该值分配) |
| `[beam_control] default_track_beam_type` / `tas_track_num_max` | 1 / 4(**机扫配 1**) | 跟踪波束类型(原硬编码 1)/ 最大同时跟踪 TAS 目标数(原 `MAX_TAS_NUM`);`tas_track_num_max` 同时是队列遍历上界(V1.5.10) |
| `[beam_control] tas_beam_pitch_min` | 3.0 | **TAS 波束俯仰下限(°,V1.5.10)**:输出俯仰取 `max(计算俯仰, 该值)`,避免波束打到地面;X256_MS_4S / X256_PS_* 配 5.4、Ku2304 配 −90(不限制);加载器未做范围校验 |
| `[beam_control] auto_tas_enable` | 0(**Ku2304 配 1**) | **自动 TAS 使能(V1.5.11)**:0=仅手动转跟踪;1=合速度在 `[auto_tas_velocity_min, auto_tas_velocity_max]` 内的航迹自动入队 |
| `[beam_control] auto_tas_velocity_min/max` | 0 / 0(**Ku2304 配 700/900**) | 自动 TAS 的合速度区间(m/s);加载器只校验 max≥min,min≥0 校验被注释停用 |
| `[singer_model] model_1/2/3_Q_fast/slow` | 0.000001 / 0.01 / 1.0 | 三个 Singer 模型的过程噪声强度(分档见 5.2;原 `RadarPara.Model*_Q_*`) |
| `[track_init_prohibite_area]` / `[tas_prohibite_area]` | `*_num = 0` + 空数组 | 起批屏蔽区 / TAS 禁止区(0~30 组,4 个数组长度必须等于 `*_num`;原 `RadarPara.track_prohibite_area_*` / `TAS_prohibite_area_*`) |
> 旧 `RadarPara` 中实现未使用的字段(`R_TAS_max/min`、`V_TAS_max/min`、`TAS_Height_1~5`、`cfar_th`、`north_angle`、`Beam_num`)未进入 `RDP_parameter`,TAS 自动开启/退出逻辑仍保持停用。
> 旧 `RadarPara` 中实现未使用的字段(`R_TAS_max/min`、`V_TAS_max/min`、`TAS_Height_1~5`、`cfar_th`、`north_angle`、`Beam_num`)未进入 `RDP_parameter`。其中与 TAS 自动开启/退出相关的老字段未沿用:自动**退出**仍停用,自动**开启**自 V1.5.11 起改用 `[beam_control] auto_tas_enable` + `auto_tas_velocity_min/max`(仅速度区间)。
### 9.2 编译期常量(`parameters.h` 保留)
@@ -626,11 +629,17 @@ flowchart TD
- **归一化幅度 / 速度维 FFT 点数(e8c56f9 新增,输入侧已打通)**:`DataRev` 新增 `amp_asv`(归一化幅度 dB)、`prn_fftn`(速度维 FFT 点数),`Track`/内部 `PointRecv`/`Trust_Track` 也新增同名成对字段;`data_preprocess()` 现已在 TWS 与 TAS 两条分支都把这两个字段搬入 `PointRecv`(并随 `RdpRecPoint` 落库),因此 `track_asso.cpp` 写入航迹并在 TWS 输出行写回的 `amp_asv_point` / `prn_fftn_point` 有有效数据来源;**TAS 的关联与输出路径(`track_asso_tas.cpp`)仍未涉及这两个字段**,TAS 输出行中它们保持宿主原值。
- **版本号与记录标识(b227ae1 / c3c7e66 / 5cb67cc)**:`parameters.h` 新增版本宏并拼装为 `VERSION_STRING`(机扫/相扫合并后为 `V1.5.9.GENERIC`;历史上 b227ae1 时为 `V1.5.8.PS` / `V1.5.8.MS`),实例创建后可由基类公开成员 `version_info` 读取;`Data_Process` 新增 `point_id` / `frame_id` / `circle_id` 自增计数(`circle_id` 在 TWS 每判满一圈、TAS 每帧末自增),`PointRecv`/`Temp_track`/`Trust_Track` 新增对应的标识字段,记录功能据此把「输入点迹 → 凝聚点迹 → 临时航迹 → 可靠航迹 → 关联信息」串成同一条链路;可靠航迹与关联信息的记录点为 TWS/TAS 双通道(关联信息以 `Asso_Info::tas_flag` 区分来源)。
**航迹指纹(V1.5.9,0f3da99)**
**航迹指纹(V1.5.9,V1.5.11 调整口径)**
- 起批时对**末点**计算 `Track_fingerprint`(16 bit):`r`/`azi`/`vr`/`RCS`/`CPI_time` 分别量化到 0.01 m / 0.001° / 0.01 m·s⁻¹ / 0.1 dBsm / 1 ms,经 splitmix64 逐个混合后折叠为 16 bit(`track_init.cpp::computeFingerprint()`);
- 起批时计算 `Track_fingerprint`(16 bit):**V1.5.11 起取临时航迹首点,且距离/方位固定传 0、不再参与**,只用量化的 `vr`(0.01 m/s)/`RCS`(0.1 dBsm)/`CPI_time`(ms),经 splitmix64 逐个混合后折叠为 16 bit(`track_init.cpp::computeFingerprint()`);改口径是为避免 r/azi 被外部修正值改写导致同一目标指纹不一致;
- TAS 输入帧的 `DataRev::TAS_track_index` 与 TAS 波束输出的 `TrackingBeam::TAS_track_index` 均改为**指纹**(字段名未变);`track_process(model=3)` 按指纹定位航迹,队列与内部关联仍用 `Track_Index`;
- 16 bit 指纹存在碰撞可能,且同一目标消亡后重新起批通常得到不同指纹;记录实体 `RdpRecTrustTrack` 尚未包含该字段(详见 README 9.12、11.2)。
- 16 bit 指纹存在碰撞可能(V1.5.11 起碰撞面更大:同帧起批且 vr/RCS/CPI 相同的航迹必得同一指纹),且同一目标消亡后重新起批通常得到不同指纹;记录实体 `RdpRecTrustTrack` 尚未包含该字段(详见 README 9.12、11.2)。
**自动 TAS(V1.5.11)**
- 在 `Beam_Ctrl → tas_target_add()` 中按航迹合速度判定:`auto_tas_enable==1` 且 `auto_tas_velocity_min ≤ v ≤ auto_tas_velocity_max` 即自动入队(`tas_auto_start()`),不检查距离/高度、无自动退出条件;
- 样例仅 `Ku2304_PS` 启用(700~900 m/s),其余 7 份配置 `auto_tas_enable=0`(纯手动);
- 出队判定于 V1.5.11 改为 `Track_Mode==1 && manual_untracking_flag!=1`,使自动目标(无 `manual_tracking_flag`)不会被误判为已取消而出队。
**手动 TAS 与用户操作日志(V1.5.10)**
@@ -641,7 +650,7 @@ flowchart TD
**未启用**
- 引导跟踪(direct tracking)、手动打跟踪波束接口为空实现;
- TAS 自动开启/退出逻辑停用,只支持手动转/停 TAS;
- TAS **自动退出**逻辑(`tas_auto_end`)停用;自动**开启**自 V1.5.11 起可用(`auto_tas_enable`,仅按速度区间,样例仅 Ku2304 启用),手动转/停 TAS 仍保留;
- `tracking_stop` 后,队列项要等到下一次 `Beam_Ctrl` 才真正移除。
---