一维连续小波变换的matlab基础程序实现
- 格式:pdf
- 大小:912.62 KB
- 文档页数:9
MATLAB小波变换指令及其功能介绍1 一维小波变换的 Matlab 实现(1) dwt函数功能:一维离散小波变换格式:[cA,cD]=dwt(X,'wname')[cA,cD]=dwt(X,Lo_D,Hi_D)别可以实现一维、二维和 N 维DFT说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数 'wname'对信号X 进行分解,cA、cD 分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。
(2) idwt 函数功能:一维离散小波反变换格式:X=idwt(cA,cD,'wname')X=idwt(cA,cD,Lo_R,Hi_R)X=idwt(cA,cD,'wname',L)函数 fft、fft2 和 fftn 分X=idwt(cA,cD,Lo_R,Hi_R,L)说明:X=idwt(cA,cD,'wname') 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。
'wname' 为所选的小波函数X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和Hi_R 经小波反变换重构原始信号 X 。
X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。
2 二维小波变换的 Matlab 实现二维小波变换的函数别可以实现一维、二维和 N 维 DFT函数名函数功能---------------------------------------------------dwt2 二维离散小波变换wavedec2 二维信号的多层小波分解idwt2 二维离散小波反变换waverec2 二维信号的多层小波重构wrcoef2 由多层小波分解重构某一层的分解信号upcoef2 由多层小波分解重构近似分量或细节分量detcoef2 提取二维信号小波分解的细节分量appcoef2 提取二维信号小波分解的近似分量upwlev2 二维小波分解的单层重构dwtpet2 二维周期小波变换idwtper2 二维周期小波反变换----------------------------------------------------------- (1) wcodemat 函数功能:对数据矩阵进行伪彩色编码函数 fft、fft2 和 fftn 分格式:Y=wcodemat(X,NB,OPT,ABSOL)Y=wcodemat(X,NB,OPT)Y=wcodemat(X,NB)Y=wcodemat(X)说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X 的编码矩阵Y ;NB 伪编码的最大值,即编码范围为 0~NB,缺省值 NB=16;OPT 指定了编码的方式(缺省值为 'mat'),即:别可以实现一维、二维和 N 维 DFTOPT='row' ,按行编码OPT='col' ,按列编码OPT='mat' ,按整个矩阵编码函数 fft、fft2 和 fftn 分ABSOL 是函数的控制参数(缺省值为 '1'),即:ABSOL=0 时,返回编码矩阵ABSOL=1 时,返回数据矩阵的绝对值 ABS(X)1. 离散傅立叶变换的 Matlab实现(2) dwt2 函数功能:二维离散小波变换格式:[cA,cH,cV,cD]=dwt2(X,'wname')[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数'wname' 对二维信号 X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。
MATLAB小波变换指令及其功能介绍1 一维小波变换的 Matlab 实现(1) dwt函数功能:一维离散小波变换格式:[cA,cD]=dwt(X,'wname')[cA,cD]=dwt(X,Lo_D,Hi_D)别可以实现一维、二维和 N 维DFT说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数 'wname'对信号X 进行分解,cA、cD 分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。
(2) idwt 函数功能:一维离散小波反变换格式:X=idwt(cA,cD,'wname')X=idwt(cA,cD,Lo_R,Hi_R)X=idwt(cA,cD,'wname',L)函数 fft、fft2 和 fftn 分X=idwt(cA,cD,Lo_R,Hi_R,L)说明:X=idwt(cA,cD,'wname') 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。
'wname' 为所选的小波函数X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和Hi_R 经小波反变换重构原始信号 X 。
X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。
2 二维小波变换的 Matlab 实现二维小波变换的函数别可以实现一维、二维和 N 维 DFT函数名函数功能---------------------------------------------------dwt2 二维离散小波变换wavedec2 二维信号的多层小波分解idwt2 二维离散小波反变换waverec2 二维信号的多层小波重构wrcoef2 由多层小波分解重构某一层的分解信号upcoef2 由多层小波分解重构近似分量或细节分量detcoef2 提取二维信号小波分解的细节分量appcoef2 提取二维信号小波分解的近似分量upwlev2 二维小波分解的单层重构dwtpet2 二维周期小波变换idwtper2 二维周期小波反变换----------------------------------------------------------- (1) wcodemat 函数功能:对数据矩阵进行伪彩色编码函数 fft、fft2 和 fftn 分格式:Y=wcodemat(X,NB,OPT,ABSOL)Y=wcodemat(X,NB,OPT)Y=wcodemat(X,NB)Y=wcodemat(X)说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X 的编码矩阵Y ;NB 伪编码的最大值,即编码范围为 0~NB,缺省值 NB=16;OPT 指定了编码的方式(缺省值为 'mat'),即:别可以实现一维、二维和 N 维 DFTOPT='row' ,按行编码OPT='col' ,按列编码OPT='mat' ,按整个矩阵编码函数 fft、fft2 和 fftn 分ABSOL 是函数的控制参数(缺省值为 '1'),即:ABSOL=0 时,返回编码矩阵ABSOL=1 时,返回数据矩阵的绝对值 ABS(X)1. 离散傅立叶变换的 Matlab实现(2) dwt2 函数功能:二维离散小波变换格式:[cA,cH,cV,cD]=dwt2(X,'wname')[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数'wname' 对二维信号 X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。
1、选择'(t)或,使心(t-k)J∙k z为一组正交归一基2、求h n。
h n *W(t)]或H( Jh?(2 •)/ ?( •)3、由h n求g n。
gn - ( -I) h1 Jn或G( J=e^1H (仁)4、由g n, ;:(t)构成正交小波基函数(t)⑴八g n ln(t)或?^ J=GC ■ /2)?C ■ /2)Haar小波的构造1)、选择尺度函数。
⑴=1 O *1 C)O 其他易知「(t - n)关于n为一正交归一基2)、求h nh n In(t);=2. - (t)(2t-n)dt其中n n 1壬F= 1 20 其他当n=0时,——Icp(2t)=[0 当n=1时,1 C -t2其他e J σj +26"S J U 6 N H e ^。
≡G怪A寸 超M O一L HU L ^二—7τdL I τu 6 0"u ⅛二甘 LHU≡ 超M 010!—’」丄U —&¥(?⅛H 0IHUP H (U l10)¾(I)Cb 匸∙f⅛LHU O H U ≡疼超M 0________CXI H — &) Cb其图形如下:1、Haar尺度函数Haar尺度函数空间:C , (2 jχ 2), (2 j X -1), (2j x), (2 jχ -1), :(2j x-1), ? J 为非负的整数,该空间又称为J级阶梯函数空间V i。
则V O 二V1二V2二=V jJ=V j= V j 1 随j的增加,分辨更为精细。
2、性质函数集、2j/2「(2j X - k): k Z ?是V j的一个标准正交基。
f(x) V0当且仅当f(2j x) V j。
3、Haar小波函数函数满足两点:(1)••是V1的成员;(2)••与V0正交。
(X)V(2x) _ (2x -1)-bo性质:j(,(x)dx=0(x)是对称的、局部支撑的函数;小波函数空间Wj : V a k (2j x-k),a k RkZW j是V j的正交互补,即V jT=V j二W j函数集、2j/2 "2j x-k):k・Zi是W i的一个标准正交基4、Haar小波分解与重建对Haar 小波,有(2j x^( (2j^xp :(2j4x))/2 (2jχ-1) = ( Q j"1 x) - ’(2j*x)) / 2Haar 小波分解定理: 设:f j (χ)=∖a k (2j x-k),f j (x) := V j k 目则它可以有如下分解:f j = f j 1 ' ' 'j Jfj 」八 a k(2 X -k), f jI (X^ V j JkNCe j 丄=Σ b k^(2j」x — k )Q j 」(X)EW j 二 k 目_ a 2k ' a 2k 1_ 2a 2k - a2k 12把函数f 分解成一个小波空间与一个尺度空间的分量f(x)=^2 (4x) 2 (4x _1) (4x _2) _ (4x _3)解:按照分解定理,此j=2, ; k=0,1,2,3对应的系数是2,2,1, -1 ;代入公式,得出分解后尺度2-2 C 0,2f(x) =2 (2x)'(2x -1)a k 」2+2 1 _1函数空间元素的系数是〒二2 w 0 ;分解后小波函数空间元素的系数是Matlab 程序image1=imread('512.jpg');image1=rgb2gray(image1); subplot(2,2,1);imshow(image1); title('original image');image1=double(image1); imagew=imread('shuiyin.bmp'); imagew= rgb2gray (imagew); subplot(2,2,2);imshow(imagew); title('original watermark');[ca,ch,cv,cd]=dwt2(image1,'db1');[ca1,ch1,cv1,cd1]=dwt2(ca, 'db1');[cas,chs,cvs,cds]=dwt2(ca1,'db1');M=512;N=64;for i=1:Nfor j=1:N Ca(i,j)=cas(i,j)+0.01*imagew(i,j); end;end;IM=idwt2(Ca,chs,cvs,cds,'db1'); IM1=idwt2(IM,ch1,cv1,cd1, 'db1'); markedimage=double(idwt2(IM1,ch,cv,cd,'db1')); subplot(2,2,3);colormap(gray(256)); image(markedimage); title('marked image');imwrite(markedimage,gray(256),'watermarked.bmp','bmp'); image1=imread('512.jpg');image1=rgb2gray(image1); image1=double(image1); imaged=imread('watermarked.bmp');[ca,ch,cv,cd]=dwt2(image1,'db1');[ca1,ch1,cv1,cd1]=dwt2(ca,'db1');[cas,chs,cvs,cds]=dwt2(ca1,'db1');[caa,chh,cvv,cdd]=dwt2(imaged,'db1');[caa1,chh1,cvv1,cdd1]=dwt2(caa,'db1');[caas,chhs,cvvs,cdds]=dwt2(caa1,'db1');for p=1:Nfor q=1:NW(p,q)=100*(caas(p,q)-cas(p,q));end; subplot(2,2,4); colormap(gray(256)); image(W);title(' 从含水印图像中提取的水印');imwrite(W,gray(256),'watermark.bmp','bmp');。
MATLAB小波变换指令及其功能介绍(超级有用)MATLAB小波变换指令及其功能介绍1 一维小波变换的 Matlab 实现(1) dwt函数功能:一维离散小波变换格式:[cA,cD]=dwt(X,'wname')[cA,cD]=dwt(X,Lo_D,Hi_D)别可以实现一维、二维和 N 维DFT 说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数'wname'对信号X 进行分解,cA、cD 分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。
(2) idwt 函数功能:一维离散小波反变换格式:X=idwt(cA,cD,'wname')X=idwt(cA,cD,Lo_R,Hi_R)X=idwt(cA,cD,'wname',L)函数 fft、fft2 和 fftn 分X=idwt(cA,cD,Lo_R,Hi_R,L)说明:X=idwt(cA,cD,'wname') 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。
'wname' 为所选的小波函数X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和Hi_R 经小波反变换重构原始信号 X 。
X=idwt(cA,cD,'wname',L) 和X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。
2 二维小波变换的 Matlab 实现二维小波变换的函数别可以实现一维、二维和 N 维 DFT函数名函数功能---------------------------------------------------dwt2 二维离散小波变换wavedec2 二维信号的多层小波分解idwt2 二维离散小波反变换waverec2 二维信号的多层小波重构wrcoef2 由多层小波分解重构某一层的分解信号upcoef2 由多层小波分解重构近似分量或细节分量detcoef2 提取二维信号小波分解的细节分量appcoef2 提取二维信号小波分解的近似分量upwlev2 二维小波分解的单层重构dwtpet2 二维周期小波变换idwtper2 二维周期小波反变换----------------------------------------------------------- (1) wcodemat 函数功能:对数据矩阵进行伪彩色编码函数 fft、fft2 和 fftn 分格式:Y=wcodemat(X,NB,OPT,ABSOL)Y=wcodemat(X,NB,OPT)Y=wcodemat(X,NB)Y=wcodemat(X)说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X 的编码矩阵Y ;NB 伪编码的最大值,即编码范围为 0~NB,缺省值 NB=16;OPT 指定了编码的方式(缺省值为 'mat'),即:别可以实现一维、二维和 N 维 DFTOPT='row' ,按行编码OPT='col' ,按列编码OPT='mat' ,按整个矩阵编码函数 fft、fft2 和 fftn 分ABSOL 是函数的控制参数(缺省值为 '1'),即:ABSOL=0 时,返回编码矩阵ABSOL=1 时,返回数据矩阵的绝对值 ABS(X)1. 离散傅立叶变换的 Matlab实现(2) dwt2 函数功能:二维离散小波变换格式:[cA,cH,cV,cD]=dwt2(X,'wname')[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数'wname' 对二维信号 X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。
MATLAB 小波变换指令及其功能介绍1一维小波变换的 Matlab 实现(1)dwt 函数功能:一维离散小波变换格式:[cA,cD]=dwt(X,'wname')[cA,cD]=dwt(X,Lo_D,Hi_D)别可以实现一维、二维和 N 维DFT说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数 'wname'对信号 X 进行分解,cA、cD 分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。
(2)idwt 函数功能:一维离散小波反变换格式:X=idwt(cA,cD,'wname')X=idwt(cA,cD,Lo_R,Hi_R)X=idwt(cA,cD,'wname',L)函数 fft、fft2 和 fftn 分X=idwt(cA,cD,Lo_R,Hi_R,L)说明:X=idwt(cA,cD,'wname') 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。
'wname' 为所选的小波函数X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和Hi_R 经小波反变换重构原始信号 X 。
X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。
2二维小波变换的 Matlab 实现二维小波变换的函数别可以实现一维、二维和 N 维 DFT函数名函数功能dwt2 二维离散小波变换wavedec2 二维信号的多层小波分解idwt2 二维离散小波反变换waverec2 二维信号的多层小波重构wrcoef2 由多层小波分解重构某一层的分解信号upcoef2 由多层小波分解重构近似分量或细节分量detcoef2 提取二维信号小波分解的细节分量appcoef2 提取二维信号小波分解的近似分量upwlev2 二维小波分解的单层重构dwtpet2 二维周期小波变换idwtper2 二维周期小波反变换(1)wcodemat 函数功能:对数据矩阵进行伪彩色编码函数 fft、fft2 和 fftn 分格式:Y=wcodemat(X,NB,OPT,ABSOL)Y=wcodemat(X,NB,OPT)Y=wcodemat(X,NB)Y=wcodemat(X)说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X 的编码矩阵Y ;NB 伪编码的最大值,即编码范围为 0~NB,缺省值 NB=16;OPT 指定了编码的方式(缺省值为 'mat'),即:别可以实现一维、二维和 N 维 DFTOPT='row' ,按行编码OPT='col' ,按列编码OPT='mat' ,按整个矩阵编码函数 fft、fft2 和 fftn 分ABSOL 是函数的控制参数(缺省值为 '1'),即: ABSOL=0 时,返回编码矩阵ABSOL=1 时,返回数据矩阵的绝对值 ABS(X)1. 离散傅立叶变换的 Matlab 实现(2)dwt2 函数功能:二维离散小波变换格式:[cA,cH,cV,cD]=dwt2(X,'wname')[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数'wname' 对二维信号 X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。
小波变换实验二连续小波变换1、实验目的本实验的目的在于充分理解连续小波变换的算法和作用,利用matlab程序实现对一维信号进行连续小波变换,进而在程序的编辑过程理解一位连续小波变换的小波系数矩阵的含义。
同时通过对预算的到的小波系数矩阵进行分析解释,得到原始信号的频谱分布以及了解小波系数在尺度和位移两个分量上的意义。
2、实验原理、实验编程思路1、根据书本的理论知识,知道一维连续小波变换的公式为:实际在编程过程当中,对于上式中积分的求解可以采用将积分函数离散化,通过求和来实现求积分,离散的过程如下式:本实验中,根据题目可以知道采样的时间间隔为0.03s,即上式中Δt,在实际编程当中为了计算方便可以省略掉这个时间常数,所以在编程过程当中使用的公式实际为:2、小波函数的选取:使用墨西哥草帽(mexhat)小波来进行小波变换,墨西哥草帽的函数为(支撑区间为-5—5):对于连续小波函数的采样间隔,根据不同的尺度参量来进行采样,比如尺度为i,实际对应小波的采样间隔取k/i,以保持和原信号在不同尺度上的同步。
3、程序运算简化:在程序设计过程当中,如果对于小波系数的每一个系数都按照公式来计算,算法的时间复杂度应当为o(n3)。
但通过对公式的分析,不难看出,对于同意尺度a,相邻的两个小波系数之间的求和项,只有第一项或者最后一项或者二者都不同,所以在下一个系数求解的时候可以减少一次循环,从而将时间复杂度降到o(n2),运算效率大大提高。
4、在程序设计的过程当中,还分别对原信号进行傅里叶分析和直接的cwt变换,将得到的结果与设计的连续小波变换程序进行比对分析。
3、实验程序和结果墨西哥草帽小波参数获取函数:mexh.m连续小波变换主函数:mexh-cwt.m傅里叶分析和cwt分析:fft cwt result.m1、利用mexh-cwt.m对源数据进行分析得到的结果:原信号波形图小波系数矩阵及原信号的三个主成分小波系数矩阵的三维视图功率谱图和功率等值线图从上述的小波变换结果,特别是小波系数矩阵的信息中可以看出,原始信号主要有三个平率不同且时域分布也不同的主成份组成,从图中可以定性地看出,频率最高的成分1始终出现在整个信号段,而频率次之的成分2只在信号刚开始的阶段出现,频率最低的成分3基本上在成分2消失之后开始出现。
L-. A丹土函数.EWATLAf H- fileI J'L刍waT&iac^数‘ e 彳从:IHIATUS W-filaappcoef 函数%采用补零的扩展模式(参见dwtmode函数)%装载一维尺度信号load leleccum; s = leleccum(1:3920);ls=le ngth(s);subplot(2,1,1);plot(s);title(' 原始信号');%使用db1小波在第3层进行分解[c,l] = wavedec(s,3,'db1');%由小波分解框架[c,l],提取第3层系数近似值ca3 =即pcoef(c,l,'db1',3);subplot(2,1,2);plot(ca3);cwt函数t = lin space(-1,1,512);一维小波变换算法程序作者:项目组转贴自:本站原创点击数一维小波变换算法程序目录7423山3切M3鏈数.貳«LpiATLAf 丁只-勿征■ ■Sliai&^HIII MJI IIU Jill ■&_■ IIIL Alli 14. 1twt函数.mfflATUE1 KE1 KBdw 士函妁.mMATLO LVfile1 KBjdwil承數一fflWAT LAB tt-£ile1 KBi mwti函數.mMATLAB M-fLli1 KE:NAT LAB W*-£ilt1 KBm一维连续小波变换.mMATLAB M-fili1 KBwnaxlev^数,m1 KBupc oeE®数mNAT LAB1 KB I_=Ju.pwLe讷诵数.m MATLtBM-file1 KBA&vtrac函数.ms = 1-abs(t);c = cwt(s,1:32,'cgau4');c = cwt(s,[64 32 16:-2:2],'morl');c = cwt(s,[3 18 12.9 7 1.5],'db2');c = cwt(s,1:64,'sym4','abslvl',[100 400]);############################detcoef 函数% 采用补零的扩展模式(参见dwtmode 函数)% 装载一维尺度信号load leleccum;s = leleccum(1:3920);% 使用db1 在第3 层进行分解[c,l] = wavedec(s,3,'db1'); subplot(4,1,1);plot(s); title(' 原始信号');% 从小波分解结构[c,l] 中提取1、2 及3 层的细节系数[cd1,cd2,cd3] = detcoef(c,l,[1 2 3]);% 绘图命令subplot(4,1,2);plot(cd3);Ylabel('cd3');subplot(4,1,3);plot(cd2);Ylabel('cd2');subplot(4,1,4);plot(cd1);Ylabel('cd1');dwt 函数% 当前扩展模式是补零模式( 详见dwtmode 函数)% 构造原始一维尺度信号randn('seed',531316785)s = 2 + kron (o nes(1,8),[1 -1]) + ((1:16)八2)/32 + 0.2*ra ndn (1,16);% 进行单尺度离散haar 小波变换[ca1,cd1] = dwt(s,'haar');subplot(311); plot(s); title(' 原始信号');subplot(323); plot(ca1); title('haar 低频系数');subplot(324); plot(cd1); title('haar 高频系数');% 对于给定的小波,计算两个相关的分解滤波器,并直接使用该滤波器计算低频和高频系数[Lo_D,Hi_D] = wfilters('haar','d');[ca1,cd1] = dwt(s,Lo_D,Hi_D);% 进行单尺度db2 离散小波变换并观察最后系数的边缘效果[ca2,cd2] = dwt(s,'db2'); subplot(325); plot(ca2); title('db2 subplot(326);低频系数');高频系数');idwt 函数plot(cd2); title('db2% 当前扩展模式是补零% 构造原始一维信号s randn('seed',531316785)s = 2 + kron(ones(1,8),[1 -1]) + ... ((1:16)八2)/32 + 0.2*ra ndn (1,16);% 使用db2 进行单尺度dwt[ca1,cd1] = dwt(s,'db2');subplot(221); plot(ca1);title('db2 低频系数');subplot(222); plot(cd1);title('db2 高频系数');% 进行单尺度离散小波逆变换ss = idwt(ca1,cd1,'db2');err = norm(s-ss); % 检查重构subplot(212); plot([s;ss]');title(' 原始信号和重构信号');xlabel([' 误差的2 范数为= ',num2str(err)])% 对于给定小波,计算两个相关重构滤波器,并直接利用它们进行逆变换[Lo_R,Hi_R] = wfilters('db2','r');ss = idwt(ca1,cd1,Lo_R,Hi_R);iswt 函数% 装载一维信号load noisbloc; s = noisbloc;% 画出原始信号subplot(311); plot(s);title(' 原始信号 .');%使用db1在第3层进行SWT 分解 swc = swt(s,3,'db1'); % 第2种实现方法 .[swa,swd] = swt(s,3,'db1');% 从平稳小波分解结构 swc 中,重构 s a0 = iswt(swc,'db1'); % 画出原始信号 subplot(312); plot(a0); title(' 重构信 号 1.'); % 第2种实现方法a0bis = iswt(swa,swd,'db1'); % 画出原始信号 subplot(313); plot(a0bis);title(' 重构信号 2.'); % 检查重构的效果 err = norm(s-a0) errbis = norm(s-a0bis)############################ upcoef 函数% 当前扩展模式是补零(参见 dwtmode 函数)%低频信号由1〜6层系数获得 cfs = [1]; essup = 10; figure(1) for i=1:6 rec = upcoef('a',cfs,'db6',i);% essup 是重构信号必须的% 当 j 等于 essup 时, rec(j) 非常小ax = subplot(6,1,i),h =% 载入一维原始信号load noisbloc; s = noisbloc; % 画出原始信号subplot(4,2,1);plot(s);title(' 原始信号 '); subplot(4,2,2);plot(s);title(' 原始信号 '); %使用db1进行在第3层SWT 分解•[swa,swd] = swt(s,3,'db1');%画出从1〜3层离散小波变换的低频系数和高频系数 subplot(4,2,3);plot(swa(3,:));title(' subplot(4,2,5);plot(swa(2,:));title(' subplot(4,2,7);plot(swa(1,:));title('subplot(4,2,4);plot(swd(3,:));title('subplot(4,2,6);plot(swd(2,:));title('subplot(4,2,8);plot(swd(1,:));title('第 3 层低频系数 '); 第 2 层低频系数 ');第 1 层低频系数 '); 第 3 层低频系数 '); 第 2层低频系数 swt 函数plot(rec(1:essup)); set(ax,'xlim',[1 325]);essup = essup*2; end subplot(611) title([' 尺度1 到6,由惟一的系数获得的低频信号'])% 同样可以获得高频信号% 高频信号可以由惟一系数从尺度1〜6获得cfs = [1];mi = 12; ma = 30; % db6 小波滤波器必须的rec = upcoef('d',cfs,'db6',1); figure(2)subplot(611), plot(rec(3:12))for i=2:6rec = upcoef('d',cfs,'db6',i);subplot(6,1,i), plot(rec(mi*2A(i-2):ma*2F-2)))endsubplot(611)title([' 由惟一系数从尺度1 到6获得的高频信号'])upwlev 函数%当前的延拓模式是补零(参见dwtmode函数)% 装载原始一维信号load sumsin; s = sumsin;% 使用db1 执行3 层小波分解[c,l] = wavedec(s,3,'db1'); subplot(311); plot(s); title(' 原始信号s.'); subplot(312); plot(c);title(' 3 层小波分解结构')xlabel([' 第3层的低频系数以及第3、2和1层的高频系数'])% 对3 层的小波分解结构进行重构% 因此新的结构[nc,nl] 是2 层小波分解结构[nc,nl] = upwlev(c,l,'db1'); subplot(313); plot(nc); title(' 2 层小波分解结构')xlabel([' 第2 层的低频系数及第1 和2 层的高频系数'])wavedec 函数% 当前延拓模式是补零% 装载一维原始信号load sumsin; s = sumsin; subplot(2,1,1);plot(s); title(' 原始信号');%使用db1进行3层分解[c,l] = wavedec(s,3,'db1'); subplot(2,1,2);plot(c);title(' 小波分解结构');Xlabel(' 低频系数和第3,2,1 层的高频系数')waverec 函数% 当前延拓模式是补零% 装载一维原始load leleccum; s = leleccum(1:3920); ls = length(s);% 使用db5 进行尺度为3 时的分解[c,l] = wavedec(s,3,'db5');% 从小波分解结构[c,l] 重构信号sa0 = waverec(c,l,'db5');% 检查重构效果.err = norm(s-a0)subplot(2,1,1);plot(s);title(' 原始信号')subplot(2,1,2);plot(a0);title(' 重构信号')############################wmaxlev 函数% 对于一维信号s = 2X0;w = 'db1';% 计算小波分解的最大尺度,规则时最大尺度至少一个系数正确l1 = wmaxlev(s,w)% 改变小波w = 'db7';% 计算最大分解尺度l2= wmaxlev(s,w)% 对于二维信号s = [2A9 2A7];w = 'db1';% 计算最大分解尺度13 = wmaxlev(s,w)% 它和下面这个函数一样14 = wmaxlev(min(s),w)% 改变小波w = 'db7';% 计算最大分解尺度15 = wmaxlev(s,w)wrcoef 函数%采用补零的扩展模式(参见dwtmode函数)% 装载一维信号load sumsin; s = sumsin;subplot(2,1,1);plot(s);title(' 原始信号');%使用sym4进行尺度为5的分解[c,l] = wavedec(s,5,'sym4');% 从小波分解结构[c,l] ,重构尺度为5的低频部分a5 = wrcoef('a',c,l,'sym4',5);subplot(2,1,2);plot(a5);title(' 重构低频信号');############################一维离散小波变换load noisblocs= noisbloc(1:1024); ls=length(s); [cA1,cD1]=dwt(s,'db4');A1=upcoef('a',cA1,'db4',1,ls);D1=upcoef('d',cD1,'db4',1,ls); subplot(2,1,1);plot(A1);title('subplot(2,1,2);plot(D1);title('A0=idwt(cA1,cD1,'db4',ls);figure(2)subplot(2,1,1);plot(s);title(' subplot(2,1,2);plot(A0);title('[C,L]=wavedec(s,5,'db4');cA5=appcoef(C,L,'db4',5);A5=wrcoef('a',C,L,'db4',3);D1=wrcoef('d',C,L,'db4',1);D2=wrcoef('d',C,L,'db4',2);D3=wrcoef('d',C,L,'db4',3);D4=wrcoef('d',C,L,'db4',4);D5=wrcoef('d',C,L,'db4',5); subplot(3,2,1);plot(A5);title(' subplot(3,2,2);plot(D1);title(' subplot(3,2,3);plot(D2);title(' subplot(3,2,4);plot(D3);title(' subplot(3,2,5);plot(D3);title(' subplot(3,2,6);plot(D3);title(' figure(3)A0=waverec(C,L,'db4');subplot(3,1,1);plot(s);title(' subplot(3,1,2);plot(A0);title(' subplot(3,1,3);plot(s- A0);title(' err = max(abs(s-A0))###############一维连续小波变换% 装载实际信号load vonkoch低频A1')高频D1')原始信号')重构信号')低频A5')高频D1')高频D2')高频D3')高频D4')高频D5')原始信号')重构信号')误差信号')#############vonkoch=vonkoch(1:510); lv = length(vonkoch);subplot(311), plot(vonkoch);title(' 被分析信号.'); set(gca,'Xlim',[0 510])% 执行离散5 层sym2 小波变换%层数1〜5分别对应尺度2, 4, 8,16 and 32[c,l] = wavedec(vonkoch,5,'sym2');% 扩展离散小波系数进行画图% 层数1〜5分别对应尺度2, 4, 8, 16 和32 cfd = zeros(5,lv); for k = 1:5d = detcoef(c,l,k);d = d(o nes(1,2Ak),:);cfd(k,:) = wkeep(d(:)',lv);end cfd = cfd(:);I = find(abs(cfd) cfd(I)=zeros(size(I)); cfd = reshape(cfd,5,lv);% 画出离散系数subplot(312), colormap(pink(64)); img =image(flipud(wcodemat(cfd,64,'row')));set(get(img,'parent'),'YtickLabel',[]);title(' 离散变换, 系数绝对值.') ylabel(' 层数')%执行连续小波sym2变换,尺度从1〜32subplot(313)ccfs = cwt(vonkoch,1:32,'sym2','plot');title(' 连续变换, 系数绝对值.')colormap(pink(64));ylabel(' 尺度') ############################。
MATLAB 小波变换指令及其功能介绍3. 图像小波变换的 Matlab 实现函数 fft、fft2 和 fftn 分析3.1 一维小波变换的 Matlab 实现(1) dwt 函数 Matlab功能:一维离散小波变换格式:[cA,cD]=dwt(X,'wname')[cA,cD]=dwt(X,Lo_D,Hi_D)别可以实现一维、二维和 N 维 DFT说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数 'wname' 对信号X 进行分解,cA、cD 分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。
(2) idwt 函数功能:一维离散小波反变换格式:X=idwt(cA,cD,'wname')X=idwt(cA,cD,Lo_R,Hi_R)X=idwt(cA,cD,'wname',L)函数 fft、fft2 和 fftn 分X=idwt(cA,cD,Lo_R,Hi_R,L)说明:X=idwt(cA,cD,'wname') 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。
'wname' 为所选的小波函数X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和 Hi_R 经小波反变换重构原始信号 X 。
X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。
1. 离散傅立叶变换的 Matlab实现3.2 二维小波变换的 Matlab 实现二维小波变换的函数别可以实现一维、二维和 N 维 DFT-------------------------------------------------函数名函数功能---------------------------------------------------dwt2 二维离散小波变换wavedec2 二维信号的多层小波分解idwt2 二维离散小波反变换 Matlabwaverec2 二维信号的多层小波重构wrcoef2 由多层小波分解重构某一层的分解信号upcoef2 由多层小波分解重构近似分量或细节分量1. 离散傅立叶变换的Matlab实现detcoef2 提取二维信号小波分解的细节分量appcoef2 提取二维信号小波分解的近似分量upwlev2 二维小波分解的单层重构1. 离散傅立叶变换的 Matlab实现dwtpet2 二维周期小波变换idwtper2 二维周期小波反变换-------------------------------------------------------------函数 fft、fft2 和 fftn 分(1) wcodemat 函数功能:对数据矩阵进行伪彩色编码函数 fft、fft2 和 fftn 分格式:Y=wcodemat(X,NB,OPT,ABSOL)Y=wcodemat(X,NB,OPT)Y=wcodemat(X,NB)Y=wcodemat(X)说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X 的编码矩阵 Y ;NB 伪编码的最大值,即编码范围为 0~NB,缺省值 NB=16;OPT 指定了编码的方式(缺省值为 'mat'),即:别可以实现一维、二维和 N 维DFTOPT='row' ,按行编码OPT='col' ,按列编码OPT='mat' ,按整个矩阵编码函数 fft、fft2 和 fftn 分ABSOL 是函数的控制参数(缺省值为 '1'),即:ABSOL=0 时,返回编码矩阵ABSOL=1 时,返回数据矩阵的绝对值 ABS(X)1. 离散傅立叶变换的Matlab实现(2) dwt2 函数功能:二维离散小波变换格式:[cA,cH,cV,cD]=dwt2(X,'wname')[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数 'wname' 对二维信号 X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。
小波变换实验二
连续小波变换
1、实验目的
本实验的目的在于充分理解连续小波变换的算法和作用,利用matlab程序实现对一维信号进行连续小波变换,进而在程序的编辑过程理解一位连续小波变换的小波系数矩阵的含义。
同时通过对预算的到的小波系数矩阵进行分析解释,得到原始信号的频谱分布以及了解小波系数在尺度和位移两个分量上的意义。
2、实验原理、实验编程思路
1、根据书本的理论知识,知道一维连续小波变换的公式为:
实际在编程过程当中,对于上式中积分的求解可以采用将积分函数离散化,通过求和来实现求积分,离散的过程如下式:
本实验中,根据题目可以知道采样的时间间隔为0.03s,即上式中Δt,在实际编程当中为了计算方便可以省略掉这个时间常数,所以在编程过程当中使用的公式实际为:
2、小波函数的选取:使用墨西哥草帽(mexhat)小波来进行小波变换,墨西哥草帽的函数为(支撑区间为-5—5):
对于连续小波函数的采样间隔,根据不同的尺度参量来进行采样,
比如尺度为i,实际对应小波的采样间隔取k/i,以保持和原信号在不同尺度上的同步。
3、程序运算简化:
在程序设计过程当中,如果对于小波系数的每一个系数都按照公式来计算,算法的时间复杂度应当为o(n3)。
但通过对公式的分析,不难看出,对于同意尺度a,相邻的两个小波系数之间的求和项,只有第一项或者最后一项或者二者都不同,所以在下一个系数求解的时候可以减少一次循环,从而将时间复杂度降到o(n2),运算效率大大提高。
4、在程序设计的过程当中,还分别对原信号进行傅里叶分析和直接的cwt变换,将得到的结果与设计的连续小波变换程序进行比对分析。
3、实验程序和结果
墨西哥草帽小波参数获取函数:mexh.m
连续小波变换主函数:mexh-cwt.m
傅里叶分析和cwt分析:fft cwt result.m
1、利用mexh-cwt.m对源数据进行分析得到的结果:
原信号波形图
小波系数矩阵及原信号的三个主成分
小波系数矩阵的三维视图
功率谱图和功率等值线图
从上述的小波变换结果,特别是小波系数矩阵的信息中可以看出,原始信号主要有三个平率不同且时域分布也不同的主成份组成,从图中可以定性地看出,频率最高的成分1始终出现在整个信号段,而频率次
之的成分2只在信号刚开始的阶段出现,频率最低的成分3基本上在成分2消失之后开始出现。
这些信息都是从单纯的傅里叶频谱分析中无法得到的。
2、利用fft cwt result.m对原信号进行频谱分析和算法校验:
从上述傅里叶频谱分析图中同样可以看出信号的三个主成份,且对
应频率近似分别为:0.651Hz、1.237Hz、2.604Hz。
在小波变换中,每个尺度对应0.03s,上述三个频率对应周期分别为:1.536s、0.808s、0.384。
对应到尺度域上容易计算的对应的尺度间隔分别为:51.2、26.9、12.8。
再次观察小波系数,分析得到的三个主成份对应的尺度间隔基本吻合,也验证了我们计算得到的结果。