- 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)