学习笔记和链接
小波是定义在有限区间上且其平均值为零的一种函数。
【经典】小波与小波包、小波包分解与信号重构、小波包能量特征提取暨小波包分解后实现按频率大小分布重新排列(Matlab 程序详解)
整理后供参考
连续小波变换
【小波dwt和cwt使用方法】Matlab版本的dwt和cwt实例
【经典】matlab对函数进行多尺度连续小波变换(CWT)变换
matlab时频分析之连续小波变换cwt
CWT就是选一个中心频率,然后通过尺度变换得到一大堆中心频率,又通过时移得到一系列不同区间的基函数,分别和原始信号的某一段(对应基函数的区间)乘积再积分,产生的极值对应的频率就是原始信号这一区间含有的频率。
离散小波变换
MATLAB小波分解/重构wavedec/waverec函数中L和C的意义
load noisdopp;
s=noisdopp;
%通过db4小波基进行三尺度小波分解
[c,l]=wavedec(s,3,'db4');
a1=appcoef(c,l,'db4',1);
%提取尺度1的低频系数
a2=appcoef(c,l,'db4',2);
%提取尺度2的低频系数
a3=appcoef(c,l,'db4',3);
%提取尺度3的低频系数
figure(3);
subplot(321);plot(a1);title('尺度1的低频系数');
subplot(323);plot(a2);title('尺度2的低频系数');
subplot(325);plot(a3);title('尺度3的低频系数');
d1=detcoef(c,l,1);
d2=detcoef(c,l,2);
d3=detcoef(c,l,3);
figure(3);
subplot(322);plot(d1);title('尺度1的高频系数');
figure(3);subplot(324);plot(d2);title('尺度2的高频系数');
figure(3);subplot(326);plot(d2);title('尺度3的高频系数');
c1=[a3,d3,d2,d1];
s1=waverec(c1,l,'db4');
figure(4); plot(s1); title('重构信号');
err2=norm(s-s1);
%重构后误差为1.09E-09 (2 )高频置零后重建 当然,如果认为高频信息是不需要的时候,我们可以将高频信息置零后重构低频信息。
d3=zeros(1,length(d3));
d2=zeros(1,length(d2));
d1=zeros(1,length(d1));
c1=[a3,d3,d2,d1];
s1=waverec(c1,l,'db4');
figure(5);
subplot(211),plot(s);title('原始信号');
subplot(212),plot(s1),title('重构信号');
多分辨分析
小波包变换
小波包树分解和合并
load noisdopp;
t=wpdec(noisdopp,3,'dmey'); %对noisdopp采用dmey小波进行3层分解
plot(t);
t2 = wpjoin(t,[3;4;5;6]);%合并小波树[3;4;5;6]下的节点
plot(t2);
t3=wpsplt(t2,3); %将小波树的节点3进一步分解
plot(t3);
绘时间频率图
wpviewcf(t,1); %画出时间频率图,如图
获取最优小波包树
wpt=wpdec(noisdopp,4,'db1','shannon');
bt=besttree(wpt);
plot(bt);
获取小波包系数
cfs=wpcoef(t,[2 2]); % 获取小波树上某个节点{2,2]的小波包系数
figure;
subplot(211);
plot(x);
title('原始信号');
set(gca,'xlim',[1 1024]);
subplot(212);
plot(cfs);
title('节点(2,2)的系数');
set(gca,'xlim',[1 256]);
小波包重构
获取小波包系数后,可令部分为0,再重新组装回去,重构。
直接重构
clear all;
close all;
load noisdopp;
x=noisdopp;
wpt=wpdec(x,3,'db1','shannon');
y=wprec(wpt); %重构
figure;
plot(x-y); %误差曲线,误差非常小
max(abs(x-y))
set(gca,'xlim',[1 1024]);
修改系数后重构(MATLAB小波包的分解与重构(转载) )
t=wpdec(noisdopp,3,'db1');
t2 = wpjoin(t,[3;4;5;6]);
cfs3=wpcoef(t,3);
cfs4=wpcoef(t,4);
cfs5=wpcoef(t,5);
cfs6=wpcoef(t,6);
%修改细节系数
cfs4=zeros(1,size(cfs4,2));
cfs5=zeros(1,size(cfs5,2));
cfs6=zeros(1,size(cfs6,2));
% 重构
t3 = write(t2,'cfs',3,cfs3,'cfs',4,cfs4,'cfs',5,cfs5,'cfs',6,cfs6);
wave2=wprec(t3);
figure
subplot(211)
plot(noisdopp)
title('原始信号');
subplot(212)
plot(wave2)
title('重构信号');