0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机实现数字滤波详解

2oON_changxuemc 来源:未知 作者:邓佳佳 2018-03-07 14:59 次阅读

前言

单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数**算,尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是介绍如何用单片机实现数字滤波。

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

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

1、数字滤波无需其他的硬件成本,只用一个计算过程,可靠性高,不存在阻抗匹配问题。尤其是数字滤波可以对频率很低的信号进行滤波,这是模拟滤波器做不到的。

2、数字滤波使用软件算法实现,多输入通道可共用一个滤波程序,降低系统开支。

3、只要适当改变滤波器的滤波程序或运算,就能方便地改变其滤波特性,这对于滤除低频干扰和随机信号会有较大的效果。

4、在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。

(1)限幅滤波算法

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

算法的程序代码如下:

#defineA //允许的最大差值

char data; //上一次的数据

char filter()

{

char datanew; //新数据变量

datanew=get_data(); //获得新数据变量

if((datanew-data)>A||(data-datanew>A))

return data;

else

return datanew;

}

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

(2)中值滤波算法

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

算法的程序代码如下:

#define N11 //定义获得的数据个数

char filter()

{

char value_buff[N]; //定义存储数据的数组

char count,i,j,temp;

for(count=0;count

{

value_buf[count]=get_data();

delay(); //如果采集数据比较慢,那么就需要延时或中断

}

for(j=0;j

{

for(value_buff>value_buff[i+1]

{

temp=value_buff;

value_buff=value_buff[i+1];

value_buff[i+1]=temp;

}

}

return value_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的结束条件。这样加权运算之后的累加和即为有效采样值。加权系数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(小数)中。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    5991

    文章

    43904

    浏览量

    619615
  • 数字滤波
    +关注

    关注

    1

    文章

    55

    浏览量

    16780

原文标题:单片机实现数字滤波详解

文章出处:【微信号:changxuemcu,微信公众号:畅学单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    数字滤波器的频率响应与模拟滤波器的频率响应有何区别

    数字滤波器的频率响应与模拟滤波器的频率响应有何区别  数字滤波器和模拟滤波器是用于信号处理和滤波的两种主要类型的
    的头像 发表于 02-05 09:10 293次阅读

    数字滤波器在中频处理中的分类及区别

    数字滤波器在中频处理中的分类主要依据其用途和性能要求。
    的头像 发表于 01-29 17:03 259次阅读

    ∑-∆型ADC数字滤波器对PID的影响是什么?

    一般的∑-∆型ADC 都内置有数字滤波器,这些数字滤波器对信号会产生相移吧,这个相移有多大,对做数字PID有影响吗?
    发表于 12-07 06:22

    大佬总结!这篇把单片机数字滤波算法讲绝了

    单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是介绍如何用
    发表于 11-30 18:39

    FIR数字滤波器的理论和设计

    电子发烧友网站提供《FIR数字滤波器的理论和设计.rar》资料免费下载
    发表于 11-18 14:56 0次下载
    FIR<b class='flag-5'>数字滤波</b>器的理论和设计

    数字滤波器基本结构介绍

    电子发烧友网站提供《数字滤波器基本结构介绍.rar》资料免费下载
    发表于 11-18 11:05 0次下载
    <b class='flag-5'>数字滤波</b>器基本结构介绍

    IIR数字滤波器时域滤波效果

    电子发烧友网站提供《IIR数字滤波器时域滤波效果.pdf》资料免费下载
    发表于 11-18 09:58 1次下载
    IIR<b class='flag-5'>数字滤波</b>器时域<b class='flag-5'>滤波</b>效果

    基于JN5121单片机的电磁阀信号数字滤波算法实现

    电子发烧友网站提供《基于JN5121单片机的电磁阀信号数字滤波算法实现.pdf》资料免费下载
    发表于 10-25 10:18 0次下载
    基于JN5121<b class='flag-5'>单片机</b>的电磁阀信号<b class='flag-5'>数字滤波</b>算法<b class='flag-5'>实现</b>

    什么是数字滤波器的采样速率?和输入信号的频率有什么关系?

    什么是数字滤波器的采样速率?和输入信号的频率有什么关系? 数字滤波器的采样速率是指数字滤波器输入信号的采样频率,也称为采样率,通常用赫兹(Hz)表示。在数字信号处理中,为了
    的头像 发表于 10-20 15:02 1465次阅读

    基于Matlab和DSP设计FIR数字滤波器方案

    介绍了基于Matlab和DSP设计FIR数字滤波器的四种方法,并经过实验,将一个多频率成分的信号通过该滤波器并进行比对,实验结果表明,这四种方法都能有效地实现FIR滤波器的设计任务。
    发表于 10-19 16:29 0次下载
    基于Matlab和DSP设计FIR<b class='flag-5'>数字滤波</b>器方案

    请问如何利用51单片机实现滤波

    如何利用51单片机实现滤波
    发表于 10-18 06:13

    电动机的单片机控制介绍

    的控制原理和采用单片机进行控制的方法,并给出了单片机控制电路和软件。同,还介绍了用于电动机驱动的常用功率元器件的特性和驱动电路,用于电动机闭环控制的常用传感器的理以及与单片机的接口电路,用于电动机优化控制的
    发表于 09-22 07:05

    数字滤波器和模拟滤波器有哪些区别

    元器件采购网将以数字滤波器和模拟滤波器区别、数字滤波器和模拟滤波器的优缺点为主题进行介绍。 一、数字滤波器和模拟
    的头像 发表于 06-27 16:22 1011次阅读
    <b class='flag-5'>数字滤波</b>器和模拟<b class='flag-5'>滤波</b>器有哪些区别

    数字滤波器和模拟滤波器有哪些区别

    数字滤波器(Digital Filter)是一种常见的信号处理设备,可以对数字信号进行滤波、降噪和增强等操作。它广泛应用于各种领域,如通讯、音频处理、图像处理、控制系统等。下面AMEYA360电子元器件采购网将以
    的头像 发表于 06-27 16:02 649次阅读

    从模拟滤波器到数字滤波器的设计方法

    总的来看,IIR数字滤波器的设计方法有直接法和间接法。直接设计法通过零极点累试进行
    的头像 发表于 06-20 14:28 1627次阅读
    从模拟<b class='flag-5'>滤波</b>器到<b class='flag-5'>数字滤波</b>器的设计方法