fix: 稳定期内绕过斜率限幅和 IIR,直接用 Value 建立基线
根因: 首测 CAPVD=177406 是瞬态高值 (~38% 偏高), 5% 斜率限幅让 CAPVD 在 128 tick 稳定期内无法充分收敛, 100 窗口滑动平均被前半段高值污染: Origin=149755 vs 真实值~128688, 差值 21067 >> dlt_ORG=82 修复: 稳定期内直接将 CAPVD/CAPVD_fast 设为 raw Value, 不做斜率限幅和 IIR, 使基线 100 窗口快速收敛到真实值。 稳定期结束后恢复正常 IIR+斜率限幅用于检测。
This commit is contained in:
@@ -673,12 +673,16 @@ void vd1_task(void)
|
|||||||
|
|
||||||
/*--- 2. 稳定期:只跟踪基线,不检测车辆 ---*/
|
/*--- 2. 稳定期:只跟踪基线,不检测车辆 ---*/
|
||||||
if (!g_loop_stable) {
|
if (!g_loop_stable) {
|
||||||
|
/* 稳定期内不做斜率限幅和 IIR — 直接用 Value 快速收敛到真实基线 */
|
||||||
|
loop1_CAPVD = loop1_Value;
|
||||||
|
loop1_CAPVD_fast = loop1_Value;
|
||||||
|
|
||||||
update_moving_average(&loop1_ORG_SUM, &loop1_ORG_CNT,
|
update_moving_average(&loop1_ORG_SUM, &loop1_ORG_CNT,
|
||||||
&loop1_Origin, loop1_CAPVD, 100);
|
&loop1_Origin, loop1_CAPVD, 100);
|
||||||
_stable_cnt++;
|
_stable_cnt++;
|
||||||
if (_stable_cnt >= STABLE_SAMPLES) {
|
if (_stable_cnt >= STABLE_SAMPLES) {
|
||||||
g_loop_stable = 1;
|
g_loop_stable = 1;
|
||||||
PRINT("Loop stable, Origin:%d\n", loop1_Origin);
|
PRINT("Loop stable, Origin:%d\\n", loop1_Origin);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user