Matlab 多层(multi-level)小波分析(dwt,dwt2)

这篇博客详细介绍了如何在Matlab中进行多层小波分析,包括1D和2D信号的处理流程、不同母函数的选择、软硬去噪方法以及分解层数的影响。作者提供了从信号载入到小波分解、去噪和重构的步骤,并给出了1D二层和2D单、二层的代码示例。
摘要由CSDN通过智能技术生成

前言

网上翻了很久的资料,找不到很详细的解释,又找到matlab的官方文档,但是也只是使用dwtdwt2的single-level的小波分析,而multi-level的有找到是用wavedecwaverec函数的。在利用dwtdwt2做multi-level的小波变换时也遇到了一些问题,在此记录一二。

注意: 噬也仅在此提供基本使用方式,具体的请查看相关matlab官方文档:dwtidwtdwt2idwt2wavedecwaverec

问题描述

对于一维(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));
      
  • 小波分解 (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);
        
    • 二维 (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);
        
  • 去噪 (denoising)

    • 一维 (1-dim)
      • 单层 (1-level),‘s':soft denoising, ‘h':hard denoising
        thr = 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 denoising
        thr = 0.01; % threshold
        cA2 = wthresh(cA2,'s',thr); % or wthresh(cA2,'h',thr);
        cD2 = wthresh(cD2,'s',thr);
        
    • 二维 (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);
        
  • 小波重构 (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');
        
    • 二维 (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,:);
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值