单片机的主要功能是控制外围设备,实现一定的通讯和数据处理。虽然单片机不擅长实现算法和进行复杂的运算,但在一些特定的场合,数学运算是不可避免的。例如:单片机在采集数据时,会遇到数据出现随机错误。随机误差是由随机干扰引起的。其特点是在相同条件下测量同一个量时,其大小和符号会随机变化,不能预测,但多次测量的结果是符合统计规律的。为了克服随机干扰引起的误差,可以在硬件上采用滤波技术,在软件上采用软件算法实现数字滤波。滤波算法往往是系统测控算法的重要组成部分,具有很强的实时性。采用数字滤波算法来克服随机干扰的误差具有以下优点:数字滤波不需要其他硬件成本,只需一个计算过程,可靠性高,不存在阻抗匹配问题。特别是数字滤波可以滤除频率很低的信号,这是模拟滤波器不可能做到的。数字滤波采用软件算法实现,多个输入通道可共用一个滤波程序,降低系统成本。只要适当改变滤波器的滤波程序或操作,就可以方便地改变其滤波特性,对滤除低频干扰和随机信号有很大的作用。单片机系统中常用的滤波算法有极限滤波法、中值滤波法、算术平均滤波法、加权平均滤波法和移动平均滤波法。限幅滤波算法在运算过程中将相邻的两个样本相减,求其增量,然后将增量的绝对值与两个样本所允许的最大差值A进行比较。A的大小取决于被测对象的具体情况。如果小于或等于最大允许差值,则本次采样有效;否则,取最后一次采样值作为本次数据的样本。该算法的程序代码如下:1#defineA//允许的最大差值为23chardata;//最后一个数据45charfilter()67{89chardatanew;//新数据变量1011datanew=get_data();//获取newdatavariable1213if((datanew-data)>A||(data-datanew>A))1415returndata;1617else1819returndatanew;2021}说明:剪裁滤波方式主要用于处理变化缓慢的数据,比如温度,位置的对象。使用时,关键是选择合适的门限A。通常这可以从经验数据中得到,如果需要,可以通过实验得到中值滤波算法。操作过程是对某个参数连续采样N次(N一般为奇数),然后将N个样本的值从小到大排列。然后取中间值作为这个采样值,整个过程其实就是一个序列排序的过程。该算法的程序代码如下:1#defineN11//定义获取数据的个数23charfilter()45{67charvalue_buff[N];//定义存储数据的数组89charcount,i,j,temp;1011for(count=0;count
