首页 > 编程知识 正文

均值滤波怎么计算,滑动平均滤波器的窗口大小

时间:2023-05-03 18:44:27 阅读:141980 作者:1291

前言:目录原理代码讨论改进参考文章

前言

使用电机速度进行闭环控制时,我们知道传感器的数据受到了高频噪声的影响,我们希望先进行滤波处理。

原理滑动平均滤波器的本质是低通滤波器,可以看作是FIR滤波器的特殊情况。 域表示为

y(k ) 1n ) I=0n1x ) kI ) y ) k ) ) FRAC(1) n ) sum_{I=0}^{n-1}x ) kI ) y ) k}=n1I=0n1x

其中,n是滤波器长度。

代码比较简单,所以没有注释。 我想大概是设定滤波器长度的数组,持续更新数组的内容,求出平均值就可以了的思想。 在写的过程中,我意识到其实用队列写应该更快。 但是,我偷懒了。 因为可以使用单片机,所以那样就可以了。 如果有写的东西,请一起讨论。

/*滑动平均滤波器长度*/# definem VF _ length8float moving _ average _ filtre (float xn ) { static int index=-1; 静态浮动缓冲器[ mvf _ length ]; 静态浮动sum=0; 浮yn=0; int i=0; if(index==-1 ) (/初始化for ) I=0; i MVF_LENGTH; I ) { buffer[i]=xn; } sum=xn*MVF_LENGTH; 索引=0; } else { sum -=buffer[index]; buffer[index]=xn; sum =xn; 索引; if(index=mvf_length ) { index=0; } } yn=sum/MVF_LENGTH; 返回yn; }研究滑动平均滤波器长度的选择也是一个值得探讨的问题。 如果太短,则无法消除高频噪声,如果太长,则延迟会变大。

参考文章给出了滤波器长度和系统截止频率的经验公式:

n=0.443 fs/fcomath RM { n }=0.443 *math RM { f } _ {math RM { s }/ math RM { fco } n=0.443 fs/fco

其中,fs为采样频率,fco为截止频率。 简单地说,导出的过程是将输入信号假定为正弦信号,将离散信号变换为连续信号后,对输出信号进行傅立叶变换,得到他们的关系。

滑动平均滤波器频率响应

图片来源: https://www.cn blogs.com/ping Wen/p/6670675.html

最近看了改进的计算公式,可以节约计算时间。 原理很简单,不学习思考就是无差别啊。

经改进的公式如下:

y(k )=y ) k1 ) 1n ) x ) x ) kn ) ) y ) k )=y(k-1 ) (FRAC(1) (FRAC(1 ) ) x ) k-n ) ) y ) y ) kb ) k

参考文章的截止频率与MAF滤波器长度的关系

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。