小波包分解python代码(小波包分解算法)

  • 1、python如何实现类似matlab的小波滤波?
  • 2、急求用matlab编小波包3级分解及输出其系数的程序,那位高手帮助我一下,将不胜感激,先谢谢啦!
  • 3、最佳小波包分解层数的获取
  • 4、怎么用matlab小波包分解
  • 5、小波包分解
  • 6、matlab中获得小波树的末层结点

T=wpdec(y,5,’db40′);

%信号y进行波包解层数5T波树plot看

a10=wprcoef(T,[1,0]);

%a10节点[1,0]进行重构信号貌似没层重构说吧能某层某节点进行重构节点编号波树

%以下为滤波程序(主要调节参数c的大小)

c=10;

wn=0.1;

fs=50000; %采样频率;

b=fir1(c,wn/(fs/2),hamming(c+1));

y1=filtfilt(b,1,y);%对y滤波。

load ir; %将信号装入MATLAB工作环境

s=X106_BA_time(1:1000); %取采样信号的前1~1000个采样点

is=length(s); %计算采样序列长度

subplot(321);plot(s);title(‘原始信号’);%画出原始信号波形

xlabel(‘样本序列号’);

ylabel(‘幅值A’);

wpt=wpdec(s,3,’db1′,’shannon’);% 用db1小波包对信号x3层分解,用shannon熵作为熵标准

plot(wpt);%绘制小波包树

N=allnodes(wpt);% 计算小波包分解树的结点

%提取各节点的小波包系数

for i=1:length(N)

X=wpcoef(wpt,i-1);

subplot(floor((length(N)+1)/2),2,i);plot(X);

title([‘节点’,num2str(i) ‘的小波包系数’]);

end

figure;

%各节点小波包重构系数

for i=1:length(N)

rcfs=wprcoef(wpt,i-1);

subplot(floor((length(N)+1)/2),2,i);plot(rcfs);

title([‘重构节点’,num2str(i) ‘小波包系数’]);

end

因为小波包分解高频系数的奇异值在每一分解层都不同,即分解层数的变化会引起奇异值的变化,因此,可以通过分析奇异值变化规律来确定分解层数。定义一个判定函数C(r,k),用其函数值的变化来表征小波包分解每层信息的变化,设C(r,k)函数为

高光谱遥感影像信息提取技术

式中:r为特征矩阵维数;k为正整数。

通过大量的实验分析,表明小波包的分解层数与各层数对应C(r,k)函数值的变化存在一定的内在联系。随着各层C(r,k)函数值的变化,有用信号和噪声的比值也发生着显著的变化。当在某分解层处C(r,k)的函数值到达某一程度时,这就使目标地物更好地分离出来,而使噪声减弱,这样就可以确定最佳分解层数。

在AVIRIS实验数据1~9层的小波包分解中,根据高频系数矩阵分别计算出各层处C(r,k)函数值。随着分解层数的增加,其C(r,k)函数值在不断减小,其变化率也发生着显著变化。图4.6显示了各分解层数下的C(r,k)函数值的实际变化趋势和这种趋势变化所反演的回归函数曲线,其回归曲线方程采用接近C(r,k)函数值变化趋势的最低次多项式函数来表示。从图4.6上可以看出,两条曲线非常接近地重合在一起,说明了回归函数曲线能很好地表征C(r,k)的变化特征。

根据各分解层下离散的C(r,k)函数值,找出最接近其变化趋势的最低次多项式回归函数方程y(x):

高光谱遥感影像信息提取技术

然后求解方程y(x)的二阶导数y″(x),即找出曲线拐点的位置,此点位置就代表着小波包分解的最佳分解层数。在表4.1中,可以看到在分解层数达到5层时,y″(x)的值开始从负值变为正值,说明y″(x)在第4层和第5层之间有拐点,从而确认第四层为最佳分解层数。

图4.6 基于影像AVIRIS的判定函数C(r,k)值变化曲线和回归函数曲线

表4.1 高光谱影像AVIRIS不同小波包分解层的SVD特征值分析

小波图像去噪的方法大概分为3类

1:基于小波变换摸极大值原理

2:基于小波变换系数的相关性

3:基于小波阈值的去噪。

基于小波阈值的去噪方法3个步骤:

1:

计算含噪声图像的小波变换。选择合适的小波基和小波分解层数j,运用matlab

分解算法将含有噪声图像进行j层小波分解,得到相应的小波分解系数。

2:对分解后的高频系数进行阈值量化,对于从1

到j的每一层,选择一个适当的阈值和合适的阈值函数,将分解得到的高频系数进行阈值量化,得到估计小波系数。

3:进行小波逆变化,根据图像小波分解后的第j层,低频

系数(尺度系数)和经过阈值量化处理的各层高频系数(小波系数),运用matlab重构算法进行小波重构,得到去噪后的图像。

1.装载信号

在MATLAB命令行中输入

load noisbloc

s=noisbloc(1:1024);

ls=length(s);

plot(s);

2.完成信号的单尺度一维离散小波分解

采用db4基本小波分解信号

在命令窗口中输入

[cA1,cD1]=dwt(s,’db4′);

这就产生了低频系数cA1和高频系数cD1。

可以通过whos命令查看cA1和cD1的长度:

whos

Name Size Bytes Class

cA1 1×515 4120 double array

cD1 1×515 4120 double array

ls 1×1 8 double array

noisbloc 1×1024 8192 double array

s 1×1024 8192 double array

Grand total is 3079 elements using 24632 bytes

3.从系数中重构低频部分和高频部分

从第二步产生的系数cA1和cD1构造第一层的低频和高频(A1和D1)系数;

A1=upcoef(‘a’,cA1,’db4′,1,ls);

D1=upcoef(‘a’,cD1,’db4′,1,ls);

或用下面两个函数:

A1=idwt(cA1,[],’db4′,ls);

D1=idwt(cD1,[],’db4′,ls);

4.显示高频和低频部分

为了显示第一层分解结果,输入

subplot(211); plot(A1); title(‘低频A1’);

subplot(212); plot(D1); title(‘低频D1’);

5.由小波逆变换恢复信号

使用idwt函数很容易实现,在命令窗口输入

subplot(211); plot(s); title(‘原始信号’);

subplot(212); plot(A0); title(‘重构信号’);

6.多层一维分解

为了完成一个5层的分解,输入:

[C,L]=wavedec(s,5,’db4′);

7.提取系数的低频和高频部分

为了从上面的C中提取第3层的低频系数,输入:

cA3=appcoef(C,L,’db4′,3);

8.重构第3层的低频系数

为了从上面的C中重构第3层的低频系数,输入:

A3=wrcoef(‘a’,C,L,’db4′,3);

9.重构第1、2、3、4、5层的高频信号

其方法是:

cA5=appcoef(C,L,’db4′,5);

A5=wrcoef(‘a’,C,L,’db4′,5);

D1=wrcoef(‘d’,C,L,’db4′,1);

D2=wrcoef(‘d’,C,L,’db4′,2);

D3=wrcoef(‘d’,C,L,’db4′,3);

D4=wrcoef(‘d’,C,L,’db4′,4);

D5=wrcoef(‘d’,C,L,’db4′,5);

下面显示多尺度一维分解的结果:

subplot(322); plot(D1); title(‘低频D1’);

subplot(323); plot(D2); title(‘低频D2’);

subplot(323); plot(D3); title(‘低频D3’);

subplot(325); plot(A5); title(‘低频D4’);

subplot(326); plot(A5); title(‘低频D5’);

10.重构原始信号并显示

A0=waverec(C,L,’db4′);

subplot(311); plot(s); title(‘原始信号’);

subplot(312); plot(A0); title(‘重构信号’);

subplot(313); plot(s-A0); title(‘误差信号’);

第一行:将wave 用 meyr小波进行3层小波包分解,获得一个小波包树 t

第二行:将小波包树的第二行的四个节点收起来,也就是让第二行的节点变为树的最底层节点。因为第一行中小 波包树的节点个数是 第一层2个,第二层4个,第三层8个。现在将t2就是将第三层的节点再聚合回第二 层。

第三行:读取第二层四个节点系数的size

第四~七行:将所有四个节点的小波包系数变为0

第八行:将四个节点的系数重组到t3小波树中。

第九行:对t3小波树进行重构,获得信号wave2

原创文章,作者:M25A1,如若转载,请注明出处:https://www.506064.com/n/126994.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
M25A1M25A1
上一篇 2024-10-03 23:13
下一篇 2024-10-03 23:13

相关推荐

  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python字符串宽度不限制怎么打代码

    本文将为大家详细介绍Python字符串宽度不限制时如何打代码的几个方面。 一、保持代码风格的统一 在Python字符串宽度不限制的情况下,我们可以写出很长很长的一行代码。但是,为了…

    编程 2025-04-29
  • Python基础代码用法介绍

    本文将从多个方面对Python基础代码进行解析和详细阐述,力求让读者深刻理解Python基础代码。通过本文的学习,相信大家对Python的学习和应用会更加轻松和高效。 一、变量和数…

    编程 2025-04-29
  • Python小波分解入门指南

    本文将介绍Python小波分解的概念、基本原理和实现方法,帮助初学者掌握相关技能。 一、小波变换概述 小波分解是一种广泛应用于数字信号处理和图像处理的方法,可以将信号分解成多个具有…

    编程 2025-04-29
  • Python实现爬楼梯算法

    本文介绍使用Python实现爬楼梯算法,该算法用于计算一个人爬n级楼梯有多少种不同的方法。 有一楼梯,小明可以一次走一步、两步或三步。请问小明爬上第 n 级楼梯有多少种不同的爬楼梯…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 仓库管理系统代码设计Python

    这篇文章将详细探讨如何设计一个基于Python的仓库管理系统。 一、基本需求 在着手设计之前,我们首先需要确定仓库管理系统的基本需求。 我们可以将需求分为以下几个方面: 1、库存管…

    编程 2025-04-29
  • Python满天星代码:让编程变得更加简单

    本文将从多个方面详细阐述Python满天星代码,为大家介绍它的优点以及如何在编程中使用。无论是刚刚接触编程还是资深程序员,都能从中获得一定的收获。 一、简介 Python满天星代码…

    编程 2025-04-29
  • 写代码新手教程

    本文将从语言选择、学习方法、编码规范以及常见问题解答等多个方面,为编程新手提供实用、简明的教程。 一、语言选择 作为编程新手,选择一门编程语言是很关键的一步。以下是几个有代表性的编…

    编程 2025-04-29

发表回复

登录后才能评论