代码:小波包分解与重构、小波包能量特征提取

1、小波变换的理解

傅里叶变换——短时傅里叶变换——小波变换。

参考文献:以下两篇参考资料讲述得十分清楚,有助于理解小波变换。

但具体的数学角度阐述,请参考其他资料。

(1)知乎专栏:形象易懂讲解算法I——小波变换

https://zhuanlan.zhihu.com/p/22450818

(2)知乎专栏:傅里叶分析之掐死教程。

https://zhuanlan.zhihu.com/p/19763358


2、小波包分解

小波包是为了克服小波分解在高频段的频率分辨率较差,而在低频段的时间分辨率较差的问题的基础上而提出的。

它是一种更精细的信号分析的方法,提高了信号的时域分辨率。

下面是两者的对比图:


3、能量谱

      基于小波包分解提取多尺度空间能量特征的原理是把不同分解尺度上的信号能量求解出来,将这些能量值按尺度顺序排列成特征向量供识别使用。

20180510补充更新:具体计算公式如下所示,本文中未使用重构后的系数进行能量值计算,直接使用小波包分解后的系数,参考文献《基于小波包能量特征的滚动轴承故障监测方法 》。


4、Matlab代码

给出两部分代码,写成两个函数。一个是小波包分解与重构,另一个是能量谱函数。

下载地址:https://download.csdn.net/download/ckzhb/10030651

代码名称:wavelet_packetdecomposition_reconstruct

function wpt= wavelet_packetdecomposition_reconstruct( x,n,wpname )
%% 对信号进行小波包分解,得到节点的小波包系数。然后对每个节点系数进行重构。 
% Decompose x at depth n with wpname wavelet packets.using Shannon entropy.
%   
%  x-input signal,列向量。
%  n-the number of decomposition layers
%  wpname-a particular wavelet.type:string.
%
%Author hubery_zhang
%Date 20170714

%%
wpt=wpdec(x,n,wpname);
% Plot wavelet packet tree (binary tree)
plot(wpt)
%% wavelet packet coefficients.default:use the front 4.
cfs0=wpcoef(wpt,[n 0]);
cfs1=wpcoef(wpt,[n 1]);
cfs2=wpcoef(wpt,[n 2]);
cfs3=wpcoef(wpt,[n 3]);
figure;
subplot(5,1,1);
plot(x);
title('原始信号');
subplot(5,1,2);
plot(cfs0);
title(['结点 ',num2str(n) '  1',' 系数'])
subplot(5,1,3);
plot(cfs1);
title(['结点 ',num2str(n) '  2',' 系数'])
subplot(5,1,4);
plot(cfs2);
title(['结点 ',num2str(n) '  3',' 系数'])
subplot(5,1,5);
plot(cfs3);
title(['结点 ',num2str(n) '  4',' 系数'])
%% reconstruct wavelet packet coefficients.
rex0=wprcoef(wpt,[n 0]);
rex1=wprcoef(wpt,[n 1]);
rex2=wprcoef(wpt,[n 2]);
rex3=wprcoef(wpt,[n 3]);
figure;
subplot(5,1,1);
plot(x);
title('原始信号');
subplot(5,1,2);
plot(rex0);
title(['重构结点 ',num2str(n) '  1',' 系数'])
subplot(5,1,3);
plot(rex1);
title(['重构结点 ',num2str(n) '  2',' 系数'])
subplot(5,1,4);
plot(rex2);
title(['重构结点 ',num2str(n) '  3',' 系数'])
subplot(5,1,5);
plot(rex3);
title(['重构结点 ',num2str(n) '  4',' 系数'])
end


代码名称:wavelet_energy_spectrum

function E = wavelet_energy_spectrum( wpt,n )
%% 计算每一层每一个节点的能量
%  wpt-wavelet packet tree
%  n-第n层能量
% 
% Author hubery_zhang
% Date  20170714

%%
% 求第n层第i个节点的系数
E(1:2^n )=0;
for i=1:2^n 
E(i) = norm(wpcoef(wpt,[n,i-1]),2)^2; %20180604更新 原代码:E(i) = norm(wpcoef(wpt,[n,i-1]),2)
end
%求每个节点的概率
E_total=sum(E); 
for i=1:2^n
p_node(i)= 100*E(i)/E_total;
end
% E = wenergy(wpt); only get the last layer
figure;
x=1:2^n;
bar(x,p_node);
title(['第',num2str(n),'层']);
axis([0 2^n 0 100]);
xlabel('结点');
ylabel('能量百分比/%');
for j=1:2^n
text(x(j),p_node(i),num2str(p_node(j),'%0.2f'),...
    'HorizontalAlignment','center',...
    'VerticalAlignment','bottom')
end

end



在MATLAB编程环境中,小波包分析(Wavelet Packet Analysis, WPA)是一种强大的信号处理工具,它扩展了传统小波分析的能力,提供了更精细的时间-频率分辨率。这两个MATLAB函数,`wavelet_packet_decomposition_reconstruct.m` 和 `wavelet_energy_spectrum.m`,分别涉及小波包分解重构以及能量计算,对于理解和分析非平稳信号非常有用。 1. **小波包分解**: 小波包分解是将输入信号分解为不同频带的细节(Detail)和近似(Approximation)系数的过程。它通过一系列的小波基函数对信号进行多层次的分解,每层分解都对应不同的频率范围。在`wavelet_packet_decomposition_reconstruct.m`函数中,可能包含了选择合适小波基,设置分解层次,以及执行分解和重构的步骤。用户可以根据需要调整这些参数来适应不同信号的特点。 2. **小波包重构**: 一旦进行了小波包分解,原始信号可以通过逆变换从小波包系数中恢复,即小波包重构。这个过程对于理解信号在不同时间-频率尺度上的结构至关重要,特别是在数据压缩、噪声去除、特征提取等领域。 3. **能量**: `wavelet_energy_spectrum.m`函数涉及到能量的计算,这通常用于揭示信号的能量分布情况。在信号分析中,能量能提供关于信号强度随频率变化的信息。通过小波包分解能量可以被分配到不同的频带,进而分析各频带的能量贡献,这对于识别信号的特征频率或异常部分非常有用。 4. **能量特征提取**: 这两个函数的结合使得能量特征提取成为可能。在信号处理中,能量特征常用于表征信号的强度或稳定性。例如,在语音识别、图像处理或生物医学信号分析中,能量特征可以帮助区分不同的信号类别,或检测信号的变化。 5. **MATLAB实现**: MATLAB以其丰富的信号处理工具箱而闻名,这两个函数可能利用了其中的`wavelet`或者`wavedec2`等函数来实现小波包分解,以及`idwt2`来进行重构。同时,`spec`或`pwelch`函数可能用于计算能量。 这两个MATLAB函数提供了一个实用的平台,可以对复杂信号进行深入的时间-频率分析,从而提取其关键的能源特性。通过小波包分解重构,用户能够洞察信号的内在结构,而能量则帮助量化这些结构的强度。在科研和工程应用中,这样的工具对于理解和处理非线性、非平稳信号具有重要意义。
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值