AI-on-the-edge-device 智能读数扩展分辨率参数 `ExtendedResolution` 完整指南
2026/9/16 16:06:05 网站建设 项目流程

AI-on-the-edge-device 智能读数扩展分辨率参数ExtendedResolution完整指南

【免费下载链接】AI-on-the-edge-deviceEasy to use device for connecting "old" measuring units (water, power, gas, ...) to the digital world项目地址: https://gitcode.com/GitHub_Trending/ai/AI-on-the-edge-device

导读

NUMBER.ExtendedResolution是 AI-on-the-edge-device 项目(用于将水表、电表、气表等老式计量表接入数字世界的 ESP32 方案)在 PostProcessing 后处理流程 中用于提升读数精度的关键开关:开启后,系统会把最后一个模拟表盘(analog counter)的十进制位一并纳入最终数值,让读数多一位小数。本文将从参数语义、配置文件写法、底层实现原理到测试验证,完整讲解这一参数的使用边界与实战配置。

参数概览:默认值与核心语义

NUMBER.ExtendedResolution属于后处理(PostProcessing)阶段、按数字序列(<NUMBER>)独立生效的参数,其官方定义如下:

项目
参数名NUMBER.ExtendedResolution
默认值false
所属配置段[PostProcessing]
作用域每个<NUMBER>(ROI 中定义的数字序列)各自独立

核心语义:默认情况下,最后一位模拟表盘的读数只用于整数位判定;将本参数设为true后,系统会使用最后一个模拟计数器的十进制位来获得更高精度(Use the decimal place of the last analog counter for increased accuracy)。

从源码结构看,这一参数的影响链路清晰可见:

  • 配置解析后写入每个数字序列的结构体字段isExtendedResolution(见 ClassFlowDefineTypes.h:isExtendedResolution; // extendResolution; Adds the decimal place of the least significant analog ROI to the value);
  • 在正式读取阶段,ReturnRawValue的组装会根据该标志调用对应的读数接口(详见下文"底层实现原理")。

适用模型限制:*-class**-const模型

文档明确给出了一个硬性约束:该参数仅支持*-class**-const系列模型,其他模型类型上该参数不生效或不被支持。这与源码实现完全吻合:

在 ClassFlowCNNGeneral.cpp 中,isExtendedResolution()的实现直接按模型类型分流:

bool ClassFlowCNNGeneral::isExtendedResolution(int _number) { if (CNNType == Digit) { return false; } return true; }
  • 对于Digit类型的 CNN 网络(即纯数字识别模型),扩展分辨率恒为关闭
  • 对于模拟表盘/常量(analog / const)类型的 CNN,扩展分辨率始终可用

关于模型命名与选择,可进一步参考 Analog 模型参数 与 Digits 模型参数。仓库自带的模型文件也印证了这一约束——例如 sd-card/config 中使用的ana-cont_*(analog constant)与dig-class*(digit classify)系列即属于支持范围。

配置方法:Web UI 与手动编辑 config.ini

方式一:Web 界面配置

在设备 Web 界面进入后处理(PostProcessing)编辑页,找到 "Extended Resolution" 下拉框,将其从false切换为true即可。对应界面实现在 edit_config_template.html,其读取/写入逻辑见 readconfigparam.js。

方式二:手动编辑配置文件

关键注意点:由于该参数对每个数字序列独立生效,手动编辑config.ini必须使用<NUMBER>.前缀,即NUMBER.ExtendedResolution,而不是裸写ExtendedResolution

[PostProcessing] ; 示例:对名为 "main" 的数字序列启用扩展分辨率 main.ExtendedResolution = true

仓库真实配置示例:

  • 默认出厂配置 sd-card/config/config.ini:main.ExtendedResolution = false
  • 演示配置 sd-card/demo/config.ini:main.ExtendedResolution = true

为什么必须带前缀:从源码解析逻辑看,handleDecimalExtendedResolution会先解析参数名中点号前的部分作为目标数字序列名(无前缀时视为default,作用于所有数字序列),再把布尔值写入对应NUMBERS[j]->isExtendedResolution(见 ClassFlowPostProcessing.cpp)。同时,后处理配置解析器只识别[PostProcessing]段内带EXTENDEDRESOLUTION名字的条目(见 ClassFlowPostProcessing.cpp)。

配置迁移提醒:早期版本曾存在不带前缀的全局ExtendedResolution参数,固件升级时会自动将其标记为;UNUSED_PARAMETER(见 main.cpp),因此升级后请改用NUMBER.ExtendedResolution写法;旧的 Analog/ExtendedResolution 参数页也明确标注为废弃(unused),并指向本参数。

底层实现原理:扩展分辨率如何参与读数组装

1. 读数阶段:把标志传给 getReadout

在每个处理周期内,后处理会按数字序列依次组装原始读数,isExtendedResolution标志被显式传给模拟与数字两个读数通道(见 ClassFlowPostProcessing.cpp):

// 有模拟 ROI:模拟读数带上扩展分辨率标志 NUMBERS[j]->ReturnRawValue = flowAnalog->getReadout(j, NUMBERS[j]->isExtendedResolution); // 纯数字(无模拟表盘):扩展分辨率仅在无模拟小数位时启用 NUMBERS[j]->ReturnRawValue = flowDigit->getReadout(j, NUMBERS[j]->isExtendedResolution, previous_value);

2. 小数位重算:DecimalShift 与 Nachkomma 的联动

启用扩展分辨率后,最终值的小数位(Nachkomma)与小数点移位(DecimalShift)会相应调整,这部分逻辑集中在UpdateNachkommaDecimalShift()(见 ClassFlowPostProcessing.cpp):

  • 纯数字序列DecimalShift在扩展分辨率开启时减 1,使最终读数多一位小数;
  • 纯模拟序列:同样DecimalShift-1Nachkomma = -DecimalShift
  • 数字 + 模拟混合序列Nachkomma加 1,把模拟表盘的十进制位纳入小数部分。

3. 边界情况:与 AllowNegativeRates 的交互

扩展分辨率带来更高精度的同时,也让数值抖动更容易触发负速率误判。源码专门针对开启扩展分辨率的场景增加了诊断日志(参见 issue 相关处理,见 ClassFlowPostProcessing.cpp),当检测到负速率时会打印valuepreValue及容差上限,便于排查微小波动导致的误报。若遇到此类问题,可同时关注 AllowNegativeRates 参数的设置。

测试验证:如何确认该参数生效

仓库的单元测试框架(基于 Unity,位于 test 目录)提供了针对后处理逻辑的辅助函数,用于在测试环境直接注入扩展分辨率标志:

  • test_flow_postrocess_helper.cpp:setExtendedResolution()遍历所有数字序列,将isExtendedResolution置为true
  • 相关测试用例位于 test_flow_postrocess_helper.h 与 test_flowpostprocessing.cpp 等文件,可通过 PlatformIO 测试任务运行验证。

从源码结构可以推断:该标志贯穿"配置解析 → 结构体存储 → getReadout 读数 → Nachkomma 重算"的完整链路,因此确认配置生效最简单的方式是观察读数输出的小数位数是否比关闭时多一位(例如开启前1234.5,开启后1234.56)。

实战配置建议与限制汇总

  1. 仅在支持模型上使用:确认模型属于*-class*/*-const系列(如仓库自带的ana-cont_*dig-class*),纯 Digit 模型下该参数会被源码强制忽略。
  2. 务必带<NUMBER>.前缀:手动编辑 config.ini 时写main.ExtendedResolution = true,无前缀写法仅用于同时作用于所有数字序列(等价于default),且旧版裸参数在升级后会被自动废弃。
  3. 配合 DecimalShift 理解输出:最终小数位是DecimalShift、模拟 ROI 数量与扩展分辨率三者共同决定的结果,开启后读数精度提升一位。
  4. 留意精度提升带来的误判:更高精度下读数微抖更易触发负速率/速率超限检查,必要时结合 ChangeRateThreshold、MaxRateValue 等参数放宽容差。

【免费下载链接】AI-on-the-edge-deviceEasy to use device for connecting "old" measuring units (water, power, gas, ...) to the digital world项目地址: https://gitcode.com/GitHub_Trending/ai/AI-on-the-edge-device

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询