Matlab小波工具箱的使用1(2011-11-1020:12:39)转载▼标签:小波分析连续小波变换尺度系数信号分类:学科知识最近想尝试一下小波的用法,就这matlab的帮助尝试了一下它的例子,顺便翻译了一下帮助的内容,发现matlab帮助做的确实不错,浅显易懂!现把翻译的文档写出来吧,想学习的共同学习吧!小波工具箱简介小波工具箱包含了图像化的工具和命令行函数,它可以实现如下功能:l测试、探索小波和小波包的特性l测试信号的统计特性和信号的组分l对一维信号执行连续小波变换l对一维、二维信号执行离散小波分析和综合l对一维、二维信号执行小波包分解(参见帮助UsingWaveletPackets)l对信号或图像进行压缩、去噪另外,工具箱使用户更方便的展示数据。用户可以做如下选择:l显示哪个信号l放大感兴趣的区域l配色设计来显示小波系数细节工具箱可以方便的导入、导出信息到磁盘或matlab工作空间。具体详见FileMenuOptions一维连续小波分析这一部分来测试连续小波分析的特性。连续小波分析只需要一个小波函数cwt。在这一部分将学到如下内容:l加载信号l对信号执行连续小波变换l绘制小波系数l绘制指定尺度的小波系数l绘制整个尺度小波系数中的最大值l选择显示方式l在尺度和伪频率之间切换l细节放大l在普通或绝对模式下显示系数l选择执行小波分析的尺度使用命令行执行连续小波分析这个例子是一个包含噪声的正弦波1.加载信号loadnoissin可以使用whos显示信号信息whosNameSizeBytesClassnoissin1x10008000double2.执行连续小波变换c=cwt(noissin,1:48,'db4');函数cwt的参数分别为分析的信号、分析的尺度和使用的小波。返回值c包含了在各尺度下的小波系数。对于这里,c是一个48x1000的矩阵,每一行与一个尺度相关。3.绘制小波系数cwt函数可以接受第四个参数,来指定函数在执行结束后是否绘制连续小波变换系数的绝对值。另外还可以接受更多的参数来定义显示的不同特性,详见cwt函数。如下面的语句绘制系数结果c=cwt(noissin,1:48,'db4','plot');4.选择分析的尺度cwt函数的第二个参数可以设定任意小波分析的尺度,只要这些尺度满足如下要求l所有尺幅必须为正实数l尺度的增量必须为正l最高的尺度不能超过由信号决定的一个最大值如下面的代码可以执行从2开始的偶数尺度计算c=cwt(noissin,2:2:128,'db4','plot');显示结果如下这幅图像很明确的表示出了信号的周期性。使用图形接口做连续小波分析1.开启一维连续小波工具,只需输入如下命令wavemenu出现如下小波工具箱主菜单选择ContinuousWavelet1-D菜单项,出现如下一维信号分析连续小波分析工具2.加载信号选择菜单File-LoadSignal,在LoadSignal对话框里选择noissin.mat文件,它在matlab安装目录的toolbox/wavelet/wavedemo文件夹下,点击OK加载信号。一维连续小波工具开始加载信号,加载后默认采样频率为1s。3.执行连续小波变换下面来测试使用db4小波对尺度1到48做小波分析,设置如下4.点击Analyze按钮在短暂的计算后,工具将绘制小波系数,并在Coefficientsline坐标系中绘制尺度为24的小波系数,在localmaxima坐标系中绘制各尺度的小波系数最大值。5.查看小波CoefficientsLine在小波系数图中右键点击可以选择展示其他尺度的小波系数,选择后点击NewCoefficientsLine按钮,CoefficientsLine会相应更新。6.查看MaximaLine点击RefreshMaximaLine按钮,可以显示从尺度1到所选尺度的小波系数的最大值。注意当在系数图中按下鼠标右键并移动时,会在最下面的Info框中显示当前鼠标位于的X位置和尺度。7.在尺度和伪频率之间切换在右边选择Frequencies,当再在系数图中选择时,在Info中显示的将是Hz。而关于尺度和频率的转换关系,可以看HowtoConnectScaletoFrequency?8.选择要显示的坐标系9.放大细节在系数框中按鼠标左键可以选择放大的范围。10.选择好放大范围后点击最下面的按钮可以实现指定的放大11.显示普通系数或系数绝对值两种显示方式的区别在于,普通模式下,颜色映射是在系数的最大最小之间;而绝对模式,颜色映射是在0和最大的系数绝对值之间。图形接口的导入导出信息导入信号到一维连续小波工具首先将要处理的信号保存到mat文件中,要求信号是一维的向量。然后使用工具的File-LoadSignal菜单功能,选择此信号文件即可导入信号。文件中第一个一维变量被认为是信号,变量在文件中顺序是按字母排序的。保存小波系数小波分析完成后,点击File-Save-Coefficients,可以将分析结果保存到mat文件。保存后,可以使用load函数加载数据,会看到保存的变量有小波系数coeff、尺度scales、小波的名字wname。一维复信号连续小波分析对于复信号连续小波分析,小波工具箱中对应的函数是cwt。使用命令行分析复信号这个例子是一个带尖头的信号,如下1.加载信号loadcuspamax文件中包含两个变量,caption和cuspamax,前者是此信号的定义,如下caption=x=linspace(0,1,1024);y=exp(-128*((x-0.3).^2))-3*(abs(x-0.7).^0.4);2.执行连续小波变换c=cwt(cuspamax,1:2:64,'cgau4');3.绘制结果c=cwt(cuspamax,1:2:64,'cgau4','plot');结果显示了四副图形,分别为系数的实部、虚部、模、相角。使用图形接口分析复信号与实信号不同的是,选择ComplexContinuousWavelet1-D,得到的结果如下具体操作过程与实信号的相似,如下Matlab小波工具箱的使用2(2011-11-1109:32:57)转载▼标签:信号分类:学科知识阈值分解系数小波分析一维离散小波分析工具箱提供了如下函数做一维信号分析:FunctionNamePurpose分解函数dwt一层分解wavedec分解wmaxlev最大小波分解层数重构函数idwt一层重构waverec全重构wrcoef有选择性重构upcoef单一重构分解结构工具detcoef细节系数抽取appcoef近似系数抽取upwlev分解结构重排去噪和压缩ddencmp使用默认进行去噪和压缩wbmpen使用处罚门槛进行一维或二维去噪wdcbm使用处罚门槛进行一维(使用Birgé-Massart方法)wdencmp小波去噪和压缩wden自适应小波去噪wthrmngr门槛设置管理在这一部分,可以学到l加载信号l执行一层小波分解l从系数重建近似和细节l显示近似和细节l通过逆小波变换重建信号l执行多层小波分解l抽取近似系数和细节系数l重构第三层近似l重构第1、2、3层细节l显示多层分解的结果l从第三层分解重构原始信号l从信号中去除噪声l改善分析l压缩信号l显示信号的统计信息和直方图一维分析---使用命令行这个例子包含一个真实世界的信号---测量3天的电功耗。这个信号很典型,因为它包含一个明显的测量噪声,而小波分析可以有效的移除噪声。1.加载信号loadleleccum截取信号s=leleccum(1:3920);l_s=length(s);2.对信号执行一层小波分解使用db1小波执行一层小波分解,执行下面的语句产生近似系数cA1、细节系数cD1[cA1,cD1]=dwt(s,'db1');3.从系数中构建近似和细节从系数cA1和cD1中构建一层近似A1和细节D1,执行以下代码A1=upcoef('a',cA1,'db1',1,l_s);D1=upcoef('d',cD1,'db1',1,l_s);或A1=idwt(cA1,[],'db1',l_s);D1=idwt([],cD1,'db1',l_s);4.显示近似和细节subplot(1,2,1);plot(A1);title('ApproximationA1')subplot(1,2,2);plot(D1);title('DetailD1')5.使用逆小波变换恢复信号A0=idwt(cA1,cD1,'db1',l_s);err=max(abs(s-A0))err=2.2737e-0136.执行多层小波分解执行3层信号分解[C,L]=wavedec(s,3,'db1');函数返回3层分解的各组分系数C(连接在一个向量里),向量L里返回的是各组分的长度。分解的结构如下7.抽取近似系数和细节系数从C中抽取3层近似系数cA3=appcoef(C,L,'db1',3);从C中抽取3、2、1层细节系数cD3=detcoef(C,L,3);cD2=detcoef(C,L,2);cD1=detcoef(C,L,1);或者[cD1,cD2,cD3]=detcoef(C,L,[1,2,3]);结果显示如下,从上到下依次为原始信号、3层近似系数和3~1层细节系数1.重建3层近似和1、2、3层细节从C中重建3层近似A3=wrcoef('a',C,L,'db1',3);从C中重建1、2、3层细节D1=wrcoef('d',C,L,'db1',1);D2=wrcoef('d',C,L,'db1',2);D3=wrcoef('d',C,L,'db1',3);2.显示多层分解的结果显示3层分解的结果subplot(2,2,1);plot(A3);title('ApproximationA3')subplot(2,2,2);plot(D1);title('DetailD1')subplot(2,2,3);plot(D2);title('DetailD2')subplot(2,2,4);plot(D3);title('DetailD3')10.从3层分解中重建原始信号A0=waverec(C,L,'db1');err=max(abs(s-A0))err=4.5475e-01311.粗糙的去噪信号使用小波从信号中移除噪声需要辨识哪个或哪些组分包含噪声,然后重建没有这些组分的信号。在这个例子中,我们注意到连续的近似随着越来越多的高频信息从信号中滤除,噪声变得越来越少。3层近似与原始信号对比会发现变得很干净。对比近似和原始信号,如下subplot(2,1,1);plot(s);title('Original');axisoffsubplot(2,1,2);plot(A3);title('Level3Approximation');axisoff当然,摒弃所有高频信息,我们会失去原始信号中的很多最尖锐的特征。最佳的去噪需要通过一种更精细的叫阈值方法,它只丢弃部分超过一定范围的细节。12.通过阈值去除噪声先来看3层分析的细节subplot(3,1,1);plot(D1);title('DetailLevel1');axisoffsubplot(3,1,2);plot(D2);title('DetailLevel2');axisoffsubplot(3,1,3);plot(D3);title('DetailLevel3');axisoff从图中可以看到,大多数噪声发生在信号的后面部分,表现在细节上就是出现大波动的地方。如果我们通过设定最大值来限定细节强度,会怎么样呢?这会有降低噪声效果,同时保留不影响的必要细节。这是一种很好的方法。注意到cD1,cD2,cD3是向量,那么我们就可以通过直接操纵这些向量来达到目的,即设置这些向量小于其峰值或平均值的一部分,然后就可以由这些设定了阈值的系数重建新的细节信号D1、D2、D3。实际去噪过程中,可以使用ddencmp函数来计算默认的阈值参数,然后用wdencmp函数来执行实际的去噪过程,代码如下[th