指数滑动滤波器

  • 作用
  • 原理
  • 特点
  • 公式
  • 代码
    • 优化升级

作用

首先这个滤波器能够将一些突变的信号对系统的影响降低,能够平滑输入信号,滤除噪声,减少测量数据的瞬间波动和干扰,就是实现输入信号不能不变,数值不会突然变大,比如你根据编码器的值控制呼吸灯的亮度,如果编码器突然拉的值很大,呼吸灯不会立刻变得很亮,会慢慢亮。

原理

原理就是不完全采样当前的输入信号,而是将输入信号的值和上一刻滤波后的输入信号做一个权重划分,然后得到最终滤波后的信号值,比如前一刻滤波后是10V,当前采样的电压是5V,假如设置前一刻的权重是90%,当前采样的信号权重是10%,则将100.9+50.1 = 9.5V,这就是滤波后的结果,不会说因为10V掉到5V,我对应的输出也立刻改变,而是先按照9.5V对应输出,如果后面保持5V,那么根据权重划分输出信号也会慢慢降低的,只是响应没那么快。

特点

特点就是响应没那么快,但是输出信号会平滑,所以这个权重的设定也非常的重要,如果历史值(也就是上一刻的滤波结果)占的权重比较大,就会导致响应非常的缓慢,如果历史值的权重比较小,就会导致信号平滑的效果不是那么好。

所以需要注意系统刚开始运行的时候,输出信号也是要缓慢变化才能达到目标值,这是因为系统第一次滤波时上一刻的滤波结果为0,如果想要在系统刚开始运行时就达到目标值附近在开始滤波,可以在进行第一次滤波时给上一刻滤波结果赋当前输入值,让系统更快速达到目标值附件。

公式

y[n]=a×x[n]+(1−a)×y[n−1]y[n] = a \times x[n] + (1 - a) \times y[n-1]y[n]=a×x[n]+(1a)×y[n1]

  • x[n] 是最新的测量值
  • y[n] 是滤波后的输出值
  • a 是滤波器“记忆权重”,越小说明当前输入影响越小,滤波越平滑(但响应慢)

代码

下面给出一段Python的案例代码:

import numpy as npdef exponential_filter(input_signal, a):"""单一输入信号的指数滑动滤波:param input_signal: 输入信号列表:param a: 滤波系数(本次输入权重),0 < a < 1:return: 滤波后的输出信号列表"""output_signal = [input_signal[0]]  # 以第一个输入作为初始滤波值for n in range(1, len(input_signal)):y_prev = output_signal[-1]x_curr = input_signal[n]y_curr = a * x_curr + (1 - a) * y_prevoutput_signal.append(y_curr)return output_signal# 模拟你的滤波系数
a_vdc = 1 / 16  # vdc权重# 示例输入信号,替换成你的采样数据
np.random.seed(0)
input_vdc = 17 + 2 * np.random.randn(100)  # 模拟带噪声电压信号filtered_vdc = exponential_filter(input_vdc, a_vdc)# 输出前10个滤波值查看
for i in range(10):print(f"原始vdc: {input_vdc[i]:.3f}, 滤波vdc: {filtered_vdc[i]:.3f}")

结果如下:

原始vdc: 20.528, 滤波vdc: 20.528
原始vdc: 17.800, 滤波vdc: 20.358
原始vdc: 18.957, 滤波vdc: 20.270
原始vdc: 21.482, 滤波vdc: 20.346
原始vdc: 20.735, 滤波vdc: 20.370
原始vdc: 15.045, 滤波vdc: 20.037
原始vdc: 18.900, 滤波vdc: 19.966
原始vdc: 16.697, 滤波vdc: 19.762
原始vdc: 16.794, 滤波vdc: 19.576
原始vdc: 17.821, 滤波vdc: 19.467

这里可以看出滤波后的值并不会由于原始vdc的值的变化而发生比较大的突变,接下来给出在单片机中C语言的实现代码

u16 DataFilter(u16 dat) {static u16 s_u16LastDat;	// 记录历史值float a = 0.9;				// 历史值权重u16 result;// 进行指数滤波计算result = a * s_u16LastDat + (1 - a) * dat;// 记录当前滤波结果用于下次计算s_u16LastDat = result;return result;
}

优化升级

虽然这样写可以,但是可以考虑一下单片机的性能问题,对单片机来说浮点运算是非常耗时的,因为有些单片机没有浮点单元(大部分都没有把),所以接下来对这段代码进行优化升级:

u16 DataFilter(u16 dat) {static u16 s_u16LastDat;	// 记录历史值u16 result;// 进行指数滤波计算,历史权重比为0.9375result = (dat >> 4) + ((s_u16LastDat * 15) >> 4);// 记录当前滤波结果用于下次计算s_u16LastDat = result;return result;
}

通过右移的方式,把乘除运算变成位移能够大幅提高运算速度,这里是如何设置权重的呢,>>4相当于➗16,所以系数a = 1/16 = 0.0625,而*15>>4相当于✖15在➗16,系数a=15/16 = 0.9375;最终的权重和还是为1的,只是将权重刚好设置成2的倍数,就能够通过位移完成计算。

最后需要提醒一下这个权重系数的设置关系整个系统的性能,需要根据实际情况选择合适的权重比。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93917.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93917.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/93917.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32F4—电源管理器

Power supply schemesPower supply supervisorInternal reset ON有PDR_ON pin的MCU&#xff0c;PDR_ON pin被拉高的时候电源监视器被使能。没有PDR_ON pin的MCU默认一直使能。内部集成了power-on reset (POR) / power-down reset (PDR)POR&#xff08;上电复位&#xff09;&…

MySQL锁的分类 MVCC和S/X锁的互补关系

各位看官&#xff0c;大家早安午安晚安呀~~~如果您觉得这篇文章对您有帮助的话欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦今天我们来学习&#xff1a;MySQL锁的分类 && MVCC和S/X锁的互补关系1.锁分类1.按锁粒度分类&#xff1a;全局锁&#…

第五届智能通信与计算国际学术会议(ICICC 2025)

重要信息 官网&#xff1a;www.ic-icc.org 时间&#xff1a;2025年8月15-16日 地点&#xff1a;中国 南京 第五届智能通信与计算国际学术会议(ICICC 2025&#xff09;定于2025年8月15-16日在中国 南京举行。随着信息技术的飞速发展&#xff0c;智能通信与计算领域的研究与…

基于C#和NModbus4库实现的Modbus RTU串口通信

基于C#和NModbus4库实现的Modbus RTU串口通信&#xff0c;包含完整的界面设计和功能实现&#xff1a;一、项目依赖配置NuGet包安装&#xff1a; Install-Package NModbus4 Install-Package System.IO.Ports窗体控件布局&#xff1a; <!-- 基础控件配置 --> <ComboBox …

想要批量提取视频背景音乐?FFmpeg 和转换器都安排上

你是否遇到过这样的情况&#xff1f;看到一个超赞的短视频&#xff0c;里面的背景音乐特别好听&#xff0c;想单独保存下来当手机铃声或收藏&#xff0c;却不知道怎么把音乐从视频里“抠”出来&#xff1f;别担心&#xff01;今天就为大家分享两种简单易行的方法&#xff0c;无…

为什么MCP协议是AI集成的未来API

一、企业AI应用的核心挑战与架构演进 当前企业AI落地面临三大核心痛点&#xff1a; ​​系统集成困境​​&#xff1a;需对接企业内部业务系统&#xff08;CRM/ERP等&#xff09;​​异构环境兼容​​&#xff1a;需整合第三方AI服务与传统API​​数据孤岛突破​​&#xff1…

Apache Tomcat样例目录session操纵漏洞解读

【漏洞名称】&#xff1a;Apache Tomcat样例目录session操纵漏洞 &#xff08;Apache Tomcat示例目录漏洞&#xff09;【漏洞等级】&#xff1a;中危&#xff0c;5.9分。【漏洞描述】Apache Tomcat默认安装页面中存在examples样例目录&#xff0c;里面存放着Servlets、JSP、Web…

Go语言实战案例:实现HTTP客户端请求并解析响应

本文是 Go 网络与并发实战系列的第2篇&#xff0c;聚焦于如何使用 Go 实现一个 HTTP 客户端&#xff0c;完成请求发送、响应解析、错误处理、Header与Body提取等完整流程。一、前言&#xff1a;为什么学习HTTP客户端&#xff1f;在日常开发中&#xff0c;无论是调用 RESTful AP…

java的冒泡排序算法

冒泡排序是一种简单的排序算法&#xff0c;通过重复遍历待排序序列&#xff0c;比较相邻元素并在必要时交换位置&#xff0c;最终实现排序。以下是Java实现的详细说明&#xff1a;核心原理‌比较相邻元素‌&#xff1a;从序列第一个元素开始&#xff0c;逐对比较相邻元素的大小…

玻尔兹曼分布与玻尔兹曼探索

目录 玻尔兹曼分布定义 玻尔兹曼探索&#xff1a; 1. 玻尔兹曼分布公式 2. 温度 T 如何影响采样结果&#xff1f; (1) 高温 (T→∞)&#xff1a; (2) 低温 (T→0)&#xff1a; (3) 中等温度 (T∈(0,∞))&#xff1a; 3. 直观示例 4. 实际应用中的意义 5.核心误区澄清…

【工具】jsDelivr CDN完全指南:免费高速的开源项目CDN服务

前言 在现代Web开发中&#xff0c;内容分发网络&#xff08;CDN&#xff09;已经成为提升网站性能的重要工具。jsDelivr作为一个免费、快速、可靠的开源CDN服务&#xff0c;为全球开发者提供了优质的静态资源分发服务。无论是加速GitHub仓库访问、分发npm包&#xff0c;还是为…

OSPF笔记整理

一、OSPF 基础特性1. 技术背景&#xff08;对比 RIP&#xff09;RIP 的缺陷&#xff1a;最大跳数 15 限制、周期性发送全路由表&#xff08;占用带宽&#xff09;、收敛慢、以跳数为度量值、易产生环路、30 秒更新间隔。OSPF 的改进&#xff1a;无跳数限制&#xff08;支持大规…

sqLite 数据库 (3):以编程方式使用 sqLite,4 个函数,以及 sqLite 移植,合并编译

&#xff08;22&#xff09; 只有四个函数 &#xff1a;以及 &#xff1a;&#xff08;23&#xff09;以及 &#xff1a;&#xff08;24&#xff09;&#xff08;25&#xff09; sqLite 的源代码很少 &#xff1a;&#xff08;26&#xff09;&#xff08;27&#xff09;&#x…

Nginx跨域问题与 MIME 类型错误深度排错指南:解决 MIME type of “application/octet-stream“ 报错

前言&#xff1a;在 Web 开发中&#xff0c;跨域请求和资源加载错误是前端工程师和运维人员经常遇到的棘手问题。本文将详细解析 Nginx 环境下跨域配置的多种方案、gzip 类型参数的优化要点&#xff0c;以及.mjs 文件 MIME 类型错误的解决方法&#xff0c;并结合排错思路和原理…

什么是大端?什么是小端?如何验证?

什么是大端&#xff1f;什么是小端&#xff1f;如何验证&#xff1f; 在计算机系统中&#xff0c;大端&#xff08;Big-Endian&#xff09; 和小端&#xff08;Little-Endian&#xff09; 是两种不同的字节序&#xff08;Byte Order&#xff09;&#xff0c;用于描述多字节数据…

JavaScript 语句和函数

1. JavaScript 语句 1&#xff09;if语句 if (condition) statement1 else statement2这里的条件&#xff08;condition&#xff09;可以是任何表达式&#xff0c;并且求值结果不一定是布尔值。 ECMAScript会自动调用Boolean()函数将这个表达式的值转换为布尔值。 如果条件…

代码随想录刷题Day22

替换数字 这道题比较简单&#xff0c;遇到字母就copy到新的字符数组&#xff0c;如果是遇到数字&#xff0c;就在新字符数组中加入number的字符串。代码如下&#xff1a; #include<stdio.h> #include<ctype.h> #include<string.h> #define Max 1000000 int…

逻辑回归参数调优实战指南

逻辑回归的参数调节参数展示 LogisticRegression(penaltyl2,dualFalse,tol1e4,C1.0,fit_interceptTrue,intercept_scaling1,class_weightNone,random_stateNone,solverliblinear,max_iter100,multi_classovr,verbose0,warm_startFalse, n_jobs1)在前面的学习中&#xff0c;我们…

cocosCreator2.4 googlePlay登录升级、API 35、16KB内存页面的支持

环境&#xff1a;我这里是cocosCreator 2.4.12 导出的android 工程 登录升级 后台收到的google 的提醒&#xff1a; 之前是通过implementation com.google.android.gms:play-services-auth:20.0.0 来获取玩家 uid 和 邮箱&#xff0c;然后发送到我们的服务器获取账号。 升级…

unity avpro实现互动影游关键问题

创建视频播放器​在Hierarchy面板中右键创建&#xff1a;Video > AVPro Video - MediaPlayer创建后会生成一个MediaPlayer对象&#xff0c;用于控制视频播放添加视频资源将视频文件放入项目的StreamingAssets文件夹下在MediaPlayer组件的设置中选择要播放的视频文件在UI上显…