小波包变换

小波变换:https://blog.csdn.net/cqfdcw/article/details/84995904

1.小波变换

常用小波基有Haar小波、Daubechies(dbN)小波、Mexican Hat(mexh)小波、Morlet小波、Meyer小波等。

%matlab code
clc
clear
close all
load test_data
%小波边换
Fs = 256;
[t]=wpdec(test_data,3,'db4');  %小波包分解,3代表分解3层,'dmey'使用meyr小波
plot(t)               %画小波包树图
wpviewcf(t,1);        %画出时间频率图

小波包树(已采样率256Hz为例):
我们的数据的是256Hz的采样频率。
我们的采样频率是256Hz,根据采样定理,奈奎斯特采样频率是128Hz,我们分解了3层,最后一层就是 2^3=8个频率段,每个频率段的频率区间是 128/8=16Hz
在这里插入图片描述

小波变换将现有的信号向下分解时,将信号转化为低频部分和高频部分(细节部分),但是小波变换只将信号的低频部分进一步分解,而对高频部分不再继续分解,所以小波变换能够很好地表征一大类以低频信息为主要成分的信号,不能很好地分解和表示包含大量细节信息(细小边缘或纹理)的信号,如非平稳机械振动信号、遥感图象、地震信号和生物医学信号等。小波包变换不仅对低频部分进行分解,对高频部分也进行分解,如上图,当是小波变换的时候,只将黑色的连接线(低频部分)进行分解,红色的连接线(高频部分)不进行分解,当用小波包进行变换的时候,不管是黑色的连接线(低频部分)还是红色的连接线(高频部分)都进行分解。

第一行将采样频率进行2等分, 第二行将采样频率进行4等分,第N行将采样频率进行2^N等分;
节点的命名规则:(0,0)表示原始信号,从(1,0)开始,叫1号, (1,1)是2号………依此类推,(3,0)是7号,(3,7)是14号。
在这里插入图片描述
MATLAB输出的小波包树,可以通过点击节点可以在右边的数据显示区显示波形,以供用户查看。

2.小波包分解系数

小波变换的实质是:原信号与小波基函数的相似性。小波系数就是小波基函数与原信号相似的系数

3.信号分解与重构

3.1 wpjoin read write wprec 信号分解与重构

实现对任意节点系数选择进行组合重构

%MATLAB code
t2 = wpjoin(t,[3;4;5;6]);% wpjoin 重新组合小波包
% 将小波包树的第二行的四个节点收起来,也就是让第二行的节点变为树的最底层节点。因为第一行中小波包树 
% 的节点个数是第一层2个,第二层4个,第三层8个。现在t2就是将第三层的节点再聚合回第二层。
% wpjoin是必要的,write函数对最底层的节点操作。如果没有这一句,我们只能对最底层(第三层)的小波
% 包系数进行修改,而wpjoin将第三层的数据聚合回到第二层,现在第二层就是最底层,所以才能用write对
% 其进行操作
sNod = read(t,'sizes',[3,4,5,6]);
% 读取第二层3,4,5,6节点系数的大小
cfs3=wpcoef(t,3);% 读取第3个节点的小波系数
cfs3  = zeros(sNod(1,:));
cfs4  = zeros(sNod(2,:));
cfs5  = zeros(sNod(3,:));
cfs6  = zeros(sNod(4,:));
t3 = write(t2,'cfs',5,cfs5,'cfs',4,cfs4,'cfs',3,cfs3,'cfs',6,cfs6);
%将5,6节点的小波系数置位0,就行将节点5,6对应的频率剔除掉
wave2=wprec(t3);%  wprec 一维小波包重构   重构的数据
figure
plot(wave2)

结果图
原始数据图:
在这里插入图片描述重构之后的数据:在这里插入图片描述
t3 = write(t2,‘cfs’,5,cfs5,‘cfs’,4,cfs4,‘cfs’,3,cfs3,‘cfs’,6,cfs6);
因为将节点3,4,5,6(完美的一层)节点的小波系数均置位零了,与小波基函数相似度为零,就是摒弃了所有的频率的数据,所以重构之后的波形就是常数,可以用来进行数据的滤波
在这里插入图片描述

t3 = write(t2,‘cfs’,5,cfs5,‘cfs’,6,cfs6,‘cfs’,4,cfs4);
因为将节点4,5,6节点的小波系数均置位零了,与小波基函数相似度为零,就是摒弃了高频的数据,所以重构之后的波形只包含低频的数据,可以用来进行数据的滤波

3.2 对节点小波系数的打印输出

只能对某一节点信号系数分别进行重构

%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

在这里插入图片描述
小波系数节点存储排序是 [1,2,4,3,7,8,5,6] (一种格雷码排序),上图一共有两行,第一行是直接绘制的,频率是乱的,没有按照频率的大小排列,绘制的节点排列是 [7,8,10,9,13,14,11,12] ,使用 wpfrqord 对节点重新排序,在第二行中重新绘制。

4小波包分解------能量特征提取

4.1方法1

%能量特征提取
for i = 1 : 8
cfs3_floor(i,:)=wpcoef(wpt,nodes_ord(i));  %对重排序后第3层i节点的小波包系数0-8Hz
E_cfs3_floor(i)=norm(cfs3_floor(i,:),2)^2;  %% 1-范数:就是norm(...,1),即各元素绝对值之和;2-范数:就是norm(...,2),即各元素平方和开根号;求每个节点的频段能量
end

E_total_3_floor=sum(E_cfs3_floor);
for  i = 1 : 8
p_node(i)= 100*E_cfs3_floor(i)/E_total_3_floor;           % 求得每个节点的占比
end

figure;
x=1:8;
bar(x,p_node);
title('各个频段能量所占的比例');
xlabel('第三层节点号');
ylabel('能量百分比/%');
for j=1:8
text(x(j),p_node(j),num2str(p_node(j),'%0.2f'),...
    'HorizontalAlignment','center',...
    'VerticalAlignment','bottom')
end

在这里插入图片描述

4.2方法2

MATLAB自带函数 ==wenergy(wpt) == 但是该函数只能对最底层节点进行能量提取。

  • 14
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值