当前位置:首页 » 操作系统 » 滑动滤波算法

滑动滤波算法

发布时间: 2022-10-22 03:24:24

‘壹’ 滑动平均滤波算法

value_buf可以理解为循环队列,里面的数据不断由AD采样值来更新。每读到一个新AD值,value_buf先更新再求平均。程序中有两个小错误,但思想是对的。
if(i==N) i=0;
sum +=value_buf[count];

‘贰’ 常见信号处理过程中的平均方式有哪几种

一、算术平均滤波法

算术平均滤波法是指对一点数据连续采n个值,然后取其平均值。这种方法能够滤除一般的随机干扰信号,使信号变的平滑,但当n值较大时,灵敏度会降低,故n值要视具体情况进行选取。一般情况下取3~5平均即可。
二、滑动平均滤波法
算术平均滤波法每计算一次数据需要采集n次数据,这对于测量数据较慢或要求数据计算速度较快的实时控制系统则无法使用,此时可采用滑动平均滤波法。滑动平均滤波法是把n个采样值看成一个队列,队列是长度为n,每进行一次采样就把采样值放入队尾,而去掉原队首的一个采样值,这样,队列中就始终有n个“最新”的采样值,对这n个值进行平均就可以得到新的滤波值。
滑动平均滤波法对周期性的干扰具有较好的抑制作用,但对偶然出现的脉冲性干扰抑制作用差,难以消除由于脉冲干扰而引起的采样值的偏差。
三、去极值滤波法
算术平均滤波法和滑动平均滤波法都难以消除脉冲干扰所引起的误差,会将脉冲干扰“平均”到结果中去。在脉冲干扰严重的场合可采用去极值平均滤波法。去极值平均滤波法的思想是:连续采样n个值,找出并去除其中的最大值和最小值,然后对其余的n-2个值求平均,即可得到有效采样值。为了使算法简单,n通常取偶数,如4,6,8,10等。
四、中位值滤波法
对某一被测信号连续采样n次,然后把n次采样值按大小排序,取中间值为本次采样值。为方便,n一般取奇数。算法上,则可以采用“冒泡法”来对这n个数据进行排序。中位值滤波法能有效地克服因偶然因素引起的波动干扰,但对于一些快变参数则不宜采用。

‘叁’ 如何在一个死循环中加入一个滑动均值滤波

clear clc x=randn(1,100); %x为要滤波的信号 m=5;%表示平滑滤波窗长度,这是长度为奇数的情况 %前m/2,最后m/2个点没滤波,设为原来的值就行 for i=1:length(x)-m+1 y(i+(m-1)/2)=sum(x(i:i+m-1))/m; end figure(1); plot(x,'r');hold on;plot(y,'g');hold off; 这是最简单的,不知道你需要基于什么算法的平滑滤波!有重心法的,算术滑动平均的,变参数双指数平滑方法,还有用插值的方式去平滑的

‘肆’ 如何用单片机进行数学虑波波

运用单片机的AD采集滤波算法进行数学虑波。
目前用于数学虑波的主要方法:
1、限幅滤波法(又称程序判断滤波法)
A、方法:
根据经验判断,确定两次采样允许的最大偏差值(设为A)
每次检测到新值时判断:
如果本次值与上次值之差<=A,则本次值有效
如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值
B、优点:
能有效克服因偶然因素引起的脉冲干扰
C、缺点
无法抑制那种周期性的干扰
平滑度差
2、中位值滤波法
A、方法:
连续采样N次(N取奇数)
把N次采样值按大小排列
取中间值为本次有效值
B、优点:
能有效克服因偶然因素引起的波动干扰
对温度、液位的变化缓慢的被测参数有良好的滤波效果
C、缺点:
对流量、速度等快速变化的参数不宜
3、算术平均滤波法
A、方法:
连续取N个采样值进行算术平均运算
N值较大时:信号平滑度较高,但灵敏度较低
N值较小时:信号平滑度较低,但灵敏度较高
N值的选取:一般流量,N=12;压力:N=4
B、优点:
适用于对一般具有随机干扰的信号进行滤波
这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动
C、缺点
对于测量速度较慢或要求数据计算速度较快的实时控制不适用
比较浪费RAM
4、递推平均滤波法(又称滑动平均滤波法)
A、方法:
把连续取N个采样值看成一个队列
队列的长度固定为N
每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)
把队列中的N个数据进行算术平均运算,就可获得新的滤波结果
N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4
B、优点:
对周期性干扰有良好的抑制作用,平滑度高
适用于高频振荡的系统
C、缺点:
灵敏度低
对偶然出现的脉冲性干扰的抑制作用较差
不易消除由于脉冲干扰所引起的采样值偏差
不适用于脉冲干扰比较严重的场合
比较浪费RAM
5、中位值平均滤波法(又称防脉冲干扰平均滤波法)
A、方法:
相当于“中位值滤波法”+“算术平均滤波法”
连续采样N个数据,去掉一个最大值和一个最小值
然后计算N-2个数据的算术平均值
N值的选取:3~14
B、优点:
融合了两种滤波法的优点
对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差
C、缺点:
测量速度较慢,和算术平均滤波法一样
比较浪费RAM
6、限幅平均滤波法
A、方法:
相当于“限幅滤波法”+“递推平均滤波法”
每次采样到的新数据先进行限幅处理,
再送入队列进行递推平均滤波处理
B、优点:
融合了两种滤波法的优点
对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差
C、缺点:
比较浪费RAM
7、一阶滞后滤波法
A、方法:
取a=0~1
本次滤波结果=(1-a)*本次采样值+a*上次滤波结果
B、优点:
对周期性干扰具有良好的抑制作用
适用于波动频率较高的场合
C、缺点:
相位滞后,灵敏度低
滞后程度取决于a值大小
不能消除滤波频率高于采样频率的1/2的干扰信号
8、加权递推平均滤波法
A、方法:
是对递推平均滤波法的改进,即不同时刻的数据加以不同的权
通常是,越接近现时刻的数据,权取得越大。
给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低
B、优点:
适用于有较大纯滞后时间常数的对象
和采样周期较短的系统
C、缺点:
对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号
不能迅速反应系统当前所受干扰的严重程度,滤波效果差
9、消抖滤波法
A、方法:
设置一个滤波计数器
将每次采样值与当前有效值比较:
如果采样值=当前有效值,则计数器清零
如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出)
如果计数器溢出,则将本次值替换当前有效值,并清计数器
B、优点:
对于变化缓慢的被测参数有较好的滤波效果,
可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动

‘伍’ 如何用delphi编程实现低通滤波

1.限幅滤波算法(程序判断滤波算法)

方法解析:

根据经验判断,确定两次采样允许的最大偏差值(设定为A),每次检测到新值时判断:

如果本次值与上次值之差<=A,则本次值有效,

如果本次值与上次值只差>A,则本次值无效,放弃本次值,用上次值代替本次值。

优点:

能有效克服因偶然因素引起的脉冲干扰

缺点:

无法抑制那种周期性的干扰,平滑度差

[cpp]view plain

  • #defineA10

  • charvalue;

  • charfilter()

  • {

  • charnew_value;

  • new_value=get_ad();

  • if((new_value-value>A)||(value-new_value>A)

  • returnvalue;

  • returnnew_value;

  • }

  • 2.中位值滤波法

    方法解析:

    连续采样N次(N取奇数),把N次采样值按大小排列,取中间值为本次有效值

    优点:

    能有效克服因偶然因素引起的波动干扰,对温度,液位的变化缓慢的被测参数有良好的滤波效果

    缺点:

    对流量,速度等快速变化的参数不宜

    [cpp]view plain

  • #defineN11

  • charfilter()

  • {

  • charvalue_buf[N];

  • charcount,i,j,temp;

  • for(count=0;count<N;count++)

  • {

  • value_buf[count]=get_ad();

  • delay();

  • }

  • for(j=0;j<N-1;j++)

  • {

  • for(i=0;i<N-j;i++)

  • {

  • if(value_buf[i]>value_buf[i+1])

  • {

  • temp=value_buf[i];

  • value_buf[i]=value_buf[i+1];

  • value_buf[i+1]=temp;

  • }

  • }

  • }

  • returnvalue_buf[(N-1)/2];

  • }


  • 3.算术平均滤波
  • 方法解析:

    连续取N个采样值进行平均运算,N值较大时:信号平滑度较高,但灵敏度较低

    N值较小时:信号平滑度较低,但灵敏度较高。N值的选取:一般12左右。

    优点:

    适应于对一般具有随机干扰的信号进行滤波,这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动

    缺点:

    对于测量速度较慢或要求数据计算速度较快的实时控制并不适用,比较浪费RAM

    [cpp]view plain

  • #defineN12

  • charfilter()

  • {

  • intsum=0;

  • for(count=0;count<N;count++)

  • {

  • sum+=get_ad();

  • delay();

  • }

  • return(char)(sum/N);

  • 4.递推平均滤波(滑动平均滤波法)
  • 方法解析:

    把连续取N个采样值看成一个队列,队列的长度固定为N,每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出)。

    把队列中的N个数据进行算术平均运算,就可获得新的滤波结果。N值的选取:一般12.

    优点:

    对周期性干扰有良好的抑制作用,平滑度高,适应于高频振荡的系统

    缺点:

    灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差。不易消除由于脉冲干扰所引起打的采样值偏差,不适用于脉冲干扰比较严重的场合

    浪费RAM

    [cpp]view plain

  • #defineN12

  • charvalue_buf[N];

  • chari=0;

  • charfilter()

  • {

  • charcount;

  • intsum=0;

  • value_buf[i++]=get_ad();

  • if(i==N)i=0;

  • for(count=0;count<N,count++)

  • sum=value_buf[count];

  • return(char)(sum/N);

  • }


  • 5.中位值平均滤波法(防脉冲干扰平均滤波法)
  • 方法解析:

    相当于中位值滤波+算术平均滤波,连续采样N个数据,去掉一个最大值和一个最小值,然后计算N-2个数据的算术平均值。

    N值的选取:3-14

    优点:融合了两种滤波法的优点

    对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。

    缺点:

    测量速度较慢,和算法平均滤波一样,浪费RAM。

    [cpp]view plain

  • #defineN12

  • charfilter()

  • {

  • charcount,i,j;

  • charvalue_buf[N];

  • intsum=0,temp=0;

  • for(count=0;count<N;count++)

  • {

  • value_buf[count]=get_ad();

  • delay();

  • }

  • for(j=0;j<N-1;j++)

  • {

  • for(i=0;i<N-j;i++)

  • {

  • if(value_buf[i]>value_buf[i+1])

  • {

  • temp=value_buf[i];

  • value_buf[i]=value_buf[i+1];

  • value_buf[i+1]=temp;

  • }

  • }

  • }

  • for(count=1;count<N-1;count++)

  • sum+=value[count];

  • return(char)(sum/(N-2));

  • }


  • 6一阶滞后滤波法
  • 方法解析:

    取a=0-1

    本次滤波结果=(1-a)*本次采样值+a*上次滤波结果

    优点:

    对周期性干扰具有良好的抑制作用,适用于波动频率较高的场合

    缺点:

    相位滞后,灵敏度低,滞后程度取决于a值的大小,不能消除滤波频率高于采样频率的1/2的干扰信号

    [cpp]view plain

  • #definea50

  • charvalue;

  • charfilter()

  • {

  • charnew_value;

  • new_value=get_ad();

  • return(100-a)*value+a*new_value;

  • }


  • 7.加权递推平均滤波法
  • 方法解析:

    是对递推平均滤波法的改进,即不同时刻的数据加以不同的权

    通常是,越接近现时刻的数据,权取得越大,给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低。

    优点:

    适用于有较大纯滞后时间常数的对象,和采样周期较短的系统

    缺点:

    对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号,不能迅速反应系统当前所受干扰的严重程度,滤波效果差。

    [cpp]view plain

  • #defineN12

  • charcodecoe[N]={1,2,3,4,5,6,7,8,9,10,11,12};

  • charcodesum_coe=1+2+3+4+5+6+7+8+9+10+11+12;

  • charfilter()

  • {

  • charcount;

  • charvalue_buf[N];

  • intsum=0;

  • for(count=0,count<N;count++)

  • {

  • value_buf[count]=get_ad();

  • delay();

  • }

  • for(count=0,count<N;count++)

  • sum+=value_buf[count]*coe[count];

  • return(char)(sum/sum_coe);

  • }



  • 8.消抖滤波法

    方法解析:

    设置一个滤波计数器,将每次采样值与当前有效值比较:

    如果采样值=当前有效值,则计数器清零,如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出),如果计数器溢出,则将本次值替换当前有效值,并清计数器

    优点:

    对于变化缓慢的被测参数有较好的滤波效果,可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动。

    缺点:

    对于快速变化的参数不宜,如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统

    [cpp]view plain

  • #defineN12

  • charfilter()

  • {

  • charcount=0;

  • charnew_value;

  • new_value=get_ad();

  • while(value!=new_value);

  • {

  • count++;

  • if(count>=N)returnnew_value;

  • delay();

  • new_value=get_ad();

  • }

  • returnvalue;

  • }


  • 10.低通数字滤波
  • 解析:

    低通滤波也称一阶滞后滤波,方法是第N次采样后滤波结果输出值是(1-a)乘第N次采样值加a乘上次滤波结果输出值。可见a<<1。

    该方法适用于变化过程比较慢的参数的滤波的C程序函数如下:

    [cpp]view plain

  • floatlow_filter(floatlow_buf[])

  • {

  • floatsample_value;

  • floatX=0.01;

  • sample_value=(1_X)*low_buf[1]+X*lowbuf[0];

  • retrun(sample_value);

  • }

‘陆’ 平滑滤波的滤波方法

图像的噪声滤波器有很多种,常用的有线性滤波器,非线性滤波器。采用线性滤波如邻域平滑滤波,对受到噪声污染而退化的图像复原,在很多情况下是有效的。但大多数线性滤波器具有低通特性,去除噪声的同时也使图像的边缘变模糊了。而另一种非线性滤波器如中值滤波,在一定程度上可以克服线性滤波器所带来的图像模糊问题,在滤除噪声的同时,较好地保留了图像的边缘信息。
邻域平滑滤波原理
邻域平均法[2]是一种利用Box模版对图像进行模版操作(卷积运算)的图像平滑方法,所谓Box模版是指模版中所有系数都取相同值的模版,常用的3×3和5×5模版如下:
邻域平均法的数学含义是:
(式4-1)
式中:x,y=0,1,…,N-1;S是以(x,y)为中心的邻域的集合,M是S内的点数。
邻域平均法的思想是通过一点和邻域内像素点求平均来去除突变的像素点,从而滤掉一定噪声,其优点是算法简单,计算速度快,其代价会造成图像在一定程度上的模糊。

中值滤波原理
中值滤波[2]就是用一个奇数点的移动窗口,将窗口的中心点的值用窗口内的各点中值代替。假设窗口内有五点,其值为80、90、200、110和120,那么此窗口内各点的中值及为110。
设有一个一维序列f1,f2,…,fn,取窗口长度(点数)为m(m为奇数),对其进行中值滤波,就是从输入序列中相继抽出m个数fi-v,…,fi-1,fi,fi+1,…,fi+v(其中fi为窗口中心值,v=(m-1)/2),再将这m个点按其数值大小顺序排序,取其序号的中心点的那个数作为滤波输出。数学公式表示为:
Yi=Med{fi-v,…,fi-1,fi,fi+1,…,fi+v} i∈N v=(m-1)/2 (式4-2)
Yi称为序列fi-v,…,fi-1,fi,fi+1,…,fi+v的中值
例如,有一序列{0,3,4,0,7},重新排序后为{0,0,3,4,7}则Med{0,0,3,4,7}=3。此列若用平滑滤波,窗口也取5,那么平滑滤波输出为(0+3+4+0+7)/5=2.8。
把一个点的特定长度或形状的邻域称作窗口。在一维情况下,中值滤波器是一个含有奇数个像素的滑动窗口。中值滤波很容易推广到二维,此时可以利用二维形式的窗口。
对于平面图像采用的二维中值滤波可以由下式表示:
(式4-3)
式中:A为窗口,{fij}为二维数据序列,即数字图像各点的灰度值。
对于本系统,由于采集到的是24位真彩色图像,每个像素点分别有R、G、B三个灰度分量,故要在窗口内分别找到这三个分量的中值,分别用这三个中值去代替窗口中心像素点的R、G、B三个灰度分量的值。

‘柒’ 一组数据x[i],对其进行滑动平均滤波,得到在matlab中实现的程序,要求运行完能出对比图的。

clear
clc
x=randn(1,100);
%x为要滤波的信号
m=5;%表示平滑滤波窗长度,这是长度为奇数的情况
%前m/2,最后m/2个点没滤波,设为原来的值就行
for i=1:length(x)-m+1
y(i+(m-1)/2)=sum(x(i:i+m-1))/m;
end
figure(1);
plot(x,'r');hold on;plot(y,'g');hold off;
这是最简单的,不知道你需要基于什么算法的平滑滤波!有重心法的,算术滑动平均的,变参数双指数平滑方法,还有用插值的方式去平滑的

‘捌’ 说明算术平均滤波,加权平均滤波和滑动平均滤波之间的区别以及各自的用途

算术平均滤波每次采样值所占的比例均相等,可用于任何场合:如压力、流量等。加权平均滤波则每次采样值所占的比例不等,可以突出某些部分,使其所占的比例增大,但各次采样的系数总和为∑Ci=1;这种滤波主要用于那些想突出采样的某些部分的场合。而滑动平均滤波则是每次只更新一个采样值,因而采样速度快。此滤波主要用于实时性要求比较快的场合。

‘玖’ 滑动平均值滤波法 用西门子 S7-200 plc编程,要求有程序注释

不需要这样做的!把扰源干掉就行!如果实面需要滤波!可以勾选,一般情况下并不需要!

‘拾’ 滤波在数学上是如何实现的

在单片机进行数据采集时,会遇到数据的随机误差,随机误差是由随机干扰引起的,其特点是在相同条件下测量同一量时,其大小和符号会现无规则的变化而无法预测,但多次测量的结果符合统计规律。为克服随机干扰引起的误差,硬件上可采用滤波技术,软件上可采用软件算法实现数字滤波。滤波算法往往是系统测控算法的一个重要组成部分,实时性很强。

采用数字滤波算法克服随机干扰的误差具有以下优点:

1、数字滤波无需其他的硬件成本,只用一个计算过程,可靠性高,不存在阻抗匹配问题。尤其是数字滤波可以对频率很低的信号进行滤波,这是模拟滤波器做不到的。
2、数字滤波使用软件算法实现,多输入通道可共用一个滤波程序,降低系统开支。
3、只要适当改变滤波器的滤波程序或运算,就能方便地改变其滤波特性,这对于滤除低频干扰和随机信号会有较大的效果。
4、在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。

(1)限幅滤波算法

该运算的过程中将两次相邻的采样相减,求出其增量,然后将增量的绝对值,与两次采样允许的最大差值A进行比较。A的大小由被测对象的具体情况而定,如果小于或等于允许的最大差值,则本次采样有效;否则取上次采样值作为本次数据的样本。

算法的程序代码如下:

#defineA //允许的最大差值
chardata; //上一次的数据
char filter()
{
chardatanew; //新数据变量
datanew=get_data(); //获得新数据变量
if((datanew-data)>A||(data-datanew>A))
return data;
else
returndatanew;
}

说明:限幅滤波法主要用于处理变化较为缓慢的数据,如温度、物体的位置等。使用时,关键要选取合适的门限制A。通常这可由经验数据获得,必要时可通过实验得到。

(2)中值滤波算法

该运算的过程是对某一参数连续采样N次(N一般为奇数),然后把N次采样的值按从小到大排列,再取中间值作为本次采样值,整个过程实际上是一个序列排序的过程。

算法的程序代码如下:
#define N11 //定义获得的数据个数
char filter()
{
charvalue_buff[N]; //定义存储数据的数组
char count,i,j,temp;
for(count=0;count
{
value_buf[count]=get_data();
delay(); //如果采集数据比较慢,那么就需要延时或中断
}
for(j=0;j
{
for(value_buff[i]>value_buff[i+1]
{
temp=value_buff[i];
value_buff[i]=value_buff[i+1];
value_buff[i+1]=temp;
}
}
returnvalue_buff[(N-1)/2];
}

说明:中值滤波比较适用于去掉由偶然因素引起的波动和采样器不稳定而引起的脉动干扰。若被测量值变化比较慢,采用中值滤波法效果会比较好,但如果数据变化比较快,则不宜采用此方法。

(3)算术平均滤波算法

该算法的基本原理很简单,就是连续取N次采样值后进行算术平均。
算法的程序代码如下:
char filter()
{
int sum=0;
for(count=0;count
{
sum+=get_data();
delay():
}
return (char)(sum/N);
}

说明:算术平均滤波算法适用于对具有随机干扰的信号进行滤波。这种信号的特点是有一个平均值,信号在某一数值附近上下波动。信号的平均平滑程度完全到决于N值。当N较大时,平滑度高,灵敏度低;当N较小时,平滑度低,但灵敏度高。为了方便求平均值,N一般取4、8、16、32之类的2的整数幂,以便在程序中用移位操作来代替除法。

(4)加权平均滤波算法

由于前面所说的“算术平均滤波算法”存在平滑度和灵敏度之间的矛盾。为了协调平滑度和灵敏度之间的关系,可采用加权平均滤波。它的原理是对连续N次采样值分别乘上不同的加权系数之后再求累加,加权系数一般先小后大,以突出后面若干采样的效果,加强系统对参数变化趋势的认识。各个加权系数均小于1的小数,且满足总和等于1的结束条件。这样加权运算之后的累加和即为有效采样值。其中加权平均数字滤波的数学模型是:

式中:D为N个采样值的加权平均值:XN-i为第N-i次采样值;N为采样次数;Ci为加权系数。加权系数Ci体现了各种采样值在平均值中所占的比例。一般来说采样次数越靠后,取的比例越大,这样可增加新采样在平均值中所占的比重。加权平均值滤波法可突出一部分信号抵制另一部分信号,以提高采样值变化的灵敏度。

样例程序代码如下:

char codejq[N]={1,2,3,4,5,6,7,8,9,10,11,12}; //code数组为加权系数表,存在程序存储区
char codesum_jq=1+2+3+4+5+6+7+8+9+10+11+12;
char filter()
{
char count;
char value_buff[N];
int sum=0;
for(count=0;count
{
value_buff[count]=get_data();
delay();
}
for(count=0;count
sum+=value_buff[count]*jq[count];
return(char)(sum/sum_jq);
}

(5)滑动平均滤波算法

以上介绍和各种平均滤波算法有一个共同点,即每获取一个有效采样值必须连续进行若干次采样,当采速度慢时,系统的实时得不到保证。这里介绍的滑动平均滤波算法只采样一次,将一次采样值和过去的若干次采样值一起求平均,得到的有效采样值即可投入使用。如果取N个采样值求平均,存储区中必须开辟N个数据的暂存区。每新采集一个数据便存入暂存区中,同时去掉一个最老数据,保存这N个数据始终是最新更新的数据。采用环型队列结构可以方便地实现这种数据存放方式。

程序代码如下:
char value_buff[N];
char i=0;
char filter()
{
char count;
int sum=0;
value_buff[i++]=get_data();
if(i==N)
i=0;
for(count=0;count
sum=value_buff[count];
return (char)(sum/N);
}

(6)低通滤波

将普通硬件RC低通滤波器的微分方程用差分方程来表求,变可以采用软件算法来模拟硬件滤波的功能,经推导,低通滤波算法如下:

Yn=a* Xn+(1-a) *Yn-1
式中 Xn——本次采样值
Yn-1——上次的滤波输出值;
,a——滤波系数,其值通常远小于1;
Yn——本次滤波的输出值。

由上式可以看出,本次滤波的输出值主要取决于上次滤波的输出值(注意不是上次的采样值,这和加权平均滤波是有本质区别的),本次采样值对滤波输出的贡献是比较小的,但多少有些修正作用,这种算法便模拟了具体有教大惯性的低通滤波器功能。滤波算法的截止频率可用以下式计算:

fL=a/2Pit pi为圆周率3.14…
式中 a——滤波系数;
, t——采样间隔时间;
例如:当t=0.5s(即每秒2次),a=1/32时;
fL=(1/32)/(2*3.14*0.5)=0.01Hz

当目标参数为变化很慢的物理量时,这是很有效的。另外一方面,它不能滤除高于1/2采样频率的干搅信号,本例中采样频率为2Hz,故对1Hz以上的干搅信号应采用其他方式滤除,

低通滤波算法程序于加权平均滤波相似,但加权系数只有两个:a和1-a。为计算方便,a取一整数,1-a用256-a,来代替,计算结果舍去最低字节即可,因为只有两项,a和1-a,均以立即数的形式编入程序中,不另外设表格。虽然采样值为单元字节(8位A/D)。为保证运算精度,滤波输出值用双字节表示,其中一个字节整数,一字节小数,否则有可能因为每次舍去尾数而使输出不会变化。
设Yn-1存放在30H(整数)和31H(小数)两单元中,Yn存放在32H(整数)和33H(小数)中。滤波程序如下:
虽千万里,吾往矣。

热点内容
win7c盘加密 发布:2025-05-14 15:04:49 浏览:510
dm码编程 发布:2025-05-14 15:03:56 浏览:402
apache加密 发布:2025-05-14 14:49:13 浏览:967
安卓什么软件苹果不能用 发布:2025-05-14 14:49:03 浏览:769
jsoupjava 发布:2025-05-14 14:38:00 浏览:885
影豹选哪个配置最好 发布:2025-05-14 14:28:50 浏览:255
定期预算法的 发布:2025-05-14 14:24:08 浏览:894
interbase数据库 发布:2025-05-14 13:49:50 浏览:691
微商海报源码 发布:2025-05-14 13:49:42 浏览:347
分布式缓存部署步骤 发布:2025-05-14 13:24:51 浏览:611