- 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