单片机数字滤波算法的实现方法

时间:2022-12-06作者:佚名

在单片机进行数据采集时,有时会遇到数据的随机误差的问题,随机误差由随机干扰引起,其特点是在相同条件下测量同一量时,大小和符号会现无规则的变化,从而导致无法预测,但多次测量的结果符合统计规律。

为了克服随机干扰引起的误差,在硬件上采用滤波技术,在软件上采用软件算法实现数字滤波。滤波算法是系统测控算法的一个重要组成部分,实时性很强。

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

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个数据始终是最新更新的数据。采用环型队列结构可以方便地实现这种数据存放方式。

程序代码:

相关阅读

图解一个两台电机循环运行的电路

今天来图解一个两台电机循环运行的电路,此电路用到两个普通通电延时型时间继电器。 图1 如图1,两台电机,M1和M2,按下启动按钮以后,两台电机将轮流循环运行。图中红色代表带...
2023-08-21
图解一个两台电机循环运行的电路

电工必看!变频器实物接线全图解,新手照着接零失误

干电工维修这么多年,变频器接线绝对是新手最容易踩坑的环节!要么接错线烧模块,要么功能用不出来,通电就报警,白忙活大半天。今天这张实物接线图,把常用功能全给你标得明明白白,零基...
2026-05-26
电工必看!变频器实物接线全图解,新手照着接零失误

继电器的分类与作用,你还傻傻搞不懂吗?

【免费下载】 PLC软件下载_PLC软件安装教程_PLC手册下载_PLC案例下载! 【免费学习】 变频器精品课程_西门子PLC精品教程_三菱PLC精品教程! 之前有学员说搞不懂继电器,继电器都有哪些...
2023-06-27

花费30块一平做的水电,验收时都说比70块一平的还要好用

在装修做水电时,由于自己的预算比较紧张,就很自然的选择了很便宜的一种做法,虽然只是简单做,但水电的重要性,我还是知道的,所以在电线这块,让师傅把所有的老线都给换了...
2023-06-11
花费30块一平做的水电,验收时都说比70块一平的还要好用

为什么现在电路板中使用贴片元件的情况要多于插件元件

目前越来越多的电路板使用贴片元件。除了特殊需要外,新设计的电路板都是优先选取贴片元器件。贴片元件因其体积小、焊接方便、维护方便等优点,已成为许多器件的优先选择。尤...
2023-03-31
为什么现在电路板中使用贴片元件的情况要多于插件元件

热销商品

硅胶垫片/硅胶垫/硅胶垫片圆形/硅胶垫圈/橡胶垫片/氟胶垫片

硅胶垫片(又称硅胶垫、硅胶垫圈)是一种由硅橡胶制成的密封材料,具有优异的耐高低温(-60℃~230℃)、耐老化、绝缘和环保无毒特性,广泛用于食品、医疗、电子及家电等领域...
1

厂家直销一字十字螺丝刀改锥螺丝批工具配送迷你单头螺丝刀起子

厂家直销一字十字螺丝刀改锥螺丝批工具,精选优质合金钢材质,硬度高、耐磨损,使用寿命长。迷你单头设计,小巧轻便,便于携带与收纳,适合家庭维修、电子产品拆装、眼镜修理...
0.4

保联梅花内六角螺丝刀套装星型梅花t15米字t30工具t10套装t25花型

保联梅花内六角螺丝刀套装是一款多功能且实用的工具,适用于广泛的维修和安装任务。该套装包含多种尺寸的内六角螺丝刀,包括星型、T15米字、T30以及T10,以满足不同大...
2.98

暗装开关插座面板单开双控一开五孔二三极USB快充肤感超薄家用4开

暗装开关插座面板,简约设计,完美融入家居环境。单开双控,轻松实现远程控制,方便实用。一开五孔,满足多种电器插孔需求;二三极USB快充,快速充电,高效便捷。超薄设计,节省空...
1.34

室外电线电缆JKLYJ4X16/25/35/50/70平方国标4芯平行线集束架空线

JKLYJ4X16/25/35/50/70平方国标4芯平行线集束架空线是一种专为室外电力传输设计的电缆。它采用高强度的聚氯乙烯(PVC)材料制造,具备优良的耐候性和抗老化性能,适用于...
3.8

网站栏目