您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > 小波分析入门和matlab使用
小波分析介绍以及matlab命令实现一,小波分析的缘起傅里叶分析是信号处理中最常用的方法,傅里叶在1807年指出任何一个周期的连续信号可以表示成一些合适的正弦波的叠加。这样一个时间域的信号就通过傅力叶变换转化成一系列的不同频率的余弦波的系数。但是傅里叶分析最大的缺点是在转化后,时间信息完全丢失,对于一般的稳定信号(stationarysignal)在时间上没有重大的性质变化,这不算什么,但对于不稳定信号(nonstationarysignal),一些重要的信息如趋势,转折,突变点,事件的起止都丢失在频率域中。傅力叶变换不能提取这些信息。于是人们想要一种timelocalized分析方法。Gabor1946年提出了一种傅力叶变换的改进方法,短时傅力叶变换。仅仅分析一小段时间的信号,就是在时间域取一个时间窗,同时要克服非周期性问题,使用了各种窗函数,使得窗内的信号从0平滑的过度到信号的真实值在过度到0,使得首尾都为0(为了满足窗内的周期性)。如常见的汉宁窗cosinetaper函数,以及复杂的multitaper函数。但是这样的结果在时间和频率上存在一个折中,并且对所有的频率使用相同的窗长,不一定可以满足精度的要求。1984年一些地球物理学家Morlet等人发现了一种新的信号处理方法,小波变换。小波变换允许在高频信息时使用更短的时间段,在低频使用长时段来获得更加精确的结果。小波变换包括连续小波变换,离散小波变换以及小波包变换。存在一系列的母小波,选定后,小波变换把原信号变成若干偏移,缩放的母波。二,连续小波变换(continuouswavelettransform)1,母小波与尺度,偏移子波:小波就是满足一定条件的一些函数,母波经过尺度变换,时间偏移后就是一系列的子波。图一:母波以及scale的母波图二:母波以及shift的子波2,连续小波变换:选定母波后,通过尺度变换,时间偏移会得到许多子波,这一系列的子波于原信号相关,得到的系数就是小波变换后的结果。过程如下:(1)母波与信号相关得到相似系数c(2)母波在时间上偏移,在与信号相关得到新的系数c(3)母波做尺度上的变化,拉伸后,与信号相关,偏移在相关到完成所有的scale和shift3,连续小波变换的matlab实现:连续小波变换的命令是coefs=cwt(x,scales,'wname'),x是信号,scales是使用的尺度矢量,wname是小波的类型,可以在命令行中使用wavemenu打开小波工具箱的waveletdisplay查找。%构建我们的信号,在500处有一个突变点。x=zeros(1000,1);x(500)=1;%进行小波变换CWTcoeffs=cwt(x,1:128,'haar','plot');colormapjet;colorbar;结果如下:也可以单独看某个尺度的图,CWTcoeffs(10,:)表示尺度为10的cwt值。三,离散小波变换:1,为什么要进行离散小波变换连续小波变换要经过大量的尺度偏移的转换在计算,将会产生较大的计算量,因此有人选择在部分尺度和时间偏移上来做,就是连散小波变换。事实证明,如果我们按照2的幂值去选择尺度和偏移,我们的小波分析就能更高效并且能相当的精确。2.一级滤波:近似和细节(Approximationsanddetails)(1)理论过程:对许多信号来说,低频信息是最重要的部分,给予了信号的基本特征。高频的部分则对信号细化,在小波分析中,我们说的近似就是信号中大尺度的低频的部分,而细节则是指信号中高频的小尺度的部分。通过一个高频和低频的滤波器,可以分离着两部分。信号S共1000个点,分别通过高通和低通滤波器后,进行一个减采样的过程,得到500个点的cD和cA,其中cA为低通滤波器出来后的结果,保留了信号的基本信息,为一个近(Approximation)。cD为高通滤波器出来后,保留了信号的高频信息,为一个细节(Detail)。(2)matlab实现:matlab中相关命令为dwt进行一级的离散小波分解,idwt一级的小波合成。%构建信号sloadleleccum;s=leleccum(1:3920);l_s=length(s);%进行一级的离散小波分解,使用db1为母波[cA1,cD1]=dwt(s,'db1');%从系数cA1和cD1中获得信号的近似和细节A1=idwt(cA1,[],'db1',l_s);D1=idwt([],cD1,'db1',l_s);结果展示:注意,dwt后的系数和1级的Approximation和detail的区别在于是否通过补0到原信号长度。3,多级滤波,多级分解(1)理论过程:上面的分解过程可以迭代的进行,每一级的近似又可以继续分解成新的近似和细节,产生了小波的分解树。(2)matlab的实现:%仍然使用上例子的信号s,进行3级的DWT分解[C,L]=wavedec(s,3,'db1');%C中存放的是系数,L中存放长度%提取出各级的A和D的系数cA3=appcoef(C,L,'db1',3);[cD1,cD2,cD3]=detcoef(C,L,[1,2,3]);%从各级系数中得到各级的近似和细节A3=wrcoef('a',C,L,'db1',3);D1=wrcoef('d',C,L,'db1',1);D2=wrcoef('d',C,L,'db1',2);D3=wrcoef('d',C,L,'db1',3);%从系数中重构信号并计算误差:A0=waverec(C,L,'db1');err=max(abs(s-A0))结果如图:四,小波包分析1.在离散小波分析中,信号分成近似和细节,然后近似向下层继续进行分解,但细节不再变化。小波包分析中,细节和近似都将继续向下一级分解。于是获得了小波包的分解树。有许多中分解方法,如S=A1+D1=A1+AD2+DD2=AA2+DA2+AAD3+DAD3+DD2=...如何选择一种最有效的办法来表示信号的问题就产生了,通常使用entropy-basedcriterion条件来选择。2,matlab实现:%获得信号loadnoisdopp%进行5级的波包分析,使用sym4母波T=wpdec(noisdopp,5,'sym4');plot(T)%结果如右图%从波包系数中提取出某个节点的数据wpc=wpcoef(T,16);%根据该节点的数据,获得该节点的信号近似rwpc=wprcoef(T,16);%结果如右图%决定最好的波包树Topt=besttree(T);plot(Topt)%利用第七个节点数据重构信号rsig=wprcoef(Topt,7);%rsigislength1024plot(noisdopp,'k');holdon;plot(rsig,'b','linewidth',2);axistight;五,参考文献大部分内容例子图片内容都来自matlabwavelettoolboxuserguide。使得读者不需要看数学公式就可以快速了解小波变换并使用。欢迎转载学习wenmingshaoxing@163.com
本文标题:小波分析入门和matlab使用
链接地址:https://www.777doc.com/doc-1820662 .html