当前位置:文档之家› 第章单片机常用算法设计

第章单片机常用算法设计


C.算术平均滤波法
算术平均滤波法适用于对一般的具有随机 干扰的信号进行滤波。这种信号的特点是信 号本身在某一数值范围附近上下波动 ,如测量 流量、 液位; 基本方法:按输入的N 个采样数据 ,寻找这 样一个 Y ,使得 Y 与各个采样值之间的偏差 的平方和最小。
编写算术平均滤波法程序时严格注意: 一.为了加快数据测量的速度 ,可采用先测 量数据 存放在存储器中 ,测完 N 点后 ,再对 N 个数据进行平均值计算; 二.选取适当的数据格式 ,也就是说采用定 点数还是采用浮点数。其程序如下所示:
下面是中位值滤波程序:
#define N 11 char filter() { char value_buf[N], count,i,j,temp; for ( count=0;count<N;count++) { value_buf[count] = get_ad(); delay(); } for (j=0;j<N-1;j++) { for (i=0;i<N-j;i++) { if ( value_buf[i]>value_buf[i+1] ) {temp = value_buf[i]; value_buf[i] = value_buf[i+1]; value_buf[i+1] = temp; } } } return value_buf[(N-1)/2]; }
程序如下: #define N 12
char value_buf[N],i=0; char filter() { char count; int sum=0; value_buf[i++] = get_ad(); if ( i == N nt++) sum = value_buf[count]; return (char)(sum/N); }
B.中位值滤波法
中位值滤波法能有效克服偶然因素引起的 波动或采样不稳定引起的误码等脉冲干扰; 对温度 液位等缓慢变化的被测参数用此法 能收到良好的滤波效果 ,但是对于流量压力等 快速变化的参数一般不宜采用中位值滤波法; 基本方法:对某一被测参数连续采样 n次 (一般 n 取奇数) ,然后再把采样值按大小排列 , 取中间值为本次采样值。
下面是限幅滤波程序:( A 值可根据实际情况调 整,value 为有效值 ,new_value 为当前采样值 滤波程序返回有效的实际值 )
#define A 10 char value; char filter() { char new_value; new_value = get_ad(); if ( ( new_value - value > A ) || ( value - new_value > A )) return value; return new_value; }
FFT变换算法的基本思想:利用WN的周期性 和对称性,把一个N项序列(设N=2k,k为正整 数),分为两个N/2项的子序列,每个N/2点 DFT变换需要(N/2)^2次运算,再用N次运 算把两个N/2点的DFT变换组合成一个N点的 DFT变换。这样变换以后,总的运算次数就 变成N+2(N/2)2=N+N^2/2。其程序片段如 下所示:
7.2 信号处理的FFT变换
快速傅里叶变换(Fast Fourier Transfonn,FFT) 是为了减少离散傅里叶变换(Discrete Fourier Transform,DFT)计算次数的一种快速有效的 算法。它是根据离散傅氏变换的奇、偶、虚、 实等特性,对离散傅立叶变换的算法进行改进 获得的。
第7章 单片机常用算法设计
7.1 7.2 7.3 7.4 7.5 7.6 单片机滤波算法的设计 信号处理的FFT变换 SPWM正弦逆变算法的设计 PID控制算法 51单片机PID算法程序 模糊控制算法
7.1 单片机滤波算法的设计
电路的滤波分为模拟滤波与数字滤波。 其中数字滤波器具有精度高、高可靠性和高 稳定性的特点 ,因此被广泛应用。用数字滤波 算法克服随机误差主要有如下优点: 数字滤波由软件程序实现 ,不需要硬件 ,因 此 不存在阻抗匹配的问题; 对于多路信号输入通道 ,可以共用一个软件 “滤波器”,降低仪表的设计成本; 只要改变滤波器程序或元算参数 ,就能方便 的改变滤波特性。
下面我们介绍几种主要的数字滤波法:
A.限幅滤波法
对于随机干扰 , 限幅滤波是一种有效的方法; 基本方法:比较相邻n 和 n - 1时刻的两个采 样值y(n)和 y(n – 1),根据经验确定两次采样 允许的最大偏差。如果两次采样值的差值超过 最大偏差范围 ,认为发生可随机干扰 ,并认为后 一次采样值y(n)为非法值 ,应予删除 ,删除y(n) 后 ,可用y(n – 1) 代替y(n);若未超过所允许的 最大偏差范围 ,则认为本次采样值有效。
#define N 12 char filter() {int sum = 0,count; for ( count=0;count<N;count++) { sum+=get_ad(); delay();} return (char)(sum/N); }
D.递推平均滤波法
基本方法:采用队列作为测量数据存储器 , 设队列的长度为 N ,每进行一次测量 ,把测量 结果放于队尾 ,而扔掉原来队首的一个数据 , 这样在队列中始终就有 N 个 “最新” 的数 据。当计算平均值时 ,只要把队列中的 N 个 数据进行算数平均 ,就可得到新的算数平均值。 这样每进行一次测量 ,就可得到一个新的算术 平均值。
E.一阶滞后滤波法
优点:对周期性干扰具有良好的抑制作用, 适用于波动频率较高的场合; 缺点:相位滞后,灵敏度低.滞后程度取决 于a值大小.不能消除滤波频率高于采样频率 的1/2的干扰信号。程序如下:
#define a 50 char value; char filter() { char new_value; new_value = get_ad(); return (100-a)*value + a*new_value; }
相关主题