当前位置: 首页 > 科技观察

单片机的几种C语言算法_0

时间:2023-03-15 23:12:35 科技观察

单片机的主要功能是控制外围设备,实现一定的通讯和数据处理。虽然单片机不擅长实现算法和进行复杂的运算,但在一些特定的场合,数学运算是不可避免的。例如:单片机在采集数据时,会遇到数据出现随机错误。随机误差是由随机干扰引起的。其特点是在相同条件下测量同一个量时,其大小和符号会随机变化,不能预测,但多次测量的结果是符合统计规律的。为了克服随机干扰引起的误差,可以在硬件上采用滤波技术,在软件上采用软件算法实现数字滤波。滤波算法往往是系统测控算法的重要组成部分,具有很强的实时性。采用数字滤波算法来克服随机干扰的误差具有以下优点:数字滤波不需要其他硬件成本,只需一个计算过程,可靠性高,不存在阻抗匹配问题。特别是数字滤波可以滤除频率很低的信号,这是模拟滤波器不可能做到的。数字滤波采用软件算法实现,多个输入通道可共用一个滤波程序,降低系统成本。只要适当改变滤波器的滤波程序或操作,就可以方便地改变其滤波特性,对滤除低频干扰和随机信号有很大的作用。单片机系统中常用的滤波算法有极限滤波法、中值滤波法、算术平均滤波法、加权平均滤波法和移动平均滤波法。限幅滤波算法在运算过程中将相邻的两个样本相减,求其增量,然后将增量的绝对值与两个样本所允许的最大差值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;countvalue_buff[i+1])2627{2829temp=value_buff[i];3031value_buff[i]=value_buff[i+1];3233value_buff[i+1]=temp;3435}3637}3839returnvalue_buff[(N-1)/2];4041}说明:中值滤波器更适用于去除偶然因素引起的波动和不稳定采样器引起的脉动干扰。如果测量值变化缓慢,使用中值滤波法效果会更好,但如果数据变化很快,就不宜使用这种方法。算术均值滤波算法算法的基本原理很简单,就是连续取N次采样值后进行算术平均。该算法的程序代码如下:1charfilter()23{45intsum=0;67for(count=0;count