为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

最近想尝试一下小波的用法

2017-09-19 23页 doc 744KB 16阅读

用户头像

is_196623

暂无简介

举报
最近想尝试一下小波的用法最近想尝试一下小波的用法,就这matlab的帮助尝试了一下它的例子,顺便翻译了一下帮助的内容,发现matlab帮助做的确实不错,浅显易懂!现把翻译的文档写出来吧,想学习的共同学习吧!   小波工具箱简介 小波工具箱包含了图像化的工具和命令行函数,它可以实现如下功能: l 测试、探索小波和小波包的特性 l 测试信号的统计特性和信号的组分 l 对一维信号执行连续小波变换 l 对一维、二维信号执行离散小波分析和综合 l 对一维、二维信号执行小波包分解(参见帮助Using Wavelet Packets) l 对信号或图像进行压缩、去...
最近想尝试一下小波的用法
最近想尝试一下小波的用法,就这matlab的帮助尝试了一下它的例子,顺便翻译了一下帮助的内容,发现matlab帮助做的确实不错,浅显易懂!现把翻译的文档写出来吧,想学习的共同学习吧!   小波工具箱简介 小波工具箱包含了图像化的工具和命令行函数,它可以实现如下功能: l 测试、探索小波和小波包的特性 l 测试信号的统计特性和信号的组分 l 对一维信号执行连续小波变换 l 对一维、二维信号执行离散小波和综合 l 对一维、二维信号执行小波包分解(参见帮助Using Wavelet Packets) l 对信号或图像进行压缩、去噪   另外,工具箱使用户更方便的展示数据。用户可以做如下选择: l 显示哪个信号 l 放大感兴趣的区域 l 配色设计来显示小波系数细节 工具箱可以方便的导入、导出信息到磁盘或matlab工作空间。具体详见File Menu Options   一维连续小波分析 这一部分来测试连续小波分析的特性。连续小波分析只需要一个小波函数cwt。在这一部分将学到如下内容: l 加载信号 l 对信号执行连续小波变换 l 绘制小波系数 l 绘制指定尺度的小波系数 l 绘制整个尺度小波系数中的最大值 l 选择显示方式 l 在尺度和伪频率之间切换 l 细节放大 l 在普通或绝对模式下显示系数 l 选择执行小波分析的尺度 使用命令行执行连续小波分析 这个例子是一个包含噪声的正弦波 1. 加载信号 load noissin 可以使用whos显示信号信息 whos Name Size Bytes Class noissin 1x1000 8000 double 2. 执行连续小波变换 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 出现如下小波工具箱主菜单 选择Continuous Wavelet 1-D菜单项,出现如下一维信号分析连续小波分析工具 2. 加载信号 选择菜单File->Load Signal,在Load Signal对话框里选择noissin.mat文件,它在matlab安装目录的toolbox/wavelet/wavedemo文件夹下,点击OK加载信号。 一维连续小波工具开始加载信号,加载后默认采样频率为1s。 3. 执行连续小波变换 下面来测试使用db4小波对尺度1到48做小波分析,设置如下 4. 点击Analyze按钮 在短暂的计算后,工具将绘制小波系数,并在Coefficients line坐标系中绘制尺度为24的小波系数,在local maxima坐标系中绘制各尺度的小波系数最大值。 5. 查看小波Coefficients Line 在小波系数图中右键点击可以选择展示其他尺度的小波系数,选择后点击New Coefficients Line按钮,Coefficients Line会相应更新。 6. 查看Maxima Line 点击Refresh Maxima Line按钮,可以显示从尺度1到所选尺度的小波系数的最大值。 注意当在系数图中按下鼠标右键并移动时,会在最下面的Info框中显示当前鼠标位于的X位置和尺度。 7. 在尺度和伪频率之间切换 在右边选择Frequencies,当再在系数图中选择时,在Info中显示的将是Hz。 而关于尺度和频率的转换关系,可以看How to Connect Scale to Frequency? 8. 选择要显示的坐标系 9. 放大细节 在系数框中按鼠标左键可以选择放大的范围。 10. 选择好放大范围后点击最下面的按钮可以实现指定的放大 11. 显示普通系数或系数绝对值 两种显示方式的区别在于,普通模式下,颜色映射是在系数的最大最小之间;而绝对模式,颜色映射是在0和最大的系数绝对值之间。 图形接口的导入导出信息 导入信号到一维连续小波工具 首先将要处理的信号保存到mat文件中,要求信号是一维的向量。然后使用工具的File ->Load Signal菜单功能,选择此信号文件即可导入信号。 文件中第一个一维变量被认为是信号,变量在文件中顺序是按字母排序的。 保存小波系数 小波分析完成后,点击File->Save->Coefficients,可以将分析结果保存到mat文件。保存后,可以使用load函数加载数据,会看到保存的变量有小波系数coeff、尺度scales、小波的名字wname。       一维复信号连续小波分析 对于复信号连续小波分析,小波工具箱中对应的函数是cwt。 使用命令行分析复信号 这个例子是一个带尖头的信号,如下 1. 加载信号 load cuspamax 文件中包含两个变量,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'); 结果显示了四副图形,分别为系数的实部、虚部、模、相角。 使用图形接口分析复信号 与实信号不同的是,选择Complex Continuous Wavelet 1-D,得到的结果如下 具体操作过程与实信号的相似,如下 一维离散小波分析 工具箱提供了如下函数做一维信号分析: Function Name Purpose 分解函数 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. 加载信号 load leleccum 截取信号 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('Approximation A1') subplot(1,2,2); plot(D1); title('Detail D1') 5. 使用逆小波变换恢复信号 A0 = idwt(cA1,cD1,'db1',l_s); err = max(abs(s-A0)) err = 2.2737e-013 6. 执行多层小波分解 执行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('Approximation A3') subplot(2,2,2); plot(D1); title('Detail D1') subplot(2,2,3); plot(D2); title('Detail D2') subplot(2,2,4); plot(D3); title('Detail D3') 10. 从3层分解中重建原始信号 A0 = waverec(C,L,'db1'); err = max(abs(s-A0)) err = 4.5475e-013 11. 粗糙的去噪信号 使用小波从信号中移除噪声需要辨识哪个或哪些组分包含噪声,然后重建没有这些组分的信号。 在这个例子中,我们注意到连续的近似随着越来越多的高频信息从信号中滤除,噪声变得越来越少。3层近似与原始信号对比会发现变得很干净。对比近似和原始信号,如下 subplot(2,1,1);plot(s);title('Original'); axis off subplot(2,1,2);plot(A3);title('Level 3 Approximation'); axis off 当然,摒弃所有高频信息,我们会失去原始信号中的很多最尖锐的特征。最佳的去噪需要通过一种更精细的叫阈值方法,它只丢弃部分超过一定范围的细节。 12. 通过阈值去除噪声 先来看3层分析的细节 subplot(3,1,1); plot(D1); title('Detail Level 1'); axis off subplot(3,1,2); plot(D2); title('Detail Level 2'); axis off subplot(3,1,3); plot(D3); title('Detail Level 3'); axis off 从图中可以看到,大多数噪声发生在信号的后面部分,表现在细节上就是出现大波动的地方。如果我们通过设定最大值来限定细节强度,会怎么样呢?这会有降低噪声效果,同时保留不影响的必要细节。这是一种很好的方法。 注意到cD1,cD2,cD3是向量,那么我们就可以通过直接操纵这些向量来达到目的,即设置这些向量小于其峰值或平均值的一部分,然后就可以由这些设定了阈值的系数重建新的细节信号D1、D2、D3。 实际去噪过程中,可以使用ddencmp函数来计算默认的阈值参数,然后用wdencmp函数来执行实际的去噪过程,代码如下 [thr,sorh,keepapp] = ddencmp('den','wv',s); clean = wdencmp('gbl',C,L,'db1',3,thr,sorh,keepapp); 注意wdencmp使用了第6步中小波分解的结果C、L,另外指定了db1小波来做分析,指定全局阈值选项gb1.详细参见ddencmp函数和wdencmp函数。 显示原始信号和去噪信号如下 subplot(2,1,1); plot(s(2000:3920)); title('Original') subplot(2,1,2); plot(clean(2000:3920)); title('denoised') 这里我们只绘制了原始信号中包含噪声的部分,特别注意我们是如何在移除了噪声的情况下仍保持原有的尖锐细节的,这也是小波分析强大的地方。 使用命令行函数去除噪声是很笨拙的,而图形工具提供了一种更方便使用的自动化阈值去噪方式。 关于去噪过程的更多信息可以在下面的部分找到: * Remove noise from a signal 从一个信号中去除噪声 *De-Noising in the Wavelet Toolbox User's Guide 小波工具箱中的除噪 *One-Dimensional Variance Adaptive Thresholding of Wavelet Coefficients 一维小波系数自适应阈值 *One-Dimensional Variance Adaptive Thresholding of Wavelet Coeffiients in the Wavelet Toolbox User's Guide   使用图形接口做一维分析 1. 开启一维小波分析工具 Wavemenu->Wavelet 1-D 2. 加载信号 3. 执行一层小波分解 使用db1小波执行一层分解 4. 放大有关细节 5. 执行多层小波分解 使用db1小波执行3层分解。 选择不同的显示方式:在Display mode下拉菜单下可以选择不同的显示方式,默认的显示方式为Full Decomposition Mode,其他的显示方式及其意义如下 Separate Mode:在不同的列中显示细节和近似; Superimpose Mode:在一张图上以不同的颜色显示细节、近似; Tree Mode:显示分解树、原始信号和选择的成分,在分解树上选择你想显示的成分; Show and Scroll Mode:显示3个窗口,第一个显示原始信号和选择的近似信号,第二个显示选择的细节,第三个显示小波系数; Show and Scroll Mode(Stem Cfs):和Show and Scroll Mode很接近,除了第三个窗口中以杆状图替代颜色条显示小波系数。 对于每个分析任务,可以改变默认的显示方式,只要在View->Default Display Mode子菜单下选择理想的方式即可;不同的显示方式会有额外的显示选项,在More Display Options中做选择,这些选项可以控制不同成分的显示、选择是否显示原始信号与细节、近似对比。 6. 从信号中移除噪声 图形接口提供了以预定义的阈值策略除噪的选项,这使得从信号中除噪非常容易,只需点击De-noise按钮就可以弹出除噪工具。 点击Close可以关闭除噪窗口,由于不能同时打开除噪和压缩窗口,所以需要关闭除噪窗口再进行信号压缩。关闭时会提示Update Synthesized Signal提示对话框,点击No,如果点击Yes,合成的信号会加载到主窗口。 7. 改善分析 图像工具可以在任何时候轻易的改善分析,只需要改变分析的方法就可以了,如使用db3做5层小波分析。 8. 压缩信号 图形接口提供了自动化或人工阈值的做压缩的功能。 默认使用的是全阈值方法,当然也可以使用人工阈值的方法,选择By Level thresholding选项即可,下面的滑动条提供了各级阈值独立调整的功能,相应的调整可以在左边的窗口中看到,在图形窗口中也可以直接拖动来改变阈值。 完成选择后,点击压缩按钮可以完成压缩。从压缩的结果可以看到,压缩过程去除了大多数噪声,但保存了信号99.74%的能量。自动化阈值是非常有效的,它使除3.2%的小波系数都归零化了。 9. 显示残差 点击Residuals按钮可以查看压缩的残差。显示的统计数据包括测量的趋势(平均值、众数、中值)和散布情况(极差、差)。另外,工具还提供了概率分布直方图和累计直方图以及时间序列图,如自相关函数、频谱。这些都是和去噪工具是一样的。 10. 显示统计分布 可以显示一系列有关信号及其组分的统计数据。 点击Statistics按钮可以查看统计数据信息,点击Histograms可以查看直方图。   从图形接口中导入导出信息 保存信息 l 保存合成的信号 如加载如下信号File > Example Analysis > Basic Signals > with db3 at level 5 → Sum of sines,做除噪或压缩处理后,保存合成信号File > Save > Synthesized Signal,保存后加载文件,会得到如下变量: 如果使用除全阈值外的方法时,得到的变量结构如下 Synthsig是合成的信号,除噪或压缩的小波方法保存在wname中,相互依赖的各级阈值保存在thrParams中,小波分解的等级数和cell的长度相等,thrParams{i},i从1到5分别保存了阈值间距上下限的值和阈值(间距阈值是允许的,在自适应阈值方法中会用到,参见One-Dimensional Variance Adaptive Thresholding of Wavelet Coefficients) 如果使用的全阈值方法,保存的数据结构如下 alTHR保存的是全阈值的值。 l 保存离散小波变换的系数 一个例子的文件内容如下 Coefs包含了离散小波变换的系数,longs包含了各组分的长度,thrParams为空,因为合成信号不存在,wname是小波的名字。 l 保存分解结果(即保存小波分析的全体数据) 小波工具将保存为.wal文件,加载方式为 load wdecex1d.wa1 –mat 文件内容为 加载信息 加载的文件只要和保存的相应文件中的变量一样即可。 离散平稳小波分析所用到的函数有swt小波分解和iswt小波重构。在这一部分可以学到如下内容: l 加载信号 l 执行平稳小波分解 l 从小波系数中构造近似和细节 l 显示第一层的近似和细节 l 平稳小波逆变换恢复原始信号 l 执行多层平稳小波分解 l 重构第3层近似 l 重构1、2、3层细节 l 重构1、2层近似 l 显示分解的结果 l 从3层分解中重构原始信号 l 除噪 使用命令行实现一维分析 1. 加载信号(一个噪声污染的多普勒效应信号) load noisdopp 2. 设置变量 s = noisdopp; 对于SWT变换,如果需要在第k层分解信号,那么原始信号需要能够平分成2^k份。所以如果原始信号的长度不满足要求,需要使用Signal Extension GUI工具或使用wextend函数来扩展它。 3. 执行一层平稳小波分解 [swa,swd] = swt(s,1,'db1'); 函数执行将产生1层近似和细节的系数,两者和信号的长度是相等的,这也是平稳小波和普通小波不同的地方,从而使它在某些领域有好的效果。 4. 显示近似、细节小波系数 显示一层近似和细节的系数 subplot(1,2,1), plot(swa); title('Approximation cfs') subplot(1,2,2), plot(swd); title('Detail cfs') 5. 使用平稳小波逆变换恢复原始信号 A0 = iswt(swa,swd,'db1'); 重构的误差为 err = norm(s-A0) err = 2.1450e-014 6. 从系数中构建近似和细节 构建一层近似和细节,输入如下代码 nulcfs = zeros(size(swa)); A1 = iswt(swa,nulcfs,'db1'); D1 = iswt(nulcfs,swd,'db1'); 显示结果如下 subplot(1,2,1), plot(A1); title('Approximation A1'); subplot(1,2,2), plot(D1); title('Detail D1'); 7. 执行多层平稳小波分解 使用db1小波做3层小波分解 [swa,swd] = swt(s,3,'db1'); 产生的近似系数在swa中,细节系数在swd中,而且它们有相同的长度。 8. 显示近似和细节的系数 kp = 0; for i = 1:3 subplot(3,2,kp+1), plot(swa(i,:)); title(['Approx. cfs level ',num2str(i)]) subplot(3,2,kp+2), plot(swd(i,:)); title(['Detail cfs level ',num2str(i)]) kp = kp + 2; end 9. 从系数中重建第3层的近似 mzero = zeros(size(swd)); A = mzero; A(3,:) = iswt(swa,mzero,'db1'); 10. 从系数中重建细节 D = mzero; for i = 1:3 swcfs = mzero; swcfs(i,:) = swd(i,:); D(i,:) = iswt(mzero,swcfs,'db1'); End 11. 从第3层近似和第2、3层细节中重建第1、2层近似 重建2、3层的近似 A(2,:) = A(3,:) + D(3,:); A(1,:) = A(2,:) + D(2,:); 显示第1、2、3层的近似和细节 kp = 0; for i = 1:3 subplot(3,2,kp+1), plot(A(i,:)); title(['Approx. level ',num2str(i)]) subplot(3,2,kp+2), plot(D(i,:)); title(['Detail level ',num2str(i)]) kp = kp + 2; end 12. 阈值除噪 要去除噪声,先使用ddencmp函数计算一个默认的全局阈值,再使用wthresh函数执行细节系数的实际阈值,然后使用iswt得到除噪信号。 所有在一维离散小波变换中选择阈值的方法在一维平稳小波变换中都是有效的,GUI中两者的使用方法也一样。 [thr,sorh] = ddencmp('den','wv',s); dswd = wthresh(swd,sorh,thr); clean = iswt(swa,dswd,'db1'); 显示原始信号和除噪信号如下 subplot(2,1,1), plot(s); title('Original signal') subplot(2,1,2), plot(clean); title('denoised signal') 得到的信号仍然有一些噪声,结果可以通过考虑对信号进行5层分解,然后再除噪来改善,如下 [swa,swd] = swt(s,5,'db1'); [thr,sorh] = ddencmp('den','wv',s); dswd = wthresh(swd,sorh,thr); clean = iswt(swa,dswd,'db1'); subplot(2,1,1), plot(s); title('Original signal') subplot(2,1,2), plot(clean); title('denoised signal') 第二种实现相同效果的语法如下 lev = 5; swc = swt(s,lev,'db1'); swcden = swc; swcden(1:end-1,:) = wthresh(swcden(1:end-1,:),sorh,thr); clean = iswt(swcden,'db1'); 使用图形接口做一维除噪分析 1. 开启一维平稳小波除噪工具 输入wavemenu,选择SWT Denoising 1-D,出现如下GUI 2. 加载信号 Load Signal 3. 执行平稳小波分解 使用db1小波执行5层小波分解,得到的是非抽取系数(nondecimated coefficients),它们是使用相同的离散小波变换来得到的,只是省略了抽取的步骤。得到的结果如下 4. 使用平稳小波变换除噪 可以使用GUI默认的参数做除噪处理。右边的滑动条可以控制各级系数的阈值大小,也可以直接在系数图中直接拖动来调整阈值的大小,注意近似系数中没有阈值。点击denoise进行除噪处理 得到的效果是非常好的,但似乎在信号不连续的地方出现了过平滑,这个可以从残差图中看出来,在800的位置出现了突降点。 选择hard阈值模式代替soft模式,再进行除噪,结果如下 可以看到这次效果非常好,而且残差图也看起来像白噪声序列。为了验证这一点,可以点击Residuals按钮查看残差图及相关统计数据来详细说明。
/
本文档为【最近想尝试一下小波的用法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索