当前位置: 首页 > news >正文

限幅滤波法对数据进行滤波优化

限幅滤波法(又称程序判断滤波法)可以有效抑制数据中的随机脉冲干扰。以下是具体的实现方法和代码示例:

限幅滤波法原理

通过比较相邻两次采样值的差值是否超过预设的阈值:

  • 若差值 ≤ 阈值:视为有效数据,保留当前值
  • 若差值 > 阈值:视为干扰数据,用前一次值替代

适用于数据变化缓慢的场景(如温度、压力等物理量)。

代码实现

1. 简单阈值判断法
#define THRESHOLD 10  // 根据实际数据波动范围调整uint16_t LimitFilter(uint16_t new_value) {static uint16_t last_value;if (abs(new_value - last_value) > THRESHOLD) {return last_value;  // 超过阈值返回上次值} else {last_value = new_value;  // 更新有效值return new_value;}
}
2. 带惯性补偿的改进算法
#define THRESHOLD 20       // 基础阈值
#define INERTIA_FACTOR 0.3 // 惯性系数(0~1)float ImprovedLimitFilter(float new_val) {static float last_val;float delta = new_val - last_val;if (fabs(delta) > THRESHOLD) {// 超限时按惯性逼近last_val += delta * INERTIA_FACTOR; } else {last_val = new_val;}return last_val;
}

使用注意事项

  1. 阈值选择

    • 需大于正常信号的最大变化率
    • 小于干扰信号的最小变化量
    • 示例参考:
      • 温度采集:2~5℃
      • 转速测量:50~100 RPM
  2. 数据初始化

    void Filter_Init(uint16_t init_value) {LimitFilter(init_value); // 首次调用时传入初始值
    }
    
  3. ADC应用示例

    uint16_t Read_ADC_Filtered(void) {uint16_t raw = ADC_ReadChannel(ADC_CHANNEL_1);return LimitFilter(raw);
    }
    

性能特点对比

特性传统限幅滤波改进惯性滤波
计算复杂度
抗脉冲干扰
信号跟踪速度可调
相位延迟
适合场景缓变信号变速信号

优化建议

  1. 动态阈值调整

    // 根据信号变化率自动调整阈值
    void DynamicThreshold(float speed) {static float threshold = THRESHOLD;threshold = BASE_TH + speed * K_FACTOR;// 限制在合理范围threshold = constrain(threshold, TH_MIN, TH_MAX); 
    }
    
  2. 复合滤波策略
    结合中值滤波提高鲁棒性:

    #define SAMPLE_SIZE 5uint16_t CombinedFilter(void) {static uint16_t buf[SAMPLE_SIZE];// 先进行中值滤波uint16_t median = MedianFilter(ADC_Read());// 再进行限幅滤波return LimitFilter(median);
    }
    
  3. 边界保护

    // 防止首次采样异常
    if(last_value == 0 && new_value > MAX_SAFE_VALUE) {return 0;
    }
    

实际应用技巧

  1. 在低速采样时(<100Hz),建议配合移动平均滤波使用
  2. 对于12位ADC数据,典型阈值范围:30-100 LSB
  3. 在电机控制等实时性要求高的场景中,建议使用查表法优化计算速度

通过合理配置参数,限幅滤波法可有效提升STM32在工业现场等复杂环境中的测量可靠性。建议结合具体信号特性通过示波器或数据记录仪进行阈值校准。


http://www.mrgr.cn/news/95228.html

相关文章:

  • Vulnhub-dedecms织梦通关攻略
  • 【C++网络编程】第2篇:简单的TCP服务器与客户端
  • CIR-Net:用于 RGB-D 显著性目标检测的跨模态交互与优化(问题)
  • vmware下linux无法上网解决方法
  • 啃书—以国产化光耦ORPC-847芯片手册为例
  • 字节大模型面经
  • 单片机flash存储也做磨损均衡
  • 【C#语言】C#中的同步与异步编程:原理、示例与最佳实践
  • RAG各类方法python源码解读与实践:RAG技术综合评测【3万字长文】
  • Redis核心机制(一)
  • C++学习之nginx+fastDFS
  • 从零开始实现Stable Diffusion本地部署
  • DeDeCMS靶场获取wenshell攻略
  • go~协程阻塞分析
  • 大模型在肺源性心脏病预测及治疗方案制定中的应用研究报告
  • [Xilinx]工具篇_PetaLinux自动编译
  • 【问题解决】Postman 测试报错 406
  • vue3+ts项目心得
  • 【VUE】day05-ref引用
  • git tag以及git