单片机常用算法的设计详解.pptVIP

  • 15
  • 0
  • 约1.88千字
  • 约 54页
  • 2020-09-02 发布于福建
  • 举报
第7章单片机常用算法设计 7.1单片机滤波算法的设让 7.2信号处理的FFT变换 7.3SPWM正弦逆变算法的设计 7.4P|D控制算法 7.551单片机PD算法程序 7.6模糊控制算法 7.1单片机滤波算法的设计 电路的滤波分为模拟滤波与数字滤波。 其中数字滤波器具有精度高、高可靠性和高 稳定性的特点,因此被广泛应用。用数字滤波 算法克服随机误差主要有如下优点: ◆数字滤波由软件程序实现,不需要硬件,因 此不存在阻抗匹配的问题; ◆对于多路信号输入通道,可以共用一个软件 “滤波器”,降低仪表的设计成本 ◆只要改变滤波器程序或元算参数,就能方便 的改变滤波特性。 下面我们介绍几种主要的数字滤波法 A.限幅滤波法 ●对于随机干扰,限幅滤波是一种有效的方法; 基本方法:比较相邻n和n-1时刻的两个采 样值y(n)和y(n-1),根据经验确定两次采样 允许的最大偏差。如果两次采样值的差值超过 最大偏差范围,认为发生可随机干扰,并认为后 次采样值y(n)为非法值,应予删除,删除y(n) 后,可用y(n-1)代替y(n);若未超过所允许的 最大偏差范围,则认为本次采样值有效。 下面是限幅滤波程序:(A值可根据实际情况调 整, value为有效值; new value为当前采样值 滤波程序返回有效的实际值) #define a 10 char value char filter( i char new value new_ value=get _ado if(( new value-value A)ll( value -new valueA)) return value return new value B中位值滤波法 ●中位值滤波法能有效克服偶然因素引起的 波动或采样不稳定引起的误码等脉冲干扰; ●对温度液位等缓慢变化的被测参数用此法 能收到良好的滤波效果,但是对于流量压力等 快速变化的参数一般不宜采用中位值滤波法; 基本方法:对某一被测参数连续采样n次 (一般n取奇数),然后再把采样值按大小排列 取中间值为本次采样值。 下面是中位值滤波程序: #definen 11 char tilte i char value buf[N, count, i,j, temp for( count=-0 countN; count++ i value buf[count]=get_ad(; delay (; I for(j=0N-1]j++) I for(i=0; kN-j; i++ i if( value buf[value buf[+1]) Temp= value buf[[]; value buf[ value_buf[i +1]; value buf[i+1]= temp; return value buf[(N-1)/2 C算术平均滤波法 ●算术平均滤波法适用于对一般的具有随机 干扰的信号进行滤波。这种信号的特点是信 号本身在某一数值范围附近上下波动,如测量 流量、液位; 基本方法:按输入的N个采样数据,寻找这 样一个Y,使得Y与各个采样值之间的偏差 的平方和最小。 编写算术平均滤波法程序时严格注意: 为了加快数据测量的速度,可采用先测 量数据存放在存储器中,测完N点后,再对N 个数据进行平均值计算; 二选取适当的数据格式,也就是说采用定 点数还是采用浮点数。其程序如下所示 #define N12 char filter int sum =0, count for( count=0; countN; count++) I sum+=get ado; delay(: 1 return(char)(sum/N D递推平均滤波法 ●基本方法:采用队列作为测量数据存储器 设队列的长度为N,每进行一次测量,把测量 结果放于队尾,而扔掉原来队首的一个数据, 这样在队列中始终就有N个“最新”的数 据。当计算平均值时,只要把队列中的N个 数据进行算数平均,就可得到新的算数平均值。 这样每进行一次测量,就可得到一个新的算术 平均值。 程序如下:#eneN12 char value buf[N],i=0 char filter i char count; int sum=0 value buf[i++]=get _ado f(i==N)i=0 for( count=0; countN; count++) sum= value buf[count] return(char)(sum/N)

文档评论(0)

1亿VIP精品文档

相关文档