clc;
clear;
% 加载信号
load noisdopp;
s = noisdopp;
subplot(321);plot(s);title('原始信号');
%%
[thr,sorh,deepapp,crit]=ddencmp('den','wp',s);
[x,~,~,~]=wpdencmp(s,sorh,3,'sym6',crit,thr,deepapp);
subplot(322);plot(x);title('信号(3层)');
%%
[thr,sorh,deepapp,crit]=ddencmp('den','wp',s);
[x1,~,~,~]=wpdencmp(s,sorh,4,'sym6',crit,thr,deepapp);
subplot(323);plot(x1);title('信号(4层)');
%%
[thr,sorh,deepapp,crit]=ddencmp('den','wp',s);
[x2,~,~,~]=wpdencmp(s,sorh,5,'sym6',crit,thr,deepapp);
subplot(324);plot(x2);title('信号(5层)');
%%
[thr,sorh,deepapp,crit]=ddencmp('den','wp',s);
[x3,~,~,~]=wpdencmp(s,sorh,8,'sym6',crit,thr,deepapp);
subplot(325);plot(x3);title('(8层)');
%MATLAB code
x=test_data;
fs=256;
N=length(x); %采样点个数
t=wpdec(test_data,3,'db4'); %小波包分解,3代表分解3层,'dmey'使用meyr小波
for i=0:7
rex3(:,i+1)=wprcoef(t,[3,i]); %实现对节点小波节点进行重构
end
% 在小波包节点的频谱划分“不是严格按照上述理解的顺序排列的”(一种格雷编码排序),
% 要解决这个问题我们需要对节点顺序进行重新编码排序。
figure; %绘制第3层各个节点分别重构后信号的频谱
for i=0:7
subplot(2,8,i+1);
x_sign=rex3(:,i+1);
N=length(x_sign); %采样点个数
signalFFT=abs(fft(x_sign,N));%真实的幅值
Y=2*signalFFT/N;
f=(0:N/2)*(Fs/N);
plot(f,Y(1:N/2+1));
title(['第3层',num2str(i),'节点频谱']);
end
% 重新编码排序
nodes=[7;8;9;10;11;12;13;14]; %第3层的节点号
ord=wpfrqord(nodes); %小波包系数重排,ord是重排后小波包系数索引构成的矩阵 如3层分解的[1;2;4;3;7;8;6;5]
nodes_ord=nodes(ord); %重排后的小波系数
for i=1:8
rex3(:,i)=wprcoef(wpt,nodes_ord(i)); %实现对节点小波节点进行重构
end
for i=0:7
subplot(2,8,i+9);
x_sign= rex3(:,i+1);
N=length(x_sign); %采样点个数
signalFFT=abs(fft(x_sign,N));%真实的幅值
Y=2*signalFFT/N;
f=(0:N/2)*(fs/N);
plot(f,Y(1:N/2+1));
title(['第3层',num2str(i),'节点频谱']);
end