Files
vd_960/vd960Loop/docs/auto-frequency-plan.md
T
wangfq 8151d5700e docs(vd960Loop): 自动分频(Auto Frequency Selection)技术分析与开发计划
- 现状盘点: set_flp_level/loopFreq_Level 已具备, 缺检测/决策/软切换
- 物理层: 四档频率表, 66/76nF 仅 7.3% 间隔(不均匀), 注入锁定才是真敌人
- 干扰检测: 差拍抖动/慢拍/冻结占比 → 干扰度 D (复用 §10 健康度)
- 时机策略: A上电/B运行中/C混合(推荐) 三方案 + 切换时序与安全约束
- 频率规划: 8+ 线圈共享 4 档的复用策略 + 邻道协调卡点
- 开发计划: 6 阶段 25+ 任务 (硬件标定→检测→决策→软切换→整合→现场)
- 5 个决策点待用户拍板 (方案/初始档位/切换代价/邻道协调/范围)
2026-08-25 11:37:19 +08:00

246 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# vd960Loop 自动分频(Auto Frequency Selection)技术分析与开发计划
> 分析日期:2026-08-25
> 场景:高速公路,每条车道 4 个线圈(前后串行),相邻车道也有线圈
> 目标:检测到干扰时,四通道各自独立调节 4 档电容频率(33/43/66/76nF)错开干扰源
---
## 0. 现状盘点
| 能力 | 状态 | 说明 |
|------|------|------|
| 硬件切换 | ✅ 已具备 | 每通道 2 个 GPIOFLPA1/2…FLPD1/2),2bit 编码 4 档电容 |
| 基础软件 | ✅ 已具备 | `set_flp_level(loop_num, freq_level)` 已实现(storage.c:117 |
| 配置字段 | ✅ 已具备 | `Loop_Cng_Unit.loopFreq_Level`(2bit),flash 持久化,协议字段 freq_level 已定义 |
| 频率测量 | ✅ 已具备 | CAPVD ∝ 周期,上报实际频率(main.c 转换公式) |
| 干扰检测 | ❌ 缺失 | 无"自动判断有干扰"的逻辑 |
| 切换决策 | ❌ 缺失 | 无"切哪档、何时切"的逻辑 |
| 切换时序 | ❌ 缺失 | 切档会打断检测,无软切换/基线重建流程 |
| 频率规划 | ❌ 缺失 | 无多线圈错频分配策略 |
**结论:硬件和基础软件齐了,缺的是"自动"三件套:检测 → 决策 → 软切换。**
---
## 1. 物理层分析:四档频率与错频裕量
### 1.1 四档频率(L₀≈59μH 时)
| 档位 | 电容 | 频率 | 相对上一档间隔 |
|------|------|------|---------------|
| 00 高频 | 33nF | ~114.1 kHz | — |
| 01 中高 | 43nF | ~100.0 kHz | 14.1 kHz14.1% |
| 10 中低 | 66nF | ~80.7 kHz | 19.3 kHz19.3% |
| 11 低频 | 76nF | ~75.2 kHz | **5.5 kHz7.3%** ⚠ |
**关键发现:四档电容间隔不均匀(+30%/+53%/+15%),66nF 与 76nF 之间频率间隔只有 7.3%**。f ∝ 1/√C,这个比例与线圈 L 无关(恒为 √(76/66)=1.073)。若按行业惯例"相邻线圈频率差 ≥10%"要求,**66/76 这一对不达标**。
### 1.2 但真正的敌人不是"差拍大不大",而是"注入锁定"
错频抑制串扰的物理机制分两层:
1. **异频耦合 → 差拍**:本道 f1、邻道 f2,互感耦合产生 |f1f2| 差拍。本道 10ms tick 采样,奈奎斯特 50Hz
- 差拍 >50Hz(如 5.5kHz):欠采样 → 随机高频抖动 → **IIR(τ≈32ms)天然压住**,无害
- 差拍 <50Hz(近频):慢拍,可穿透 IIR → 有害
- 差拍 →0(同频):注入锁定,最危险
2. **同频/近频 → 注入锁定**:f1≈f2 时振荡器互相牵引,频率被拉偏、相位锁定,CAPVD 出现慢周期扰动,直接污染检测。
**结论:错频目标不是"差拍尽量大",而是"避免同档/近档导致注入锁定"。** 只要相邻线圈不同档(≥1 档间隔,即 ≥7.3% 频率差),差拍欠采样抖动可被滤波抑制。**7.3% 的最小档间隔对避免注入锁定足够,但余量偏小**,规划时优先避免 66/76 相邻组合。
### 1.3 串扰方向性(衔接上一轮分析)
- 错频配置下串扰为差拍抖动(正负交替,无稳定极性)
- 单极性串扰只在同频/近频耦合时出现(错误配置)
- 负向串扰进滑动平均会污染基线(真实危害)
---
## 2. 信号层:干扰检测算法("怎么知道有干扰")
### 2.1 干扰特征(候选)
| 特征 | 检测量 | 灵敏度 | 可靠性 |
|------|--------|--------|--------|
| **差拍抖动** | 无车时窗口内 variation 峰谷差/σ(复用 §10 健康度) | 高(差拍泄漏直接可见) | 高 |
| **注入锁定慢拍** | CAPVD 出现 0.5~50Hz 周期性扰动(相邻样本差分谱) | 中 | 高(最隐蔽也最危险) |
| **基线冻结频率** | 无车时 dev ≥ 4×dlt_ORG 的次数/占比(§10 冻结占比) | 中 | 高 |
| **误触发率** | 无车误触发计数(单位时间) | 低(需要时间累积) | 中(最终后果指标) |
### 2.2 检测窗口约束(关键)
- **干扰检测必须在"本道无车"窗口做**——有车时 CAPVD 大变化是正常信号,不能当干扰
- 但邻道车经过时差拍增强(邻道线圈被车扰动)→ 检测窗口应**包含"本道无车 + 邻道有车"时段**(无需知道邻道状态,本道无车时抖动超阈值即视为干扰)
- 复用 §10 健康度框架:无车窗口峰谷差 > 阈值 × 连续 N 窗 → 判定"干扰存在"
### 2.3 干扰度评分(量化)
```
干扰度 D = α·(抖动能量超标度) + β·(冻结占比) + γ·(误触发率归一化)
D > D_HIGH → 需切换
D > D_MID → 可疑,加强监测
```
阈值需现场标定("待现场验证"),初值建议:无车窗口峰谷差 > 2× 正常噪声底(即 §10 健康度的漂移速率超基线 2 倍)。
---
## 3. 调节时机策略(核心决策点)
### 方案 A:上电自适应(一次性探测)
```
上电 → 各通道稳定期 → 分频探测(每档测 ~5s 噪声底)→ 选最优组合 → 固化 → 正常检测
```
| 维度 | 评价 |
|------|------|
| 实现 | 简单,无运行中切换风险 |
| 探测时长 | 4 通道 × 4 档 × 5s = 80s(交错并行可压到 ~20-30s|
| 缺点 1 | 探测期无检测功能(几十秒)|
| 缺点 2 | **邻道可能未同时上电**,探测结果基于不完整邻居信息 |
| 缺点 3 | 现场后期新增设备(护栏、新线圈、改造)不响应 |
### 方案 B:运行中自适应(动态切换)
```
运行中持续监测干扰度 D → 超阈值 → 软切换(无车时执行)→ 切换后评估(改善则保持,恶化则回滚)
```
| 维度 | 评价 |
|------|------|
| 实现 | 复杂,需软切换 + 回滚 |
| 响应 | 实时适应现场变化 |
| 风险 | 切换期间通道短暂不可用;切换震荡(需防抖:限次、评估、回滚)|
| 硬约束 | **必须有车才能切**(防丢检测);切换后重建基线 |
### 方案 C:混合策略(推荐)
```
上电探测建立初始分配(快速) + 运行中事件触发复测(慢速、保守) + 回滚保护
```
- 上电:扫描选档(几十秒,覆盖"邻道未上电"风险用保守选档:选次优但间隔安全的档)
- 运行中:干扰度 D 超阈值 或 定时(如每小时)复测 → 软切换 + 评估回滚
- 切换频率限制:1 小时内最多 N 次(防震荡)
**切换时机细节(任何方案都需要):**
```
前置条件: 该通道无车(VD_FLAG=0) 且 无脉冲输出中 且 非安全复位中
执行序列: 挂起检测 → GPIO 切档 → 等待振荡稳定(~100ms, 实测标定) → 重建基线(稳定期 128样本≈1.3s) → 恢复检测
安全约束: 切换期间继电器保持原状态; 四通道交错切换(防同时切换电源跌落)
```
> 切换期间该通道约 1.5s 不可用——**这是方案取舍的核心代价,需用户确认可接受**。
---
## 4. 频率规划:4 档怎么分给 8+ 个线圈
### 4.1 冲突定义
场景:每车道 4 线圈(前后)+ 相邻车道 4 线圈。冲突组合:
- **同车道前后相邻**:线圈间距 ~几米,磁耦合强
- **左右相邻车道最近线圈**:跨车道间距,耦合中等
- 斜向/隔一档:耦合弱,可复用
### 4.2 复用策略(蜂窝式频率规划)
```
同车道 4 线圈: 档位 1-2-3-4 顺序错开(每线圈独立档)
相邻车道错相位: 车道 2 用 2-3-4-1 循环 → 左右最近线圈档位差 ≥1
优先避免: 66/76(7.3% 间隔)相邻组合;同档复用距离 ≥2 个线圈位
```
### 4.3 关键矛盾:车检器不知道邻道的档位
无通信前提下可选:
| 方案 | 做法 | 评价 |
|------|------|------|
| **现场配置基准**(推荐起步) | 协议/拨码设置每通道初始档位,各车道按约定错相位 | 简单可靠,依赖施工规范;为后续自动调整提供基准 |
| **盲探测避让** | 扫描各档时测抖动能量,避开"差拍落入危险区"的档 | 不需邻道信息,但只能"避开坏的"不能"选最优" |
| **差拍频率反推** | 从抖动频谱估计 f_beat,反推邻道档位 | 理论可行,工程复杂(欠采样谱估计),暂缓 |
**建议:初始档位现场配置(保证基本错频)+ 自动扫描避让(动态优化)+ 复用规则(防同档相邻)。**
---
## 5. 工程约束与风险清单
| 项 | 约束/风险 | 对策 |
|----|----------|------|
| 检测中断 | 切换 ~1.5s 不可用 | 无车才切;交错切换;切换评估回滚 |
| 安全 | 有车时切档丢检测 → 砸车风险 | **硬约束:VD_FLAG=0 才可切**;继电器保持 |
| 看门狗 | 探测/切换流程不能阻塞主循环 | 全部状态机化,单步 ≤50ms |
| 基线 | 换档后 CAPVD 跳变 | 重建基线 + 稳定期(现有机制复用)|
| 灵敏度 | 换档后阈值变化? | **归一化红利:SensTable 是相对量(×Origin/65536),换档后 Origin 变了但相对阈值不变,灵敏度自动保持** ✓ |
| 持久化 | 新档位掉电丢失 | 写回 flash loopFreq_Level |
| 切换震荡 | 频繁切换 | 限次(1h≤N)、评估回滚、Hysteresis |
| 电源 | 多通道同时切电容冲击 | 交错切换 |
| 协议联动 | 运行中档位变化后台未知 | 新增自动分频状态上报(含当前档位/干扰度/切换事件)|
| 测试 | 无真实串扰环境难验证 | 实验室双线圈对测 + 工装注入模拟干扰 + 现场实测 |
---
## 6. 开发计划
### 阶段 0:硬件标定(前置,依赖实验室/现场)
- [ ] 0.1 实测四档频率、切换 GPIO 到频率稳定的时间(示波器)
- [ ] 0.2 标定振荡稳定等待时间(切档 → CAPVD 有效)
- [ ] 0.3 两线圈对测:同档/相邻档/隔档的差拍形态与注入锁定距离
- [ ] 0.4 标定干扰检测阈值初值(正常噪声底、抖动超标倍率)
- 输出:参数表(写回代码宏)
### 阶段 1:干扰检测模块(先会"看病",不切换)
- [ ] 1.1 新建 `freq_monitor.c/h`:无车窗口抖动能量统计(复用 §10 峰谷差逻辑)
- [ ] 1.2 注入锁定慢拍检测(相邻样本差分谱,0.5~50Hz 能量)
- [ ] 1.3 干扰度评分 D(抖动 + 冻结占比 + 误触发)
- [ ] 1.4 检测状态机:正常/可疑/干扰(带防抖、去程)
- [ ] 1.5 协议上报:干扰状态字段(可选,先本地 PRINT)
- [ ] 1.6 gcc 隔离单测(模拟差拍/锁定/车辆信号,验证不误报)
- 验证:模拟数据注入,检测准确率;实车现场对比人工判断
### 阶段 2:选档决策(freq_planner
- [ ] 2.1 候选档评估:每档噪声底 + 避让规则(差拍危险区)+ 复用约束(同车道不重复)
- [ ] 2.2 决策状态机:保持/切换/回滚(带 Hysteresis + 限次)
- [ ] 2.3 持久化:新档位写 flash
- [ ] 2.4 单测:给定干扰特征序列 → 期望档位序列
### 阶段 3:软切换执行(freq_switch
- [ ] 3.1 切档状态机:挂起检测 → GPIO 切档 → 等待稳定 → 重建基线 → 恢复
- [ ] 3.2 与 vd1_task 集成(切档期间跳过检测、继电器保持)
- [ ] 3.3 四通道交错切换调度
- [ ] 3.4 切换前后 CAPVD 突变防护(切档瞬间不进入 IIR)
- [ ] 3.5 单测:状态机全路径 + 异常分支(切换中有车进入 → 中止/回滚)
### 阶段 4:自适应策略整合(混合方案)
- [ ] 4.1 上电分频探测流程(4 通道交错扫描,~30s)
- [ ] 4.2 运行中事件触发复测(干扰度超阈值)
- [ ] 4.3 定时复测(如 1h,可配置)
- [ ] 4.4 切换评估:切后 5 分钟干扰度对比,恶化回滚
- [ ] 4.5 切换限次 + 防震荡
### 阶段 5:协议/后台联动 + 现场验证
- [ ] 5.1 协议新增:自动分频状态(当前档位/干扰度/切换事件),版本 bump
- [ ] 5.2 vd960DBN 解析同步(若走 0xC0 传感帧或独立命令)
- [ ] 5.3 现场测试方案:双车道对测、邻道干扰注入、长期稳定性(一周)
- [ ] 5.4 devlog/产品文档同步
---
## 7. 需要用户拍板的决策点
1. **切换时机**:方案 A(仅上电)/ B(仅运行中)/ C(混合,推荐)?
2. **初始档位来源**:现场配置基准(拨码/协议)vs 全自动扫描?(建议:配置基准 + 自动避让)
3. **切换代价**:每通道 ~1.5s 检测中断,可接受?(有车不切,只影响无车时段,实际影响很小)
4. **邻道协调**:相邻车道是否也是自家车检器?能否约定统一的错相位配置规范?
5. **范围**:v1 只做"干扰检测 + 手动/半自动提示"(后台建议换档),v2 再做全自动?还是一次到位?