docs(measurement): §9 时序链详解 —— Xn / Value / CAPVD / Origin 六个量的更新时间(用户提出)
- 三级降采样链:捕获级(Xn,6.25kHz)→ 窗级(Value/CAPVD,92Hz)→ 基线级(Origin,0.92Hz) - PD132T @100kHz:Xn=480tick=**160µs**(÷32 后信号的半周期 = 16 个线圈周期)/ Value = 68×160µs = **10.880ms** / Origin = 100 窗 = **1.088s** - PD136HA @100kHz:Xn = **320µs**(整周期 = 32 个线圈周期)/ Value = **21.760ms** / Origin = 256 窗 = **5.571s** - τ 换算成"窗"后与型号无关:τ/T = 256/α ⇒ α79 = 3.24 窗、α64 = 4.0 窗 - Origin 是**块平均**(`ORG_SUM/100`;PD136HA `>>8`),非滑动平均 ⇒ 基线跟踪粒度 = 1 个块; 有车期间 ORG_SUM 清零 + ORG_CNT 停止 ⇒ 冻结 + 重新累计 - 上电首个 Origin 只有**单窗样本**(92Hz 单点),需 1.09s / 5.57s 才变块平均 ⇒ 学习/静默期长度的根本依据 - 响应链三段:①窗内平均 ≤1 窗 ②IIR ≈ τ·ln(Δ/(Δ−阈值)) ③输出级 50ms tick(PD132T 进入确认 = 0) - 精化跨型号表 PD132T「进入确认」表述(无 IN_DELAY 判定,而非"已注释");表格校验 0 异常
This commit is contained in:
@@ -35,7 +35,7 @@
|
||||
| 离开表 | 同表 | {60,32,21,14} | {60,32,21,14} | {81,54,32,18} | **{51,27,18,12}**(方案B) | {81,32,16,12} |
|
||||
| 阈值换算 | Origin×表/65536 | Origin×表/65536 | Origin×表/65536 | Origin×表/65536 | Origin×表/65536 | Origin×表/65536 |
|
||||
| 档位 Δf/f | 0.33%~0.015% | **0.46%~0.032%** | **0.46%~0.032%** | 0.247%~0.043% | **0.514%~0.038%**(方案B;PD132T 对齐表 0.46%~0.032% 为备选) | **0.165%~0.021%** |
|
||||
| 进入确认 | **有:`IN_DELAY=10`**(≈0.6s) | 无 | 无(IN/OUT_DELAY 已注释,同 PD132L) | 无(单次,去抖已注释) | **3~5 次(按Q档)** | **3 次** |
|
||||
| 进入确认 | **有:`IN_DELAY=10`**(≈0.6s) | 无 | 无(无 `IN_DELAY` 判定,进入脉冲立即;仅脉冲定时用 `OUTCNT`) | 无(单次,去抖已注释) | **3~5 次(按Q档)** | **3 次** |
|
||||
| 离开判定 | 简单阈值(`SET_DLY` 可跳过确认) | 简单阈值 | 简单阈值(`SENUP` 可固定离开阈值=14) | 简单阈值+脉冲延迟 | **简单滞回 3~5 次防抖 + 低Q 环带超时 2.5s**(平坦性 #if 禁用) | **简单滞回 3 次防抖**(平坦性 #if 禁用) |
|
||||
| 灵敏度表可配 | 编译期 | 编译期 | 编译期 | 编译期 | 编译期 | **运行时可配(BLE 写 Flash)** |
|
||||
| 时序 tick | **60ms**(T1 溢出 5.46ms ×11;⚠ 勘误) | 50ms | 50ms(5ms×10 ✅手册直证) | 5ms?×10=50ms(⚠ 待实测) | 检测 10ms + 时序 50ms | **检测 8.74ms + 时序 5ms/50ms** |
|
||||
|
||||
@@ -171,6 +171,68 @@ Value / Origin = Xn₁ / Xn₀ ← 精确,r₀ 完全约掉 ✓
|
||||
|
||||
---
|
||||
|
||||
## 9. 时序链详解:六个量的更新时间(2026-09-11 补,用户提出)
|
||||
|
||||
整条链是**三级降采样**:捕获级(每 `Xn` 一次)→ 窗级(每 `LPCNT` 次捕获一次)→ 基线级(每 100/256 窗一次)。
|
||||
|
||||
```
|
||||
捕获中断(PCA/ADTIM4) 窗结账(ISR 内) 主循环(紧随其后) 块平均
|
||||
│ │ │ │
|
||||
每 t_Xn 一次 每 LPCNT 次捕获 每次 Value 更新 每 100/256 窗
|
||||
├── Xn = 相邻捕获差 ────► ├── Value = Σ Xn ────────► ├── CAPVD = IIR(Value) ──► ├── Origin = ΣCAPVD/N
|
||||
│ (6.25 kHz) │ (92 Hz) │ (92 Hz) │ (0.92 Hz)
|
||||
└── 频率窗口检查(若启用) └── CAP_OK = 1 └── 判据 dlt = Origin×表>>16
|
||||
```
|
||||
|
||||
### 9.1 六个量逐一(PD132T @ 100kHz 站点,`Xn₀=480`、`LPCNT=68`)
|
||||
|
||||
| 量 | 更新触发 | 更新周期 | 物理含义 |
|
||||
|---|---|---|---|
|
||||
| **`loop1_Xn`** | **每次捕获中断**(相邻两次捕获之差) | `t_Xn = Xn/f_cap = **160 µs**`(6 250 次/s) | ÷32 后信号的**半周期** = **16 个线圈周期**(双沿捕获) |
|
||||
| **`loop1_Value`** | ISR 内 `CapCnt >= LPCNT` 时 | `LPCNT·t_Xn = **10.880 ms**`(92 次/s) | `LPCNT` 个 `Xn` 之和(= 窗)⇒ 同步置 `CAP_OK=1` |
|
||||
| **`loop1_CAPVD`** | 紧随其后调用 `VD1_TASK()`(主循环) | **10.880 ms**(与 Value 同拍) | IIR 平滑值:`CAPVD += (Value−CAPVD)·Flt_Reg>>8` |
|
||||
| **`loop1_Origin`** | `VD1_TASK()` 内 `ORG_CNT == 99` 且**无车** | **100 窗 = 1.088 s**(0.92 次/s) | `Origin = ORG_SUM/100`(**块平均**,非滑动) |
|
||||
| **测量节拍** | = `Value`/`CAPVD`/判据的共同节拍 | **10.880 ms**(标称上限 10.923) | 见 §1-§3(区间值,按站点 −0.4%~−6.2%) |
|
||||
| **基线更新周期** | = `Origin` 的更新间隔 | **1.088 s**(标称上限 1.092 s) | 块粒度 ⇒ 基线跟踪"阶梯式" |
|
||||
| IIR 时间常数 **τ** | — | α79: **35.3 ms**(= **3.24 窗**)/ α64: **43.5 ms**(= **4.0 窗**) | `τ = T·256/α` |
|
||||
|
||||
### 9.2 同表:PD136HA @ 100kHz(`Xn₀=480`、`LPCNT=68`,f_cap 减半)
|
||||
|
||||
| 量 | 更新周期 | 与 PD132T 的比 |
|
||||
|---|---|---|
|
||||
| `loop1_Xn` | `480/1.5MHz = **320 µs**`(3 125 次/s) | ×2(单沿 ⇒ 整周期 = **32 个线圈周期**) |
|
||||
| `loop1_Value` | `68 × 320µs = **21.760 ms**`(46 次/s) | ×2 |
|
||||
| `loop1_CAPVD` | **21.760 ms** | ×2 |
|
||||
| `loop1_Origin` | `256 窗 = **5.571 s**` | ×5.1(256/100 × 2) |
|
||||
| τ(α64) | **87.0 ms** = **4.0 窗** | 窗数相同、绝对 ×2 |
|
||||
|
||||
### 9.3 四条容易搞混的关系(重点)
|
||||
|
||||
1. **`t_Xn = 前端分频比 /(边沿系数 · f_coil)`** —— PD132T = `16/f_coil`、PD136HA = `32/f_coil`、M1H = `32/f_coil`(双沿 ⇒ 16,单沿 ⇒ 32)。**`Xn` 是"测量结果"而不是"时间源"**:它本身随线圈频率变化(`Xn ∝ 1/f`),所以"更新周期"必须写成 `Xn/f_cap`(随站点变),而不是常数。
|
||||
2. **`Value` 是"计数域降采样",不是抽点**:`Value = Σ(LPCNT 个 Xn)` 是**箱式积分**(boxcar),因此 `Xn` 的 6.25kHz 信息在 92Hz 处**被平均而不是被丢弃**(无混叠问题);这也是 `Δf/f` 口径精确的来源(§2)。
|
||||
3. **τ 换算成"窗"后与型号无关**:`τ/T = 256/α` ⇒ α79 = **3.24 窗**、α64 = **4.0 窗**(与 BASE、f_cap、分频比全无关)⇒ 讨论"滤波快慢"时用"窗"最直观。
|
||||
4. **`Origin` 是块平均**:每 100(PD136HA 256)个 `CAPVD` 才整体替换一次 ⇒ **基线跟踪的时间分辨率 = 1 个块**(1.09 s / 5.57 s),块内一直用"上一个块的均值"。有车期间 `ORG_SUM` 被清零且 `ORG_CNT` 停止 ⇒ **有车冻结 + 重新累计**(不是"有车也跟踪")。
|
||||
|
||||
### 9.4 响应链:三段叠加
|
||||
|
||||
| 段 | 延迟 | 说明 |
|
||||
|---|---|---|
|
||||
| ① 窗内平均 | ≤ 1 窗(≤10.9 / 21.8 ms) | 变化要"填满"当前窗才在 `Value` 中完整体现 |
|
||||
| ② IIR 上升到阈值 | `≈ τ·ln(Δ/(Δ−阈值))` | 大信号快(Δ=1% vs 阈值 0.09% ⇒ ≈0.09τ ≈ 3ms);小信号慢(Δ≈阈值 ⇒ 多个 τ) |
|
||||
| ③ 输出级 | 50 ms 节拍(PD132T/M1H;PD136HA tick ⚠待实测) | `FLAG_IN` 在 T1 ISR 里被消费;进入确认 PD132T = **0**(立即,无 IN_DELAY 判定)、M1H = `IN_DELAY=10`≈0.6 s |
|
||||
|
||||
⇒ 例:PD132T 大车(Δ≈1%)⇒ ≈10.9 + 3 + ≤50 ≈ **≤65 ms**;PD136HA 同条件 ⇒ ≈21.8 + 6 + ≤50 ≈ **≤80 ms**(IIR 更慢但窗长翻倍是主因)。
|
||||
|
||||
### 9.5 上电初期的一个易忽略点
|
||||
|
||||
`INI_LOOP` 结束时(`CapCnt>100` 后第一个满窗)执行的是:
|
||||
```c
|
||||
loop1_CAPVD = loop1_CapSum; loop1_Origin = loop1_CAPVD; loop1_INI_LOOP = 0;
|
||||
```
|
||||
⇒ **上电时 `Origin` 只有一个窗的样本**(92Hz 单点、噪声最大),要等**第一个块(100/256 窗 = 1.09 s / 5.57 s)** 完成才变成块平均 ⇒ 这就是"上电静默期/学习期"必须留足时间的根本原因(PD136HA 侧更长,5.6 s)。
|
||||
|
||||
---
|
||||
|
||||
## 相关文档
|
||||
|
||||
- 双型号对比:`docs/pd132t-vs-pd136ha-comparison.md`(§3 测量与归一化)
|
||||
|
||||
Reference in New Issue
Block a user