电子发烧友网 > 模拟技术 > 正文

数字滤波算法克服随机干扰的误差具有哪些优点?

2020年07月08日 11:13 次阅读

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

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

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

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

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

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

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

(1)限幅滤波算法

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

算法的程序代码如下:

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

说明:限幅滤波法主要用于处理变化较为缓慢的数据,如温度、物体的位置等。使用时,关键要选取合适的门限制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;countsum+=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;countsum=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(小数)中。

小结一下吧:数字滤波器,说白了,就是多次采样求平均值的一个过程,精确一点的,就是再顺序排列,去掉首位再求平均值,就是求平均数!!
       责任编辑:pj

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播

电子发烧友观察

一线报道 · 深度观察 · 最新资讯
收藏 人收藏
分享:

评论

相关推荐

书童哥(龙顺宇)62讲生动课程带您玩儿转STM8单片机

【课程介绍】:朋友们大家好,本套视频教程由本人录制,现做为录播课程上传至电子发烧友网平台,感谢电子发烧友网让单片机学习的
发烧友学院发表于 2019-01-19 00:00 3015次阅读
书童哥(龙顺宇)62讲生动课程带您玩儿转STM8单片机

单片机开发串口是应用最为广泛的通信接口

通用同步收发器(USART)是一种串行接口设备,可以对其进行编程以进行异步或同步通信。
发表于 2020-07-08 11:21 22次阅读
单片机开发串口是应用最为广泛的通信接口

单片机和PLC之间有什么区别?

单片机的特点是编程、维护相对复杂,编程方式常用C语言或者汇编语言,成本较低,I/O接口相对有限。
发表于 2020-07-08 11:00 53次阅读
单片机和PLC之间有什么区别?

关于单片机系统EMC测试

它包括电磁干扰(EMI)和电磁敏感性(EMS)两部分。由于电器产品在使用时对其它电器有电磁干扰,或受....
发表于 2020-07-08 10:56 34次阅读
关于单片机系统EMC测试

单片机和数字电路怎么抗干扰?

LED电源的工程师经常提及“恒流”驱动,其实,在很多电子设备中,有许多用电设备要求供给的电流(而不是....
发表于 2020-07-08 08:43 36次阅读
单片机和数字电路怎么抗干扰?

多个单片机用nRF24l01模块做发射,一个做接收,如何实现的?

准备做一个简易的家庭温度测量仪,每个房间都放置一个单片机加发射模块,在客厅里放置一个单片机加接收模块,不知道多...
发表于 2020-07-08 07:45 9次阅读
多个单片机用nRF24l01模块做发射,一个做接收,如何实现的?

手把手教程:各类数字电源设计实例(程序+原理图)

本资料分享了数字电源设计实例,包含程序、原理图等资料,手把手带你独立设计属于自己的数字电源。 ...
发表于 2020-07-07 15:13 336次阅读
手把手教程:各类数字电源设计实例(程序+原理图)

串口助手接收单片机发送过来的字符串,发送值与接收值不一样

串口助手接收单片机发送过来的字符串,发送与接收不一样,发送同一串字符串,每次接收到的都不一样,但接收到都是...
发表于 2020-07-07 15:10 117次阅读
串口助手接收单片机发送过来的字符串,发送值与接收值不一样

电流互感器采样电路的工作原理

(2)采用电阻采样的电流采样单元如下图(b)所示。电阻R320是串接在IGBT管e极与电源负极之间的....
发表于 2020-07-07 14:38 56次阅读
电流互感器采样电路的工作原理

3.3V 单片机和 5V 单片机通信的两种思路

个单片机由于电平不同,串口通信可能会失败,这时候需要通过电平转换电路来解决,本文给出了两种方法,一种是通过三极...
发表于 2020-07-07 14:11 403次阅读
3.3V 单片机和 5V 单片机通信的两种思路

51单片机 气体烟雾报警器

大家好,我做一个气体烟雾报警器,但是代码有点问题,不会把气体浓度等级显示到数码管上,而且报警不太灵敏,把等级降...
发表于 2020-07-07 10:17 127次阅读
51单片机 气体烟雾报警器

RISC-V单片机玩转ESP8266 WIFI模...

程序主要包括如下4个功能模块:ESP01S初始化、串口处理、Event回调函数、事件处理;串口处理模....
发表于 2020-07-07 09:26 59次阅读
RISC-V单片机玩转ESP8266 WIFI模...

40个经典单片机实验帮你成功 206页 2.6M

40个经典单片机实验帮你成功 206页 2.6M 非常适合初学者和毕设 资料分享来自网络资源 ...
发表于 2020-07-06 22:13 146次阅读
40个经典单片机实验帮你成功 206页 2.6M

51单片机c程序

void tim( )interrupt 1 {     static  uchar count=0;     TH0=0xfc; &nb...
发表于 2020-07-06 12:41 151次阅读
51单片机c程序

当前常用单片机开发模式有哪些

单片机开发的过程肯定是需要单片机开发工具的支持的,进行程序的调试等是单片机开发过程更加顺畅,缩短开发....
发表于 2020-07-05 11:12 84次阅读
当前常用单片机开发模式有哪些

低功耗MCU单片机如何选型

 小编给带来分享低功耗MCU单片机如何选型,需要关注以下几点。
发表于 2020-07-05 11:11 108次阅读
低功耗MCU单片机如何选型

单片机芯片生产工艺对单片机芯片良率的影响

单片机芯片生产工艺对单片机芯片良率的影响是至关重要的。这些因素可以细化到单片机芯片工艺制程步骤数量、....
发表于 2020-07-05 11:08 60次阅读
单片机芯片生产工艺对单片机芯片良率的影响

基于单片机的点火系统工作原理

汽车电子市场火热,英锐恩科技分享基于单片机的点或市场。与传统的机械调节式点火时刻控制系统相比,基于微....
发表于 2020-07-05 11:05 93次阅读
基于单片机的点火系统工作原理

8051单片机架构_封装及原理图

 继8051单片机成功之后,许多其他半导体制造商纷纷以自己的品牌发布了使用MCS-51内核的单片机。....
发表于 2020-07-05 11:01 75次阅读
8051单片机架构_封装及原理图

学习单片机C语言,必知的数据存储与程序编写知识!

堆区(heap):就是那些由new分配的内存块,它们的释放编译器不去管,由我们的应用程序去控制,一般....
发表于 2020-07-05 10:31 232次阅读
学习单片机C语言,必知的数据存储与程序编写知识!

插入uart不显示COM号怎么解决?

[table] [tr][td]我插入jtag口显示USB Serial Port(com2),插入UART只会显示USB to UART Adapter,...
发表于 2020-07-04 13:40 199次阅读
插入uart不显示COM号怎么解决?

单片机最小系统的设计资料概述

单片机最小系统特点:系统资源完全开放,配合其它模块板或自行搭建用户电路可实现任意实验功能。接口设计灵....
发表于 2020-07-04 12:09 464次阅读
单片机最小系统的设计资料概述

使用单片机设计IC卡读写器的资料概述

本文对AT24系列存贮器和AT89系列单片机的特征及总线状态作为介绍,并以AT24C01与AT89C....
发表于 2020-07-04 12:09 536次阅读
使用单片机设计IC卡读写器的资料概述

如何将PIC单片机AD转换数据打包

pic单片机作用宽泛,对于pic单片机,大家已不再像若干年前一样一无所知。随着对pic单片机的使用,....
发表于 2020-07-04 11:13 714次阅读
如何将PIC单片机AD转换数据打包

如何选择合适的PIC单片机?PIC单片机或运算符...

pic单片机对于大家早已不再是琢磨不透的大山,随着pic单片机的使用,大家对pic单片机的认识逐步增....
发表于 2020-07-04 09:28 350次阅读
如何选择合适的PIC单片机?PIC单片机或运算符...

晶振应该如何实现秒信号

晶振的重要性显而易见,缺少晶振,单片机等器件将不能良好运行。因此,大家有必要增进对晶振的认识。为此,....
发表于 2020-07-04 09:28 291次阅读
晶振应该如何实现秒信号

如何判断晶振的好坏晶振对于单片机有怎么样的影响

晶振的作用日渐突出,本文中,将基于三方面介绍晶振:1.如何判断晶振好坏,2.石英晶振的运用准则,3.....
发表于 2020-07-04 09:27 647次阅读
如何判断晶振的好坏晶振对于单片机有怎么样的影响

国产航顺芯(HK)高性价比32位MCU选型表分享

国产航顺芯(HK)高性价比32位MCU选型表,有需要的可以了解下 ...
发表于 2020-07-03 16:51 208次阅读
国产航顺芯(HK)高性价比32位MCU选型表分享

有大神用过瑞萨单片机开发过机车仪表盘吗?

摩托车仪表盘的油量与速度采集算法优化是怎么做的? 油量是通过AD采样,速度是外部中断触发计数,换算成频率再折合...
发表于 2020-07-03 16:44 182次阅读
有大神用过瑞萨单片机开发过机车仪表盘吗?

PCB板上电后的运行情况

对于手边的一盒STC单片机,测试一下它们使用相同的ISP方案在下载过程中是否都可以按照相同的方式完成....
发表于 2020-07-03 09:14 328次阅读
PCB板上电后的运行情况

基于定时控制寄存器TCON

如果定时器工作在中断方式下,则当定时器的当前值计满溢出时,就会触发定时器溢出中断。
发表于 2020-07-03 09:11 193次阅读
基于定时控制寄存器TCON

51单片机系统板开发常见错误大全

对元件封装没有认真考虑,造成 PCB 与原理图之间不对应
发表于 2020-07-02 18:01 61次阅读
51单片机系统板开发常见错误大全

基于AVR单片机的RFID阅读器设计方案

无线射频识别(Radio Frequency Identification,RFID)是利用感应、电....
发表于 2020-07-02 16:07 58次阅读
基于AVR单片机的RFID阅读器设计方案

固件模块可以分为哪几种类型?

固件模块原理固件开发中模块化编程的基本概念是创建固件模块。从概念上讲,模块代表关注点分离。在计算机科....
发表于 2020-07-01 17:05 317次阅读
固件模块可以分为哪几种类型?

单片机内部结构几个基本概念

请大家自己写上3盏灯的情况000 001 010 011 100 101 110 111我们来看,这....
发表于 2020-07-01 16:49 265次阅读
单片机内部结构几个基本概念

单片机开发一个数据采集系统

本例题采用可调电阻 调节电压值作为模拟信号的输入量,通过A/D转换芯片AD0808把模拟信号转换为数....
发表于 2020-07-01 16:47 308次阅读
单片机开发一个数据采集系统

关于意法半导体STM32单片机的特性分析

MCU经过多年发展,性能也得到了很大的提升。因为MCU必须顺序执行程序,所以适于做控制,较多地应用于....
发表于 2020-07-01 13:41 37次阅读
关于意法半导体STM32单片机的特性分析

单片机的I/O接口电路的扩展

单片机I/O (输入/输出)接口是其与外设交换数字信息的桥梁。事实上,真正用作I/O口线的只有P1口....
发表于 2020-06-30 15:37 533次阅读
单片机的I/O接口电路的扩展

新手教程:单片机的学习实践步骤

运用单片机便是了解单片机硬件结构,以及内部资源的运用,在汇编或C语言中学会各种功用的初始化设置,以及....
发表于 2020-06-30 15:33 525次阅读
新手教程:单片机的学习实践步骤

单片机入门需要了解的知识

好多人学习单片机始终不能入门,那怎么才能快速的入门呢?
发表于 2020-06-30 15:16 386次阅读
单片机入门需要了解的知识

32位单片机STM32F7外扩QSPI SRAM...

意法半导体STM32F7系列MCU采用高性能的ARM Cortex-M7核心,借助ST的ART Ac....
发表于 2020-06-30 14:32 61次阅读
32位单片机STM32F7外扩QSPI SRAM...