小波包分解、重构、去噪与matlab函数使用

小波包分解、重构、去噪与matlab函数使用小波包分解与重构目录 1 小波包分解 重构原理 2 小波包使用到的函数及示例代码 2 1 小波包分解 2 1 1T wpdec X N wname 2 1 2X wpcoef T N 2 1 32 2 小波包重构 2 2 1X wprcoef T N 2 3 小波包去噪参考文献 1 小波包分解 重构原理 2 小波包使用到的函数及示例代码 2 1 小波包分解 2 1 1T wpdec X N wname T wpdec X N wname 小波分解函数 T 为小波包分解树

1 小波包分解、重构原理

1.1 小波变换

1.2 小波包变换

2 小波包使用到的函数及示例代码

在这里插入图片描述
以上即是小波包树,其中节点的命名规则是从(1,0)开始,叫1号, (1,1)是2号………依此类推,(3,0)是7号,(3,7)是14号。 每个节点都有对应的小波包系数,这个系数决定了频率的大小,也就是说频率信息已经有了,但是时域信息在哪里呢? 那就是 order。 这个order就是这些节点的顺序,也就是频率的顺序。

2.1 小波包分解

2.1.1 T = wpdec(X,N,‘wname’)

% Load signal. 载入原始信号 load noisdopp; x = noisdopp; figure(1); subplot(211); plot(x); title('Original signal'); % Decompose x at depth 3 with db1 wavelet packets % using Shannon entropy. wpt = wpdec(x,3,'db1'); plot(wpt) % 打印小波包分解树 

在这里插入图片描述
在这里插入图片描述

2.1.2 X = wpcoef(T,N)

% Read packet (2,1) coefficients. 读取小波包(2,1)节点系数 cfs = wpcoef(wpt,[2 1]); figure(1); subplot(212); plot(cfs); title('Packet (2,1) coefficients'); 

在这里插入图片描述
需要注意的是:小波包节点系数的长度等于250,为原始信号长度1000/N = 250。其中N为2^2,为第N层小波包树的节点个数

2.2 小波包重构

2.2.1 X = wprcoef(T,N)

% Reconstruct packet (2,1). 重构小波包节点系数(2,1) rcfs = wprcoef(wpt,[2 1]); figure(1); subplot(212); plot(rcfs); title('Reconstructed packet (2,1)'); 

在这里插入图片描述
需要注意的是:小波重构系数的信号长度与原始信号长度一致

2.2.2 [T,X] = wpjoin(T,N)

% Recompose packet (1,1) 重写小波包节点(1,1) wpt = wpjoin(wpt,[1 1]); % Plot wavelet packet tree wpt. plot(wpt) 

在这里插入图片描述

% 创建小波包树 load noisdopp; x = noisdopp; t = wpdec(x,3,'db3'); t = wpjoin(t,[4;5]); % 合并第45个小波树节点 plot(t); 

在这里插入图片描述

2.2.3 T = write(T,‘cfs’,NODE,COEFS)

% 将值写入第456个小波包树节点中 sNod = read(t,'sizes',[4,5,7]); cfs4 = zeros(sNod(1,:)); cfs5 = zeros(sNod(2,:)); cfs7 = zeros(sNod(3,:)); t = write(t,'cfs',4,cfs4,'cfs',5,cfs5,'cfs',7,cfs7); % Plot tree t and click the node (0,0) (see the plot function). % 打印原始节点(0,0,即小波包重构信号的节点 plot(t) 

在这里插入图片描述

2.2.4 X = wprec(T)

wpt = write(t,'cfs',4,cfs4,'cfs',5,cfs5,'cfs',7,cfs7);% 将值写入第456个小波包树节点中 xrec = wprec(wpt); % 重构后的信号 

在这里插入图片描述

2.2.5 原始信号小波包分解后的重构方法

  1. 可由小波包分解后,利用wprcoef(T,N)函数,对最后一层的小波包进行系数重构,得到与原始数据长度一样的重构小波包系数,然后将小波包系数相加,可以得到原始信号
  2. 可以使用write(T,‘cfs’,NODE,COEFS)函数,将小波包系数加入小波包分解树,然后利用wprec(T) 函数进行原始信号重构,即可得到原始信号

2.3 小波包去噪

2.3.1 [THR,SORH,KEEPAPP,CRIT] = ddencmp(IN1,IN2,X)

下面是小波去噪代码:

[thr,sorh,keepapp] = ddencmp('den','wv',x); [A,D] = dwt(x,'db1'); noiselev = median(abs(D))/0.6745; thresh = sqrt(2*log(length(x)))*noiselev; 

2.3.2 [XC,CXC,LXC,PERF0,PERFL2] = wdencmp(‘gbl’,X,‘wname’,N,THR,SORH,KEEPAPP)

[thr,sorh,keepapp] = ddencmp('den','wv',x); xd = wdencmp('gbl',x,'db3',2,thr,sorh,keepapp); subplot(211) plot(x); title('Original Signal'); subplot(212) plot(xd); title('Denoised Signal'); 

在这里插入图片描述

参考文献

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227479.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午9:13
下一篇 2026年3月16日 下午9:13


相关推荐

  • java 创建线程的三种方式、创建线程池的四种方式

    java 创建线程的三种方式、创建线程池的四种方式概要 java 创建线程的三种方式 继承 Thread 类创建线程类 实现 Runnable 接口 通过 Callable 和 Future 创建线程 java 创建线程池的四种方式 newCachedThr 创建一个可缓存的线程池 如果线程池长度超过处理需求 可灵活回收空闲线程 若无可回收 则新建线程 newFixedThre

    2026年3月26日
    1
  • oracle怎么递归查询,Oracle递归查询

    oracle怎么递归查询,Oracle递归查询有的情况下 我们需要用递归的方法整理数据 这才程序中很容易做到 但是在数据库中 用 SQL 语句怎么实现 下面我以最典型的树形结构来说明下如何在 Oracle 使用递归查询 为了说明方便 创建一张数据库表 用于存储一个简单的树形结构 Sql 代码 createtableT TREE IDNUMBER PIDNUMBER INDNUMBER NAMEVARCHAR2 32 create

    2026年3月16日
    1
  • Android程序员的年终总结「建议收藏」

    Android程序员的年终总结「建议收藏」欢迎您能进来,如果你也和我一样,对接下来的工作行情充满了太多的不确定性,那不妨停下您冲忙前进的脚步,和我一起重新刷新一下你自己的看法和规划吧!我的提问2019年Android真的还可以养活你自己? 2019年我的工作重心在哪一块? 2019年是继续留在原地做技术积累还是考虑跳槽? 对过去2018年的总结是否满意?我能做什么管理方向(天赋欠缺,暂不做讨论) 技术方向从An…

    2022年6月14日
    39
  • 06 Redis主从库的数据同步

    06 Redis主从库的数据同步06Redis 主从库的数据同步前言一 采用读写分离的原因二 主从库间进行第一次同步三 主从级联模式分担全量复制时的主库压力四 主从库间网络断开后的增量复制五 repl backlog buffer 环形缓冲区总结前言 Redis 具有高可靠性 数据尽量少丢失 AOF 和 RDB 保证 服务尽量少中断 增加副本冗余量 即使有一个实例出现了故障 需要过一段时间才能恢复 其他实例也可以对外提供服务 不会影响业务使用 Redis 的主从库模式 以保证数据副本的一致 主从库之间采用的是读写分离的方

    2026年3月19日
    2
  • pycharm console配置

    pycharm console配置1 pycharm 中 console 和 terminal 的区别原文链接 https blog csdn net article details Pycharm 的下方工具栏中有两个窗口 PythonConsol 和 Terminal 其中 PythonConsol 叫做 Python 控制台 即 Python 交互模式 Terminal 叫做终端 即命令行模

    2026年3月27日
    2
  • 此av非彼”AV”

    此av非彼”AV”作者:王亨 ,R语言中文社区专栏作者,跟着菜鸟一起一步步学习R语言,争做R语言高手。个人公众号:跟着菜鸟一起学R语言(微信ID:learn_R) 最近发现一个特别有意思的…

    2026年2月13日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号