资源描述
几种简单的数字滤波
假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();
1、限副滤波
/* 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;
}
2、中位值滤波法
/* N值可根据实际情况调整
排序采用冒泡法*/
#define N 11
char filter()
{
char value_buf[N];
char 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];
}
3、算术平均滤波法
/*
*/
#define N 12
char filter()
{
int sum = 0;
for ( count=0;count<N;count++)
{
sum + = get_ad();
delay();
}
return (char)(sum/N);
}
4、递推平均滤波法(又称滑动平均滤波法)
/*
*/
#define N 12
char value_buf[N];
char i=0;
char filter()
{
char count;
int sum=0;
value_buf[i++] = get_ad();
if ( i == N ) i = 0;
for ( count=0;count<N,count++)
sum = value_buf[count];
return (char)(sum/N);
}
5、中位值平均滤波法(又称防脉冲干扰平均滤波法)
/*
*/
#define N 12
char filter()
{
char count,i,j;
char value_buf[N];
int sum=0;
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;
}
}
}
for(count=1;count<N-1;count++)
sum += value[count];
return (char)(sum/(N-2));
}
6、限幅平均滤波法
/*
*/
略 参考子程序1、3
7、一阶滞后滤波法
/* 为加快程序处理速度假定基数为100,a=0~100 */
#define a 50
char value;
char filter()
{
char new_value;
new_value = get_ad();
return (100-a)*value + a*new_value;
}
8、加权递推平均滤波法
/* coe数组为加权系数表,存在程序存储区。*/
#define N 12
char code coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12};
char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12;
char filter()
{
char count;
char value_buf[N];
int sum=0;
for (count=0,count<N;count++)
{
value_buf[count] = get_ad();
delay();
}
for (count=0,count<N;count++)
sum += value_buf[count]*coe[count];
return (char)(sum/sum_coe);
}
9、消抖滤波法
#define N 12
char filter()
{
char count=0;
char new_value;
new_value = get_ad();
while (value !=new_value);
{
count++;
if (count>=N) return new_value;
delay();
new_value = get_ad();
}
return value;
}
********************************************************************
数字滤波算法
因为工程里面要做个流量调节,所以打算对流量进行滤波,综合一下,考虑这么做:
分两步:
1、对每次测量值的过滤
目的:过滤掉偶然的突变值
方法:根据经验判断,确定两次采样允许的最大偏差值(设为X)
每次检测到新值时判断:
如果本次值与上次值之差<=X,则本次值有效
如果本次值与上次值之差>X,则本次值无效,放弃本次值,用上次值代替本次值
如果连续被丢弃,则应当考虑为有效值
2、综合过滤
目的:抑制周期性干扰
方法:把连续取N个采样值看成一个队列
队列的长度固定为N
每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)
把队列中的N个数据进行算术平均运算,就可获得新的滤波结果
“如果连续被丢弃,则应当考虑为有效值”是自己考虑再三加上得,其他都是抄袭以下算法滴,哈哈:
----------------------------
从网上收集了各类滤波算法:
1、限幅滤波法(又称程序判断滤波法)
A、方法:
根据经验判断,确定两次采样允许的最大偏差值(设为A)
每次检测到新值时判断:
如果本次值与上次值之差<=A,则本次值有效
如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值
B、优点:
能有效克服因偶然因素引起的脉冲干扰
C、缺点
无法抑制那种周期性的干扰
平滑度差
2、中位值滤波法
A、方法:
连续采样N次(N取奇数)
把N次采样值按大小排列
取中间值为本次有效值
B、优点:
能有效克服因偶然因素引起的波动干扰
对温度、液位的变化缓慢的被测参数有良好的滤波效果
C、缺点:
对流量、速度等快速变化的参数不宜
3、算术平均滤波法
A、方法:
连续取N个采样值进行算术平均运算
N值较大时:信号平滑度较高,但灵敏度较低
N值较小时:信号平滑度较低,但灵敏度较高
N值的选取:一般流量,N=12;压力:N=4
B、优点:
适用于对一般具有随机干扰的信号进行滤波
这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动
C、缺点:
对于测量速度较慢或要求数据计算速度较快的实时控制不适用
比较浪费RAM
4、递推平均滤波法(又称滑动平均滤波法)
A、方法:
把连续取N个采样值看成一个队列
队列的长度固定为N
每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)
把队列中的N个数据进行算术平均运算,就可获得新的滤波结果
N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4
B、优点:
对周期性干扰有良好的抑制作用,平滑度高
适用于高频振荡的系统
C、缺点:
灵敏度低
对偶然出现的脉冲性干扰的抑制作用较差
不易消除由于脉冲干扰所引起的采样值偏差
不适用于脉冲干扰比较严重的场合
比较浪费RAM
5、中位值平均滤波法(又称防脉冲干扰平均滤波法)
A、方法:
相当于“中位值滤波法”+“算术平均滤波法”
连续采样N个数据,去掉一个最大值和一个最小值
然后计算N-2个数据的算术平均值
N值的选取:3~14
B、优点:
融合了两种滤波法的优点
对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差
C、缺点:
测量速度较慢,和算术平均滤波法一样
比较浪费RAM
6、限幅平均滤波法
A、方法:
相当于“限幅滤波法”+“递推平均滤波法”
每次采样到的新数据先进行限幅处理,
再送入队列进行递推平均滤波处理
B、优点:
融合了两种滤波法的优点
对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差
C、缺点:
比较浪费RAM
7、一阶滞后滤波法
A、方法:
取a=0~1
本次滤波结果=(1-a)*本次采样值+a*上次滤波结果
B、优点:
对周期性干扰具有良好的抑制作用
适用于波动频率较高的场合
C、缺点:
相位滞后,灵敏度低
滞后程度取决于a值大小
不能消除滤波频率高于采样频率的1/2的干扰信号
8、加权递推平均滤波法
A、方法:
是对递推平均滤波法的改进,即不同时刻的数据加以不同的权
通常是,越接近现时刻的数据,权取得越大。
给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低
B、优点:
适用于有较大纯滞后时间常数的对象
和采样周期较短的系统
C、缺点:
对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号
不能迅速反应系统当前所受干扰的严重程度,滤波效果差
9、消抖滤波法
A、方法:
设置一个滤波计数器
将每次采样值与当前有效值比较:
如果采样值=当前有效值,则计数器清零
如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出)
如果计数器溢出,则将本次值替换当前有效值,并清计数器
B、优点:
对于变化缓慢的被测参数有较好的滤波效果,
可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动
C、缺点:
对于快速变化的参数不宜
如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统
10、限幅消抖滤波法
A、方法:
相当于“限幅滤波法”+“消抖滤波法”
先限幅,后消抖
B、优点:
继承了“限幅”和“消抖”的优点
改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统
C、缺点:
*************************************************************************
微机控制系统的数字滤波算法
摘 要:分析了采用数字滤波消除随机干扰的优点,详细论述了微机控制系统中常用的8种数字滤波算法,并讨论了各种数字滤波算法的适用范围。
关键词:数字滤波;控制系统;随机干扰;数字滤波算法
1 引言
在微机控制系统的模拟输入信号中,一般均含有各种噪声和干扰,他们来自被测信号源本身、传感器、外界干扰等。为了进行准确测量和控制,必须消除被测信号中的噪声和干扰。噪声有2大类:一类为周期性的,其典型代表为50 Hz的工频干扰,对于这类信号,采用积分时间等于20 ms整倍数的双积分A/D转换器,可有效地消除其影响;另一类为非周期的不规则随机信号,对于随机干扰,可以用数字滤波方法予以削弱或滤除。所谓数字滤波,就是通过一定的计算或判断程序减少干扰信号在有用信号中的比重,因此他实际上是一个程序滤波。
数字滤波器克服了模拟滤波器的许多不足,他与模拟滤波器相比有以下优点:
(1)数字滤波器是用软件实现的,不需要增加硬设备,因而可靠性高、稳定性好,不存在阻抗匹配问题。
(2)模拟滤波器通常是各通道专用,而数字滤波器则可多通道共享,从而降低了成本。
(3)数字滤波器可以对频率很低(如0.01 Hz)的信号进行滤波,而模拟滤波器由于受电容容量的限制,频率不可能太低。
(4)数字滤波器可以根据信号的不同,采用不同的滤波方法或滤波参数,具有灵活、方便、功能强的特点。
2 常用数字滤波算法
数字滤波器是将一组输入数字序列进行一定的运算而转换成另一组输出数字序列的装置。设数字滤波器的输入为X(n),输出为Y(n),则输入序列和输出序列之间的关系可用差分方程式表示为:
其中:输入信号X(n)可以是模拟信号经采样和A/D变换后得到的数字序列,也可以是计算机的输出信号。具有上述关系的数字滤波器的当前输出与现在的和过去的输入、过去的输出有关。由这样的差分方程式组成的滤波器称为递归型数字滤波器。如果将上述差分方程式中bK取0,则可得:
说明输出只和现在的输入和过去的输入有关。这种类型的滤波器称为非递归型数字滤波器。
参数aK、bK的选择不同,可以实现低通、高通、带通、带阻等不同的数字滤波器。
2.1 算术平均值滤波
算术平均值滤波是要寻找一个Y,使该值与各采样值X(K)(K=1~N)之间误差的平方和为最小,即:
这时,可满足式(3)。式(4)便是算术平均值滤波的算法。
设第二次测量的测量值包含信号成分Si和噪声成分Ci,则进行N次测量的信号成分之和为:
噪声的强度是用均方根来衡量的,当噪声为随机信号时,进行N次测量的噪声强度之和为:
式(5)和式(6)中,S、C分别表示进行N次测量后信号和噪声的平均幅度。
这样对N次测量进行算术平均后的信噪比为:
其中,S/C是求算术平均值前的信噪比。因此采用算术平均值后,使信噪比提高了倍。
算术平均值法适用于对一般具有随机干扰的信号进行滤波,这种信号的特点是有一个平均值,信号在某一数值范围附近作上下波动,此时仅取一个采样值作依据显然是不准确的,如压力、流量、液平面等信号的测量。但对脉冲性干扰的平滑作用尚不理想,因此他不适用于脉冲性干扰比较严重的场合。由式(7)可知,算术平均值法对信号的平滑滤波程度完全取决于N。当N较大时,平滑度高,但灵敏度低,即外界信号的变化对测量计算结果Y的影响小;当N较小时,平滑度低,但灵敏度高。应视具体情况选取N,以便既少占用计算时间,又达到最好的效果,如对一般流量测量,可取N=8~16,对压力等测量,可取N=4。
2.2 加权平均值滤波
算术平均值法对每次采样值给出相同的加权系数,即1/N。但有些场合为了改进滤波效果,提高系统对当前所受干扰的灵敏度,需要增加新采样值在平均值中的比重,即将各采样值取不同的比例,然后再相加,此方法称为加权平均值法。一个N项加权平均式为:
常数C1,C2,…,CN的选取是多种多样的,其中常用的是加权系数法,即:
加权平均值法适用于系统纯滞后时间常数τ较大、采样周期较短的过程,他给不同的相对采样时间得到的采样值以不同的权系数,以便能迅速反应系统当前所受干扰的严重程度。但采用加权平均值法需要测试不同过程的纯滞后时间τ,同时要不断计算各权系数,增加了计算量,降低了控制速度,因而他的实际应用不如算术平均值法广泛。
2.3 滑动平均值滤波
以上平均滤波算法有一个共同点,即每计算1次有效采样值必须连续采样N次。对于采样速度较慢或要求数据计算速率较高的实时系统,这些方法是无法使用的。例如A/D数据,数据采样速率为每秒10次,而要求每秒输入4次数据时,则N不能大于2。滑动平均值法只采样1次,将本次采样值和以前的N-1次采样值一起求平均,得到当前的有效采样值。
滑动平均值法把N个采样数据看成一个队列,对列的长度固定为N,每进行一次新的采样,把采样结果放入队尾,而扔掉原来队首的一个数据,这样在队列中始终有N个“最新”的数据。计算滤波值时,只要把队列中的N个数据进行平均,就可得到新的滤波值。
滑动平均值法对周期性干扰有良好的抑制作用,平滑度高,灵敏度低;但对偶然出现的脉冲性干扰的抑制作用差,不易消除由于脉冲干扰引起的采样值的偏差。因此他不适用于脉冲干扰比较严重的场合,而适用于高频振荡系统。通过观察不同N值下滑动平均的输出响应来选取N值,以便既少占用时间,又能达到最好的滤波效果。其工程经验值为:流量N取12,压力N取4,液面N取4~12,温度N取1~4。
2.4 中值滤波
中值滤波是对某一被测参数连续采样N次(一般N取奇数),然后把N次采样值从小到大,或从大到小排队,再取其中间值作为本次采样值。
中值滤波对于去掉偶然因素引起的波动或采样器不稳定而造成的误差所引起的脉冲干扰比较有效,对温度、液位等变化缓慢的被测参数采用此法能收到良好的滤波效果,但对流量、速度等快速变化的参数一般不易采用。
2.5 防脉冲干扰平均值滤波
在脉冲干扰比较严重的场合,若采用一般的平均值法,则干扰将“平均”到计算结果中去,故平均值法不易消除由于脉冲干扰而引起的采样值偏差。防脉冲干扰平均值法先对N个数据进行比较,去掉其中的最大值和最小值,然后计算余下的N-2个数据的算术平均值。即:
在实际应用中,N可取任何值,但为了加快测量计算速度,N一般不能太大,常取为4,即为四取二再取平均值法。他具有计算方便、速度快、存储量小等特点,故得到了广泛应用。
2.6 程序判断滤波
工程实践表明,许多物理量的变化都需要一定的时间,相邻两次采样值之间的变化有一定的限度。程序判断滤波就是根据实践经验确定出相邻两次采样信号之间可能出现的最大偏差ΔY,若超出此偏差值,则表明该输入信号是干扰信号,应该去掉;若小于此偏差值,可将信号作为本次采样值。
当采样信号由于随机干扰,如大功率用电设备的启动或停止,造成电流的尖峰干扰或误检测,以及变送器不稳定而引起的严重失真等,可采用程序判断法进行滤波。
程序判断滤波根据滤波方法的不同,可分为限幅滤波和限速滤波2种。
2.6.1 限幅滤波
限幅滤波把两次相邻的采样值相减,求出其增量(以绝对值表示),然后与两次采样允许的最大差值(由被控对象的实际情况决定)ΔY进行比较,若小于或等于ΔY,则取本次采样值;若大于ΔY,则仍取上次采样值作为本次采样值。即:
限幅滤波主要用于变化比较缓慢的参数,如温度、物理位置等测量系统。具体应用时,关键的问题是最大允差ΔY的选取,ΔY太大,各种干扰信号将“乘虚而入”,使系统误差增大;ΔY太小,又会使某些有用信号被“拒之门外”,使计算机采样效率变低。因此,门限值ΔY的选取是非常重要的。通常可根据经验数据获得,必要时也可由实验得出。
2.6.2 限速滤波
限速滤波最多可用3次采样值来决定采样结果,设顺序采样时刻t1,t2,t3的采样值分别为Y(1),Y(2),Y(3),则
限速滤波较为折中,既照顾了采样的实时性,又顾及了采样值变化的连续性。但这种方法也有明显的缺点:
(1)△Y的确定不够灵活,必须根据现场的情况不断更换新值;
(2)不能反映采样点数N>3时各采样值受干扰的情况,因而其应用受到一定的限制。具体应用时,可用(|Y(1)-Y(2)|+|Y(2)-Y(3)|)/2作为ΔY,这样也可基本保持限速滤波的特性,虽增加计算量,但灵活性提高了。
2.7 低通滤波
将普通硬件RC低通滤波器的微分方程用差分方程来表示,便可以用软件算法来模拟硬件滤波的功能。经推导,低通滤波算法如下:
其中,X(K)为本次采样值;Y(K-1)为上次的滤波输出值;α为滤波系数,其值通常远小于1;Y(K)为本次滤波的输出值。
由式(13)可以看出,本次滤波的输出值主要取决于上次滤波的输出值(注意不是上次的采样值,这和加权平均滤波是有本质区别的),本次采样值对滤波输出的影响是比较小的,但多少有些修正作用。
这种算法模拟了具有较大惯性的低通滤波功能,当目标参数为变化很慢的物理量时,效果很好,但他不能滤除高于1/2采样频率的干扰信号。除低通滤波外,同样可用软件来模拟高通滤波和带通滤波。
2.8 复合数字滤波
为了进一步提高滤波效果,有时可以把2种或2种以上不同滤波功能的数字滤波器组合起来,组成复合数字滤波器,或称多级数字滤波器。
例如防脉冲干扰平均值滤波就是一种应用实例,由于这种滤波方法兼顾了中值滤波和算术平均值滤波的优点,所以无论对缓慢变化的信号,还是对快速变化的信号,都能获得较好的滤波效果。
此外,也可采用双重滤波的方法,即把采样值经过低通滤波后,再经过一次高通滤波。这样,结果更接近理想值,这实际上相当于多级RC滤波器。
3 结语
本文讨论了8种数字滤波算法,每种滤波算法都有其各自的特点,在实际应用中,究竟选取哪一种数字滤波算法,应根据具体的测量参数合理的选用。不适当地应用数字滤波,不仅达不到滤波效果,反而会降低控制品质,甚至失控,这点必须予以注意。
双击无法打开硬盘
1. 解决方法:右键打开其中一受感染的盘符,在工具栏---文件夹选项--查看下,
选显示所有文件和文件夹,同时去除隐藏受保护的系统文件前的勾,你会发现在
你的盘符下多了一antorun.inf 的文件,打开我们可以看到如下的内容:
[AUTORUN]
open=Iexplorers.exe
这句话的意思就是当你双击盘符时自动打开写入注册表中的病毒程序文件,
即使病毒被杀死,但是注册表的信息依然存在,这就是无法打开盘符的原因,
知道了原因,那么我们就来删除病毒在注册表中的残留信息,开始---运行中
输入regedit打开注册表编辑程序,ctrl+f打开查找命令,输入Iexplorers.exe,
点查找,接下来会在注册表中找到此键值.一般在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer
\MountPoints\下.
2. 对于分区不能双击打开者
开始》》运行 输入regedit 找到[HKEY_CLASSES_ROOT\Drive\shell]将shell下的全部删除 然后关闭注册表 按键盘F5刷新 双击分区再看
对于文件夹不能双击打开者
开始》》运行 输入regedit 找到[HKEY_CLASSES_ROOT\Directory\shell]将shell下的全部 删除 然后关闭注册表 按键盘F5刷新 双击分区再看
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer
\MountPoints\F\Shell\command\下发现此键值,把shell子键删除即可.f3查找
下一个,重复操作,直到所有的都清除.f5刷新,除盘符下的antorun.inf文件.
问题即可解决!
双击d盘(或者其他盘)打不开,只能右键打开,右键多了一个“自动播放”,怎么解决?
答:我的电脑-工具-文件夹选项-查看-显示所有文件和文件夹,然后进入d盘,把autorun.inf删除,重启即可。
如果找不到autorun.inf,那么
1、开始-->运行-->cmd(打开命令提示符)
2、dir autorun.inf /a (没有参数a是看不到的,a是显示所有的意思),此时你会发现一个autorun.inf文件
3、attrib autorun.inf -s -h -r 去掉autorun.inf文件的系统、只读、隐藏属性,否则无法删除。
4、del autorun.inf
重启即可。
展开阅读全文