Matlab 多层(multi-level)小波分析(dwt,dwt2)
前言
网上翻了很久的资料,找不到很详细的解释,又找到matlab的官方文档,但是也只是使用dwt
和dwt2
的single-level的小波分析,而multi-level的有找到是用wavedec
和waverec
函数的。在利用dwt
和dwt2
做multi-level的小波变换时也遇到了一些问题,在此记录一二。
注意: 噬也仅在此提供基本使用方式,具体的请查看相关matlab官方文档:dwt,idwt,dwt2,idwt2,wavedec,waverec。
问题描述
对于一维(1-dim)、二维(2-dim)信号,综合考虑关于影响其小波分析效果的以下方面:
- 不同母函数(mother wavelet)
- 软 / 硬去噪(soft / hard denoising,ξ\xiξ=0.01,0.05,0.1)
- 分解层数 (decomposition level)
基本处理流程
【整体代码在后面,此部分仅为解释性讲解。】
载入信号 (load)
- 一维 (1-dim),一般载入后会是一个1×1的struct,需要提取值(可以在右侧工作区双击点开变量查看名称)
X=load('Dir\p_5_2.mat'); X=X.signal_name; % Name of the signal
- 二维 (2-dim),处理成矩阵(图像)
% Here is an example of 2-level X=load('Dir\p_5_3.mat'); X=cell2mat(struct2cell(X));
- 一维 (1-dim),一般载入后会是一个1×1的struct,需要提取值(可以在右侧工作区双击点开变量查看名称)
小波分解 (decompostion)
- 一维 (1-dim)
- 单层 (1-level)
wavename = 'db1'; [cA,cD] = dwt(X,'db1');
- 多层 (multi-level),只需要不断对每一层的
cA
(Approximation coefficients) 进行分解,或使用wavedec
函数wavename = 'db1'; [cA,cD] = dwt(X,wavename); [cA2,cD2] = dwt(cA,wavename);
- 单层 (1-level)
- 二维 (2-dim)
- 单层 (1-level)
wavename = 'haar'; % or 'db2', 'coif1' [cA,cH,cV,cD] = dwt2(X,wavename);
- 多层 (multi-level),只需要不断对每一层的
cA
(Approximation coefficients) 进行分解,或使用wavedec2
函数% Here is an example of 2-level wavename = 'haar'; [cA,cH,cV,cD] = dwt2(X,wavename); [cA2,cH2,cV2,cD2] = dwt2(cA,wavename);
- 单层 (1-level)
- 一维 (1-dim)
去噪 (denoising)
- 一维 (1-dim)
- 单层 (1-level),
‘s'
:soft denoising,‘h'
:hard denoisingthr = 0.01; % threshold cA = wthresh(cA,'s',thr); % or wthresh(cA,'h',thr); cD = wthresh(cD,'s',thr);
- 多层 (multi-level),在最后一层进行去噪即可,
‘s'
:soft denoising,‘h'
:hard denoisingthr = 0.01; % threshold cA2 = wthresh(cA2,'s',thr); % or wthresh(cA2,'h',thr); cD2 = wthresh(cD2,'s',thr);
- 单层 (1-level),
- 二维 (2-dim)
- 单层 (1-level)
thr = 0.01; % threshold cA = wthresh(cA,'h',thr); cH = wthresh(cH,'h',thr); cV = wthresh(cV,'h',thr); cD = wthresh(cD,'h',thr);
- 多层 (multi-level),在最后一层进行去噪即可,
‘s'
:soft denoising,‘h'
:hard denoising% Here is an example of 2-level thr = 0.01; % threshold cA2 = wthresh(cA2,'h',thr); cH2 = wthresh(cH2,'h',thr); cV2 = wthresh(cV2,'h',thr); cD2 = wthresh(cD2,'h',thr);
- 单层 (1-level)
- 一维 (1-dim)
小波重构 (reconstruction)
- 一维 (1-dim)
- 单层 (1-level)
wavename = 'db1'; x=idwt(cA,cD,wavename);
- 多层 (multi-level),只需要不断对每一层的
cA
(Approximation coefficients) 进行重构,或使用waverec
函数% Here is an example of 2-level wavename = 'db1'; cA=idwt(cA2,cD2,'db1'); x=idwt(cA,cD,'db1');
- 单层 (1-level)
- 二维 (2-dim)
- 单层 (1-level)
wavename = 'haar'; % or 'db2', 'coif1' x=idwt2(cA,cH,cV,cD,wavename);
- 多层 (multi-level),只需要不断对每一层的
cA
(Approximation coefficients) 进行分解,或使用waverec2
函数
注意: 二维多层重构可能会遇到维度不一致的报错,问题可能在于分解时对于奇偶行列数的处理,经观察发现,多出的行、列其实是重复的数据(和相邻的一样),因此应该直接舍去。% Here is an example of 2-level wavename = 'haar'; cA=idwt2(cA2,cH2,cV2,cD2,wavename); len = size(cA); % size(cA) = (164 190) cA = cA(1:len(1)-1,:); % size(cA) = (163 190) x=idwt2(cA,cH,cV,cD,wavename);
- 单层 (1-level)
- 一维 (1-dim)
效果图
一维:
二维:
代码
一维二层
X=load('Dir\p_5_2.mat'); X=X.eeg_signal; subplot(2,2,1); plot(X); title('Original');thr=0.1; [cA,cD] = dwt(X,'db1'); [cA2,cD2] = dwt(cA,'db1'); cA2= wthresh(cA2,'s',thr); cD2= wthresh(cD2,'s',thr); cA=idwt(cA2,cD2,'db1'); x=idwt(cA,cD,'db1'); subplot(2,2,2); plot(x); title('Reconstruction (0.1, soft)');thr=0.05; [cA,cD] = dwt(X,'db1'); [cA2,cD2] = dwt(cA,'db1'); cA2= wthresh(cA2,'s',thr); cD2= wthresh(cD2,'s',thr); cA=idwt(cA2,cD2,'db1'); x=idwt(cA,cD,'db1'); subplot(2,2,3); plot(x); title('Reconstruction (0.05, soft)');thr=0.01; [cA,cD] = dwt(X,'db1'); [cA2,cD2] = dwt(cA,'db1'); cA2= wthresh(cA2,'s',thr); cD2= wthresh(cD2,'s',thr); cA=idwt(cA2,cD2,'db1'); x=idwt(cA,cD,'db1'); subplot(2,2,4); plot(x); title('Reconstruction (0.01, soft)');
二维单层
X=load('Dir\p_5_1.mat'); X=cell2mat(struct2cell(X));subplot(4,2,1); imagesc(X); title('Original');subplot(4,2,2); [cA,cH,cV,cD] = dwt2(X,'db2'); x=idwt2(cA,cH,cV,cD,'db2'); imagesc(x); title('Reconstruction (original)');thr=0.1; [cA,cH,cV,cD] = dwt2(X,'db2'); cA= wthresh(cA,'h',thr); cH= wthresh(cH,'h',thr); cV= wthresh(cV,'h',thr); cD= wthresh(cD,'h',thr); x=idwt2(cA,cH,cV,cD,'db2'); subplot(4,2,3); imagesc(x); title('Reconstruction (0.1, hard)');thr=0.1; [cA,cH,cV,cD] = dwt2(X,'db2'); cA= wthresh(cA,'s',thr); cH= wthresh(cH,'s',thr); cV= wthresh(cV,'s',thr); cD= wthresh(cD,'s',thr); x=idwt2(cA,cH,cV,cD,'db2'); subplot(4,2,4); imagesc(x); title('Reconstruction (0.1, soft)');thr=0.05; [cA,cH,cV,cD] = dwt2(X,'db2'); cA= wthresh(cA,'h',thr); cH= wthresh(cH,'h',thr); cV= wthresh(cV,'h',thr); cD= wthresh(cD,'h',thr); x=idwt2(cA,cH,cV,cD,'db2'); subplot(4,2,5); imagesc(x); title('Reconstruction (0.05, hard)');thr=0.05; [cA,cH,cV,cD] = dwt2(X,'db2'); cA= wthresh(cA,'s',thr); cH= wthresh(cH,'s',thr); cV= wthresh(cV,'s',thr); cD= wthresh(cD,'s',thr); x=idwt2(cA,cH,cV,cD,'db2'); subplot(4,2,6); imagesc(x); title('Reconstruction (0.05, soft)');thr=0.01; [cA,cH,cV,cD] = dwt2(X,'db2'); cA= wthresh(cA,'h',thr); cH= wthresh(cH,'h',thr); cV= wthresh(cV,'h',thr); cD= wthresh(cD,'h',thr); x=idwt2(cA,cH,cV,cD,'db2'); subplot(4,2,7); imagesc(x); title('Reconstruction (0.01, hard)');thr=0.01; [cA,cH,cV,cD] = dwt2(X,'db2'); cA= wthresh(cA,'s',thr); cH= wthresh(cH,'s',thr); cV= wthresh(cV,'s',thr); cD= wthresh(cD,'s',thr); x=idwt2(cA,cH,cV,cD,'db2'); subplot(4,2,8); imagesc(x); title('Reconstruction (0.01, soft)');
二维二层
X=load('Dir\p_5_3.mat'); X=cell2mat(struct2cell(X));subplot(4,3,1); imagesc(X); title('Original');wavename = 'db2'; [cA,cH,cV,cD] = dwt2(X,wavename); [cA2,cH2,cV2,cD2] = dwt2(cA,wavename); cA=idwt2(cA2,cH2,cV2,cD2,wavename); len = size(cA); cA = cA(:,1:len(2)-1); x=idwt2(cA,cH,cV,cD,wavename); subplot(4,3,2); imagesc(x); title('Reconstruction (original, db2)');wavename = 'haar'; [cA,cH,cV,cD] = dwt2(X,wavename); [cA2,cH2,cV2,cD2] = dwt2(cA,wavename); cA=idwt2(cA2,cH2,cV2,cD2,wavename); len = size(cA); cA = cA(1:len(1)-1,:); x=idwt2(cA,cH,cV,cD,wavename); subplot(4,3,3); imagesc(x); title('Reconstruction (original, haar)');thr=0.1; wavename = 'db2'; [cA,cH,cV,cD] = dwt2(X,wavename ); [cA2,cH2,cV2,cD2] = dwt2(cA,wavename ); cA2= wthresh(cA2,'h',thr); cH2= wthresh(cH2,'h',thr); cV2= wthresh(cV2,'h',thr); cD2= wthresh(cD2,'h',thr); cA=idwt2(cA2,cH2,cV2,cD2,wavename ); len = size(cA); cA = cA(:,1:len(2)-1); x=idwt2(cA,cH,cV,cD,wavename ); subplot(4,3,4); imagesc(x); title('Reconstruction (0.1, Daubechies 2)');thr=0.05; wavename = 'db2'; [cA,cH,cV,cD] = dwt2(X,wavename ); [cA2,cH2,cV2,cD2] = dwt2(cA,wavename ); cA2= wthresh(cA2,'h',thr); cH2= wthresh(cH2,'h',thr); cV2= wthresh(cV2,'h',thr); cD2= wthresh(cD2,'h',thr); cA=idwt2(cA2,cH2,cV2,cD2,wavename ); len = size(cA); cA = cA(:,1:len(2)-1); x=idwt2(cA,cH,cV,cD,wavename ); subplot(4,3,5); imagesc(x); title('Reconstruction (0.05, Daubechies 2)');thr=0.01; wavename = 'db2'; [cA,cH,cV,cD] = dwt2(X,wavename ); [cA2,cH2,cV2,cD2] = dwt2(cA,wavename ); cA2= wthresh(cA2,'h',thr); cH2= wthresh(cH2,'h',thr); cV2= wthresh(cV2,'h',thr); cD2= wthresh(cD2,'h',thr); cA=idwt2(cA2,cH2,cV2,cD2,wavename ); len = size(cA); cA = cA(:,1:len(2)-1); x=idwt2(cA,cH,cV,cD,wavename ); subplot(4,3,6); imagesc(x); title('Reconstruction (0.01, Daubechies 2)');thr=0.1; wavename = 'haar'; [cA,cH,cV,cD] = dwt2(X,wavename); [cA2,cH2,cV2,cD2] = dwt2(cA,wavename); cA2= wthresh(cA2,'h',thr); cH2= wthresh(cH2,'h',thr); cV2= wthresh(cV2,'h',thr); cD2= wthresh(cD2,'h',thr); cA=idwt2(cA2,cH2,cV2,cD2,wavename); len = size(cA); cA = cA(1:len(1)-1,:); x=idwt2(cA,cH,cV,cD,wavename); subplot(4,3,7); imagesc(x); title('Reconstruction (0.1, Harr)');thr=0.05; wavename = 'haar'; [cA,cH,cV,cD] = dwt2(X,wavename); [cA2,cH2,cV2,cD2] = dwt2(cA,wavename); cA2= wthresh(cA2,'h',thr); cH2= wthresh(cH2,'h',thr); cV2= wthresh(cV2,'h',thr); cD2= wthresh(cD2,'h',thr); cA=idwt2(cA2,cH2,cV2,cD2,wavename); len = size(cA); cA = cA(1:len(1)-1,:); x=idwt2(cA,cH,cV,cD,wavename); subplot(4,3,8); imagesc(x); title('Reconstruction (0.05, Harr)');thr=0.01; wavename = 'haar'; [cA,cH,cV,cD] = dwt2(X,wavename); [cA2,cH2,cV2,cD2] = dwt2(cA,wavename); cA2= wthresh(cA2,'h',thr); cH2= wthresh(cH2,'h',thr); cV2= wthresh(cV2,'h',thr); cD2= wthresh(cD2,'h',thr); cA=idwt2(cA2,cH2,cV2,cD2,wavename); len = size(cA); cA = cA(1:len(1)-1,:); x=idwt2(cA,cH,cV,cD,wavename); subplot(4,3,9); imagesc(x); title('Reconstruction (0.01, Harr)');thr=0.1; wavename = 'coif1'; [cA,cH,cV,cD] = dwt2(X,wavename); [cA2,cH2,cV2,cD2] = dwt2(cA,wavename); cA2= wthresh(cA2,'h',thr); cH2= wthresh(cH2,'h',thr); cV2= wthresh(cV2,'h',thr); cD2= wthresh(cD2,'h',thr); cA=idwt2(cA2,cH2,cV2,cD2,wavename); len = size(cA); cA = cA(1:len(1)-1,:); x=idwt2(cA,cH,cV,cD,wavename); subplot(4,3,10); imagesc(x); title('Reconstruction (0.1, Coiflets 1)');thr=0.05; wavename = 'coif1'; [cA,cH,cV,cD] = dwt2(X,wavename); [cA2,cH2,cV2,cD2] = dwt2(cA,wavename); cA2= wthresh(cA2,'h',thr); cH2= wthresh(cH2,'h',thr); cV2= wthresh(cV2,'h',thr); cD2= wthresh(cD2,'h',thr); cA=idwt2(cA2,cH2,cV2,cD2,wavename); len = size(cA); cA = cA(1:len(1)-1,:); x=idwt2(cA,cH,cV,cD,wavename); subplot(4,3,11); imagesc(x); title('Reconstruction (0.05, Coiflets 1)');thr=0.01; wavename = 'coif1'; [cA,cH,cV,cD] = dwt2(X,wavename); [cA2,cH2,cV2,cD2] = dwt2(cA,wavename); cA2= wthresh(cA2,'h',thr); cH2= wthresh(cH2,'h',thr); cV2= wthresh(cV2,'h',thr); cD2= wthresh(cD2,'h',thr); cA=idwt2(cA2,cH2,cV2,cD2,wavename); len = size(cA); cA = cA(1:len(1)-1,:); x=idwt2(cA,cH,cV,cD,wavename); subplot(4,3,12); imagesc(x); title('Reconstruction (0.01, Coiflets 1)');
Matlab 多层(multi-level)小波分析(dwt,dwt2)相关推荐
- Python编程基础:第四十二节 多重继承Multi Level Inheritance
第四十二节 多重继承Multi Level Inheritance 前言 实践 前言 我们之前已经讲过继承的相关知识,当一个类是另一个类的父类,而此时这里的子类又是另一个类的父类,那此时就涉及多重继承 ...
- 38动感菜单 38 jQuery And CSS Drop Down Multi Level Menu Solutions
参看: http://www.1stwebdesigner.com/freebies/38-jquery-and-css-drop-down-multi-level-menu-solutions/ 3 ...
- 【Matlab语音隐写】DWT音频数字水印【含GUI源码 712期】
一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DWT音频数字水印[含GUI源码 712期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...
- matlab 股票 小波,小波分析 + 支持向量机(SVM)预测股票涨跌幅的实现
刚刚开始进入量化投资领域,最近在做金融数据方面的预测,用到了数据挖掘的知识,花了大概半个月的时间搞懂研报的思想,学习研报中提到的数据处理和机器学习算法,并实现了这个量化投资的核心模型部分,虽然结果显示 ...
- 数字水印算法matlab源程序 matlab版数字水印算法 /DCT/DWT/LSB/HVS/W-SVD数字水印源码 数字水印的嵌入和提取 W-SVD数字水印实现
发以下多套系统源码: 1.matlab版数字水印算法 2.MATLAB数字水印 源代码+文档 3.数字水印技术matlab代码 4.数字水印 JPEG压缩 matlab代码 5.数字水印 添加噪声 m ...
- matlab小波分析工具箱原理与应用_补充:频域特征值提取的MATLAB代码实现(小波分析)...
之前的文章信号频域分析方法的理解(频谱.能量谱.功率谱.倒频谱.小波分析)中提到了离散小波分解的例子,其参考代码如下: t_s 结果如下: 原始信号 离散小波分析结果 左侧四行是1~4阶的近似信号,右 ...
- matlab频域怎么提取特征值,补充:频域特征值提取的MATLAB代码实现(小波分析)...
之前的文章信号频域分析方法的理解(频谱.能量谱.功率谱.倒频谱.小波分析)中提到了离散小波分解的例子,其参考代码如下: t_s = 0.005; %采样周期 t_start = 0.001; %起始时 ...
- matlab多层神经网络到权值和阈值,BP神经网络到底可不可以规定权值和阈值呢
%% 程序说明 % 主程序:ga_bp.m % 适应度函数:gabpEval.m % 编解码子函数:gadecod.m % 使用前需安装gaot工具箱,上述三个文件需放在同一文件夹中且将该文件夹 % ...
- 补充:频域特征值提取的MATLAB代码实现(小波分析)
之前的文章信号频域分析方法的理解(频谱.能量谱.功率谱.倒频谱.小波分析)中提到了离散小波分解的例子,其参考代码如下: t_s = 0.005; %采样周期 t_start = 0.001; %起始时 ...
- 【语音隐藏】基于matlab小波变换DWT结合离散余弦变换DCT音频数字水印嵌入提取【含Matlab源码 2131期】
⛄一.离散小波变换的音频信号数字水印技术简介 0 引言 近年来, 数字水印技术的作用越来越重要.数字水印技术是将一些标识信息直接嵌入数字载体当中, 或间接表示在信号载体中, 且不影响原载体的使用价值. ...
最新文章
- UVa OJ 120
- 常见的php笔试题(附答案)搜集整理
- Android studio真机调试
- plSql读取Oracle数据库中文乱码
- java多线程机制计时器_java多线程定时器与单例模式
- 四张图,读懂 BIO、NIO、AIO、多路复用 IO 的区别
- spring注册bean
- 自动化测试和手工测试结果汇总小实践
- 一种用于亚洲大豆锈病黄化和坏死严重程度评估的自动植物病理测量系统
- 百分点董事长苏萌:大数据落地有五大要素
- React --获取服务器数据的两种方式(Axios和FetchJsonp)
- Retrofit结合RxJava使用指南
- 管理感悟:如何看待培训
- matlab 图像处理之直线拟合
- 月薪30K+的电子工程师应具备什么?
- Linux中Vim的安装
- HDU1166 敌兵布阵【线段树】题解
- 中兴网络设备交换机路由器查看MC-LAG状态检查命令方法
- mac 修改 DNS
- 微信小程序开发者工具error:用户绑定的手机需要进行验证,请在客户端完成短信验证
热门文章
- CodeForces - 767C Garland(附带易错数据)
- 百度后端二面有哪些内容,万字总结(一)
- go 通道 并发 顺序_并发Go中的锁定与通道
- 《自然—代谢》:中科院微生物所刘宏伟/刘双江团队报道改善动脉粥样硬化的“新思路”...
- 人工智能发展神速?37年前的尘封档案告诉你并没有
- oracle数据投毒,Oracle Database Server ‘TNS Listener’远程数据投毒漏洞(CVE-2012-1675)的解决方案...
- 【笔记本Windows的两个ctrl键失效解决办法大全解】
- 小白刷LeeCode(算法篇)2
- wingide python_WingIDE下载|Wingware Python WingIDE汉化中文版6.0 下载_当游网
- 智慧城市万亿级蓝海赛道机遇何在?