CSR配置字典之防抖策略类
更新时间:2025/7/22
在Gitcode上查看源码📋 文档信息
项目 | 内容 |
---|---|
文档标题 | 防抖策略类配置字典 |
版本 | v1.0 |
创建日期 | 2025-01-27 |
最后更新 | 2025-01-27 |
维护状态 | ✅ 活跃维护 |
📋 变更历史记录
文档变更记录
版本 | 发布日期 | 变更类型 | 变更内容 | 影响范围 | 维护人员 |
---|---|---|---|---|---|
v1.0 | 2025-01-27 | 初始版本 | 创建防抖策略类配置字典 | 全新文档 | 系统管理员 |
🎯 类概览
防抖策略 类
属性 | 值 |
---|---|
类名称 | Debounce |
功能描述 | 在通过硬件代理Scanner对象读取硬件数据的时候,可以通过debounce属性配置防抖对象,目前支持的防抖类型有中值滤波(median),均值防抖(MidAvg),持续一致(Cont),二值持续一致(ContBin),无防抖(None)等类型 |
所属SIG组 | hardware |
所属组件 | hwproxy |
责任人 | 硬件代理组 |
最后更新 | 2025-01-27 |
状态 | 🟢 正常运行 |
📊 属性定义详表
Median(中值滤波防抖策略)
属性名 | 类型 | 默认值 | 取值范围 | 动态关联 | 描述 | 使用场景 | 举例 | 来源 | 分类 |
---|---|---|---|---|---|---|---|---|---|
WindowSize | U32 | 10 | - | - | 滤波窗口大小 即参与防抖时取值的个数,如取值10,表示读取10个值取中值作为防抖后的输出值,未取满10个之前,输出默认值 | 通过防抖策略和参数对获取到的值进行防抖。温度类信号推荐使用中值滤波,平滑温度信号推荐使用均值滤波,二值状态推荐使用二值持续一致 | 10 | CSR配置 | 软件 |
DefaultValue | U32 | 1 | - | - | 防抖策略生效前的值 | 通过防抖策略和参数对获取到的值进行防抖 | 1 | CSR配置 | 软件 |
Cont(持续一致防抖策略)
属性名 | 类型 | 默认值 | 取值范围 | 动态关联 | 描述 | 使用场景 | 举例 | 来源 | 分类 |
---|---|---|---|---|---|---|---|---|---|
Num | U32 | 10 | - | - | 防抖次数 | 通过防抖策略和参数对获取到的值进行防抖 | 10 | CSR配置 | 软件 |
DefaultValue | U32 | 1 | - | - | 默认值 | 通过防抖策略和参数对获取到的值进行防抖 | 1 | CSR配置 | 软件 |
ContBin(二值持续一致防抖策略)
属性名 | 类型 | 默认值 | 取值范围 | 动态关联 | 描述 | 使用场景 | 举例 | 来源 | 分类 |
---|---|---|---|---|---|---|---|---|---|
NumH | U32 | 3 | - | - | 高电平防抖次数 | 通过防抖策略和参数对获取到的值进行防抖 | 3 | CSR配置 | 软件 |
NumL | U32 | 1 | - | - | 低电平防抖次数 | 通过防抖策略和参数对获取到的值进行防抖 | 1 | CSR配置 | 软件 |
DefaultValue | U32 | 0 | - | - | 默认值 | 通过防抖策略和参数对获取到的值进行防抖 | 0 | CSR配置 | 软件 |
MidAvg(均值防抖策略)
属性名 | 类型 | 默认值 | 取值范围 | 动态关联 | 描述 | 使用场景 | 举例 | 来源 | 分类 |
---|---|---|---|---|---|---|---|---|---|
WindowSize | U32 | 10 | - | - | 滤波窗口大小 即取值个数 | 通过防抖策略和参数对获取到的值进行防抖 | 10 | CSR配置 | 软件 |
DefaultValue | U32 | 1 | - | - | 默认值 | 通过防抖策略和参数对获取到的值进行防抖 | 1 | CSR配置 | 软件 |
IsSigned | Boolean | TRUE | TRUE/FALSE | - | 是否有符号 | 通过防抖策略和参数对获取到的值进行防抖 | TRUE | CSR配置 | 软件 |
None(无防抖策略)
属性名 | 类型 | 默认值 | 取值范围 | 动态关联 | 描述 | 使用场景 | 举例 | 来源 | 分类 |
---|---|---|---|---|---|---|---|---|---|
DefaultValue | U32 | 0 | - | - | 默认值 无实际意义 | 无实际意义,可以不配置Debounce | 0 | CSR配置 | 软件 |
🔗 动态关联机制
语法规范
防抖策略通常作为Scanner的Debounce属性被引用:
yaml
# 在Scanner中引用防抖策略
Scanner:
Debounce: "#/MedianDebounce_Temperature" # 引用中值滤波防抖
Debounce: "#/ContBin_H6L3" # 引用二值持续一致防抖
Debounce: "#/MidAvg_ADTEST_0" # 引用均值防抖
Debounce: "None" # 无防抖
关联说明
- 防抖策略对象被Scanner通过Debounce属性引用
- 不同类型的防抖策略适用于不同的数据特征
- 防抖策略处理后的数据会作为Scanner的最终输出
📂 分类标准
软件属性
- 定义:所有防抖策略属性均为软件层面的数据处理参数
- 特点:通过算法处理原始硬件数据,提供稳定的输出
- 示例:
WindowSize
,DefaultValue
,Num
,NumH
,NumL
,IsSigned
📝 配置示例
中值滤波防抖配置
json
{
"MedianDebounce_Temperature": {
"WindowSize": 10,
"DefaultValue": 25
}
}
持续一致防抖配置
json
{
"ContDebounce_PowerStatus": {
"Num": 5,
"DefaultValue": 1
}
}
二值持续一致防抖配置
json
{
"ContBin_H6L3": {
"NumH": 6,
"NumL": 3,
"DefaultValue": 0
}
}
均值防抖配置
json
{
"MidAvg_ADTEST_0": {
"WindowSize": 8,
"DefaultValue": 0,
"IsSigned": true
}
}
无防抖配置
json
{
"NoneDebounce": {
"DefaultValue": 0
}
}
🔧 使用指南
配置步骤
- 选择防抖类型:根据数据特征选择合适的防抖策略
- 配置参数:设置窗口大小、防抖次数等关键参数
- 设置默认值:配置未达到防抖条件时的输出值
- 关联Scanner:在Scanner的Debounce属性中引用防抖对象
- 验证效果:观察防抖后的数据稳定性
注意事项
- 防抖类型选择:根据数据类型和噪声特征选择合适的防抖策略
- 窗口大小设置:WindowSize影响防抖效果和响应速度
- 默认值配置:DefaultValue应该是合理的初始值
- 符号处理:MidAvg策略需要正确配置IsSigned属性
- 性能考虑:防抖窗口过大会增加内存使用和计算开销
性能建议
- 窗口大小优化:在防抖效果和响应速度之间找到平衡
- 内存管理:大窗口防抖会占用更多内存
- 计算开销:复杂防抖算法会增加CPU使用
- 数据类型匹配:选择与数据特征匹配的防抖策略
防抖策略详解
中值滤波(Median)
- 适用场景:脉冲噪声较多的场景
- 工作原理:取窗口内数据的中值作为输出
- 优点:对脉冲噪声有很好的抑制效果
- 缺点:对连续变化的数据可能有延迟
持续一致(Cont)
- 适用场景:需要确保数据稳定性的场景
- 工作原理:连续N次读取到相同值才输出
- 优点:确保输出数据的稳定性
- 缺点:对快速变化的数据响应较慢
二值持续一致(ContBin)
- 适用场景:二值信号(如开关状态)的防抖
- 工作原理:高低电平分别设置不同的防抖次数
- 优点:对二值信号的防抖效果很好
- 缺点:只适用于二值信号
均值防抖(MidAvg)
- 适用场景:模拟量数据的平滑处理
- 工作原理:取窗口内数据的平均值作为输出
- 优点:对随机噪声有很好的平滑效果
- 缺点:对突变信号有延迟
无防抖(None)
- 适用场景:数据质量很好,无需防抖的场景
- 工作原理:直接输出原始数据
- 优点:响应速度最快
- 缺点:无法抑制噪声
常见问题
- Q: 如何选择合适的防抖策略?
- A: 根据数据特征选择:脉冲噪声用Median,随机噪声用MidAvg,二值信号用ContBin,稳定性要求高用Cont
- Q: WindowSize设置多大合适?
- A: 在防抖效果和响应速度之间平衡,一般5-20之间,噪声大可以适当增大
- Q: 默认值如何设置?
- A: 设置为系统的安全值或正常工作值,例如12V电压的默认值可以设为12000(毫伏)
- Q: IsSigned什么时候设置为TRUE?
- A: 当数据可能为负值时(如温度传感器的负温度值)设置为TRUE