基于小波分析的故障诊断算法.docx
《基于小波分析的故障诊断算法.docx》由会员分享,可在线阅读,更多相关《基于小波分析的故障诊断算法.docx(21页珍藏版)》请在冰点文库上搜索。
基于小波分析的故障诊断算法
基于小波分析的故障诊断算法
前言:
小波变换是一种新的变换分析方法,它继承和发展了短时傅立叶变换局部化的思想,同时又克服了窗口大小不随频率变化等缺点,能够提供一个随频率改变的“时间-频率”窗口,是进行信号时频分析和处理的理想工具。
它的主要特点是通过变换能够充分突出问题某些方面的特征,因此,小波变换在许多领域都得到了成功的应用,特别是小波变换的离散数字算法已被广泛用于许多问题的变换研究中。
从此,小波变换越来越引起人们的重视,其应用领域来越来越广泛。
在实际的信号处理过程中,尤其是对非平稳信号的处理中,信号在任一时刻附近的频域特征都很重要。
如在故障诊断中,故障点(机械故障、控制系统故障、电力系统故障等)一般都对应于测试信号的突变点。
对于这些时变信号进行分析,通常需要提取某一时间段(或瞬间)的频率信息或某一频率段所对应的时间信息。
因此,需要寻求一种具有一定的时间和频率分辨率的基函数来分析时变信号。
小波变换继承和发展了短时傅里叶变换的局部化思想,并且克服了其窗口大小和形状固定不变的缺点。
它不但可以同时从时域和频域观测信号的局部特征,而且时间分辨率和频率分辨率都是可以变化的,是一种比较理想的信号处理方法。
小波分析被广泛应用于信号处理、图像处理、语音识别、模式识别、数据压缩、故障诊断、量子物理等应用领域中。
小波分析在故障诊断中应用进展
1)基于小波信号分析的故障诊断方法
基于小波分析直接进行故障诊断是属于故障诊断方法中的信号处理法。
这一方法的优点是可以回避被诊断对象的数学模型,这对于那些难以建立解析数学模型的诊断对象是非常有用的。
具体可分为以下4种方法:
①利用小波变换检测信号突变的故障方法
连续小波变换能够通过多尺度分析提取信号的奇异点。
基本原理是当信号在奇异点附近的Lipschitz指数α>0时,其连续小波变换的模极大值随尺度的增大而增大;当α<0时,则随尺度的增大而减小。
噪声对应的Lipschitz指数远小于0,而信号边沿对应的Lipschitz指数大于或等于0。
因此,利用小波变换可以区分噪声和信号边沿,有效地检测出强噪声背景下的信号边沿(奇变)。
动态系统的故障通常会导致系统的观测信号发生奇异变化,可以直接利用小波变换检测观测信号的奇异点,从而实现对系统故障的检测。
比如根据输油管泄漏造成的压力信号突变的特点,用小波变换检测这些突变点,实现输油管道的泄漏点诊断。
②观测信号频率结构变化的故障诊断方法
小波多分辨率分析能够描述信号的频谱随时间变化情况或信号在某时刻附近的频率分布。
系统故障由于产生原因不同,通常具有不同的频率特征。
利用小波变换尺度与频率的对应关系,分析观测信号的频率结构特点,可以有效地检测系统的故障。
有人利用多分辨率分析获得系统状态信号奇异值特征矩阵,并根据相应的故障检测算法,实现对系统故障检测,该方法成功实现对某一武器平台上的精密弹簧阻尼器的故障检测。
有研究者提出了利用Mallet塔式算法实现对系统的多故障检测,将观测信号进行多尺度分解,获得故障在不同尺度下的特征,进而实现故障区分,利用该方法实现对某一电网上不同故障的区分。
③基于系统脉冲响应函数小波变换的故障方法
系统故障导致系统结构和传递函数发生变化,其脉冲响应函数也必然发生变化,这一变化可以由少数几个小波变换系数反映出来。
通常这些小波变换系统中只有少数几个元素具有较大的模,其余元素的模都非常小,以系统的状态为参照,根据系统待检状态下辨识得到的这几个元素或其平均值随时间的变化情况,就可以判断有无故障。
④利用小波变换去噪提取系统波形特征的诊断方法
小波变换可以看作一个带通滤波器,从而可以对信号进行滤波。
近年来,已经出现了很多基于小波变换的去噪方法。
Mallat提出了通过寻找小波变换系数中的局部极大值点,并据此重构信号,可以很好地逼近未被噪声污染前的信号。
Donoho也提出了一种新的基于阈值处理思想的小波去噪技术。
利用去噪后的信号可以直接对系统进行故障诊断,也可利用此信号进行残差分析。
通过去噪获得系统输出信号来进行故障诊断,方法上比较简单,但对故障的判断受限于观测人员自身的经验。
某期刊文献中提出了基于小波变换的含噪系统辨识方法,利用噪声和信号在小波变换下的不同特性达到消噪目的,直接对含噪声的数据进行小波变换来实现系统辨识。
2)小波变换与模式识别相结合的故障诊断方法
在故障诊断过程中,对于那些使系统输出发生明显变化的故障,利用小波变换能够有效检测出。
但是,当故障的程度很小时,使用小波变换所得的可视信息是有限的,这些信息用于故障检测是困难的。
某些研究员提出了利用模式识别中的统计相似性分析的方法进行故障特征提取与诊断,信号检测值与样板之间的相似性是通过二者之间的距离来实现的。
直接使用小波变换的小波系数的所有值作为特征矢量是不现实的,因此必须进行特征压缩。
这一方法特别适用于缓变故障或具有故障趋势的系统故障诊断。
3)基于小波分析和模糊逻辑理论的故障诊断方法
模糊逻辑理论是描述与处理广泛存在的不精确、模糊的事件和概念的有效理论工具。
近年来人们已将这一理论成果应用于故障诊断中。
但在故障诊断中,通常是将这一理论和其他方法相结合来实现的。
某研究人员将小波变换和模糊逻辑理论相结合,实现对影响电网稳定性的干扰源故障诊断。
还有研究者用小波变换分析模糊数据的局部时频特性来进行故障的检测与分离,利用了在线和离线的学习算法进行规则库的设计和更新。
4)基于小波网络的故障诊断方法
将小波分析理论与神经网络理论相结合的小波神经网络(WaveletNeuralNetwork,WNN)最早是由ZhangQinghua等提出的。
小波网络的基本思想是基于任何函数或信号可以由小波函数表示。
小波网络用于故障诊断,主要用于信号逼近和故障分类。
目前,用于故障诊断的小波神经网络,主要有两种方式:
①小波变换与常规神经网络的辅助式结合
它的基本思想是将信号经小波变换后,提取相应的故障特征,再将所得的故障特征输入给常规神经网络,利用神经网络的非线性映射能力,对故障进行识别和诊断。
某人提出了利用辅助式小波神经网络实现对动态系统的辨识方法。
还有研究者利用小波包的多维多分辨率特性,对电机振动信号进行分解重构,提取电机故障特征信号,将其作为特征向量输入ART2(自适应谐振)神经网络,可对电机工作状态进行在线监测和故障诊断。
某研究团队针对非线性系统中的多重并发故障,提出了在输入层对残差信号进行二进制离散小波变换,由故障信号多尺度下的细节分量进行故障特征的提取,并将其输入到神经网络进行故障分类与识别。
该方法成功实现了对某歼击机同时发生的平尾卡死故障和副翼损伤故障的诊断。
②小波分解与前馈神经网络的融合
它的基本思想是将常规单隐层神经网络的隐节点函数用小波函数代替。
利用小波网络的非线性映射能力对非线性动力系统实现故障诊断。
某研究员提出了一种可对任意非线性时变系统进行辨识的小波神经网络,它采用了自校正移动窗的递推最小二乘算法,可自动地调节移动窗的长度来跟踪非线性时变系统的动态特性,比常规神经网络具有更好的跟踪精度和辨识性能。
某人提出了在BP网络的基础上引入小波函数的方法对电力系统的接地短路故障进行诊断。
5)小波分析和数据融合相结合的故障诊断方法
数据融合(DataFusion)指的是将不同性质的多个传感器在不同层次上获得的关于同一事物的信息、或同一传感器在不同时刻获得的同一事物的信息综合成一个信息表征形式的处理过程。
数据融合技术现已广泛应用于工业过程监控、机器人制造、医疗诊断和模式识别等众多领域中。
现代高性能、多层次、复杂系统往往要求多个传感器在不同的层次上对其状态或过程进行监测、分析和综合,所以数据融合系统可以获得关于目标更精确的信息。
某篇期刊论文中提出了利用多传感器数据融合技术进行非线性系统的状态参数估计方法。
同时小波分析具有尺度可变的特点,能将信号的特征在不同的尺度下刻画出来。
将小波分析的多分辨特点与数据融合技术相结合进行故障诊断,是一个很有前途的诊断方法。
6)小波分析与混沌理论相结合的故障诊断方法
混沌(Chaos)的分形维数、关联维数等特征量可以描述非线性系统的特征。
在实际的故障诊断中,有一些变量是难于直接测量到的,而在有些极端情况下,甚至不知道系统独立变量有几个,也不知道哪些是系统变量。
根据动力学系统方法,系统变量之间存在关联作用,某个变量的时间序列蕴藏着参与动态的全部变量的痕迹。
因而,当监测参量有限时,可以通过混沌特征量进行系统故障监测与诊断。
某研究人员提出利用小波多分辨模型来辨识混沌系统,混沌系统对初始条件极端敏感,两个(或多个)相近的初始条件将导致完全不同的混沌轨迹,这就使得混沌系统建模变得相当困难。
作者根据小波多分辨率分析特点,利用小波对非线性强有力的逼近能力,采用张量积构造多维小波框架,利用降维分解建模方法解决高维空间中的“维数灾”问题。
这一方法给非线性系统的故障诊断提出了一个新的方法和思路。
7)其他方法
除了上面介绍的一些方法外,小波分析在故障诊断中的应用还有其他一些方法。
如小波分析与数据挖掘相结合的故障诊断方法、小波分析与时间序列统计与估计分析相结合的故障诊断方法,甚至还有上述多种方法的组合,如小波分析、神经网络和专家系统的组合,小波分析、神经网络和粗糙集的组合等。
利用专家系统、神经网络和小波分析技术组成的混合故障诊断系统,实现对某钢厂的冷轧自动化生产线系统进行实时状态监测和故障诊断。
某医疗科研机构提出了利用小波分析与粗糙集理论、神经网络相结合的信号处理方法,实现对癫痫病的诊断分析。
MATLAB仿真
本次仿真中将采用小波包变换分析两个信号的特征向量和各频率成分的功率谱。
产生两个信号;s1为正常信号,s2为故障信号
仿真运行程序,两个信号如下图:
获得小波正交基和节点数据如下:
两个信号的功率谱:
两个信号选取八个特征向量点进行分析:
得到正常信号和故障信号的特征向量如下:
每次运行得到的数据(包括上面的功率谱)应该不一样,因为存在随机产生。
如下图,某次运行得到的结果:
通过特征向量的对比,检测到信号的突变点,可是识别出故障,也可以通过模式匹配,识别出故障的类型。
结语:
总之,小波分析故障诊断方法研究已经取得了相当大的进展,但就这些理论和方法本身来说还不是很成熟,还需要进一步完善,无论是在理论研究还是工程应用方面,都还有许多工作要做。
①故障检测中的小波基选择
要有效地检测故障,必须选择合适的小波基波。
目前小波基波的选择虽有一些经验,但还没有一个理论标准,有待进一步地规范。
②小波分析和其他理论和方法的结合
小波分析虽然能有效地检测故障,但通常很难对故障进行识别。
因此,将小波分析和其他各种知识方法的结合,如神经网络、专家系统、粗糙集理论和数据融合等,发挥各自的优点,是小波分析在故障诊断中应用的一个重要研究方向,因此要加强小波分析与各种方法结合的理论和方法实现研究。
③加强实际应用研究
故障诊断理论已取得很大的发展,但大多数方法还只是着重于理论和方法上的研究,真正应用于工作实际的较少,小波分析故障诊断也不例外。
因此要加强实际应用研究,如开发实用的小波分析应用软件,并解决实际应用中的硬件实现问题。
附录:
matlab程序
%t=0.001:
0.001:
1;
t=1:
1000;
s1=sin(2*pi*50*t*0.001)+sin(2*pi*120*t*0.001)+rand(1,length(t));%rand随机产生函数
fort=1:
500;
s2(t)=sin(2*pi*50*t*0.001)+sin(2*pi*120*t*0.001)+rand(1,length(t));
end
fort=501:
1000;
s2(t)=sin(2*pi*200*t*0.001)+sin(2*pi*120*t*0.001)+rand(1,length(t));
end
subplot(9,2,1)%subplot(m,n,p)m-行数n-列数p-位置
plot(s1)
title('原始信号')
ylabel('S1')
subplot(9,2,2)
plot(s2)
title('故障信号')
ylabel('S2')
wpt=wpdec(s1,3,'db1','shannon');%小波包函数
plot(wpt);
s130=wprcoef(wpt,[3,0]);%将某个节点的小波包系数重构,得到的是和原信号一样长度的信号
s131=wprcoef(wpt,[3,1]);
s132=wprcoef(wpt,[3,2]);
s133=wprcoef(wpt,[3,3]);
s134=wprcoef(wpt,[3,4]);
s135=wprcoef(wpt,[3,5]);
s136=wprcoef(wpt,[3,6]);
s137=wprcoef(wpt,[3,7]);
s10=norm(s130);%求范数
s11=norm(s131);
s12=norm(s132);
s13=norm(s133);
s14=norm(s134);
s15=norm(s135);
s16=norm(s136);
s17=norm(s137);
st10=std(s130);%求标准差
st11=std(s131);
st12=std(s132);
st13=std(s133);
st14=std(s134);
st15=std(s135);
st16=std(s136);
st17=std(s137);
disp('正常信号的特征向量');
snorm1=[s10,s11,s12,s13,s14,s15,s16,s17]
std1=[st10,st11,st12,st13,st14,st15,st16,st17]
subplot(9,2,3);plot(s130);
ylabel('S130');
subplot(9,2,5);plot(s131);
ylabel('S131');
subplot(9,2,7);plot(s132);
ylabel('S132');
subplot(9,2,9);plot(s133);
ylabel('S133');
subplot(9,2,11);plot(s134);
ylabel('S134');
subplot(9,2,13);plot(s135);
ylabel('S135');
subplot(9,2,15);plot(s136);
ylabel('S136');
subplot(9,2,17);plot(s137);
ylabel('S137');
wpt=wpdec(s2,3,'db1','shannon');
%plot(wpt);
s230=wprcoef(wpt,[3,0]);
s231=wprcoef(wpt,[3,1]);
s232=wprcoef(wpt,[3,2]);
s233=wprcoef(wpt,[3,3]);
s234=wprcoef(wpt,[3,4]);
s235=wprcoef(wpt,[3,5]);
s236=wprcoef(wpt,[3,6]);
s237=wprcoef(wpt,[3,7]);
s20=norm(s230);
s21=norm(s231);
s22=norm(s232);
s23=norm(s233);
s24=norm(s234);
s25=norm(s235);
s26=norm(s236);
s27=norm(s237);
st20=std(s230);
st21=std(s231);
st22=std(s232);
st23=std(s233);
st24=std(s234);
st25=std(s235);
st26=std(s236);
st27=std(s237);
disp('故障信号的特征向量');
snorm2=[s20,s21,s22,s23,s24,s25,s26,s27]
std2=[st20,st21,st22,st23,st24,st25,st26,st27]
subplot(9,2,4);plot(s230);
ylabel('S230');
subplot(9,2,6);plot(s231);
ylabel('S231');
subplot(9,2,8);plot(s232);
ylabel('S232');
subplot(9,2,10);plot(s233);
ylabel('S233');
subplot(9,2,12);plot(s234);
ylabel('S234');
subplot(9,2,14);plot(s235);
ylabel('S235');
subplot(9,2,16);plot(s236);
ylabel('S236');
subplot(9,2,18);plot(s237);
ylabel('S237');
%fft
figure
y1=fft(s1,1024);%对信号s1前1024个点进行fft
py1=y1.*conj(y1)/1024;
y2=fft(s2,1024);
py2=y2.*conj(y2)/1024;
y130=fft(s130,1024);
py130=y130.*conj(y130)/1024;
y131=fft(s131,1024);
py131=y131.*conj(y131)/1024;
y132=fft(s132,1024);
py132=y132.*conj(y132)/1024;
y133=fft(s133,1024);
py133=y133.*conj(y133)/1024;
y134=fft(s134,1024);
py134=y134.*conj(y134)/1024;
y135=fft(s135,1024);
py135=y135.*conj(y135)/1024;
y136=fft(s136,1024);
py136=y136.*conj(y136)/1024;
y137=fft(s137,1024);
py137=y137.*conj(y137)/1024;
y230=fft(s230,1024);
py230=y230.*conj(y230)/1024;
y231=fft(s231,1024);
py231=y231.*conj(y231)/1024;
y232=fft(s232,1024);
py232=y232.*conj(y232)/1024;
y233=fft(s233,1024);
py233=y233.*conj(y233)/1024;
y234=fft(s234,1024);
py234=y234.*conj(y234)/1024;
y235=fft(s235,1024);
py235=y235.*conj(y235)/1024;
y236=fft(s236,1024);
py236=y236.*conj(y236)/1024;
y237=fft(s237,1024);
py237=y237.*conj(y237)/1024;
f=1000*(0:
511)/1024;
subplot(1,2,1);
plot(f,py1(1:
512));
ylabel('P1');
title('原始信号的功率谱')
subplot(1,2,2);
plot(f,py2(1:
512));
ylabel('P2');
title('故障信号的功率谱')
figure
subplot(4,2,1);
plot(f,py130(1:
512));
ylabel('P130');
title('S130的功率谱')
subplot(4,2,2);
plot(f,py131(1:
512));
ylabel('P131');
title('S131的功率谱')
subplot(4,2,3);
plot(f,py132(1:
512));
ylabel('P132');
subplot(4,2,4);
plot(f,py133(1:
512));
ylabel('P133');
subplot(4,2,5);
plot(f,py134(1:
512));
ylabel('P134');
subplot(4,2,6);
plot(f,py135(1:
512));
ylabel('P135');
subplot(4,2,7);
plot(f,py136(1:
512));
ylabel('P136');
subplot(4,2,8);
plot(f,py137(1:
512));
ylabel('P137');
figure
subplot(4,2,1);
plot(f,py230(1:
512));
ylabel('P230');
title('S230的功率谱')
subplot(4,2,2);
plot(f,py231(1:
512));
ylabel('P231');
title('S231的功率谱')
subplot(4,2,3);
plot(f,py232(1:
512));
ylabel('P232');
subplot(4,2,4);
plot(f,py233(1:
512));
ylabel('P233');
subplot(4,2,5);
plot(f,py234(1:
512));
ylabel('P234');
subplot(4,2,6);
plot(f,py235(1:
512));
ylabel('P235');
subplot(4,2,7);
plot(f,py236(1:
512));
ylabel('P236');
subplot(4,2,8);
plot(f,py237(1:
512));
ylabel('P237');
%figure
%plottree(wpt)