![]() 小波包分解主要用了这四个函数 wpdec,wprec,wprcoef,wpcoef。 1)Wpcoef:求解某个节点的小波包系数,数据长度是L/(2^n)(n表示分解的层数) 比如:原始信号长度为1024,经过3层分解,则使用cfs=wpcoef(wpt,[3 0])得到128个数据点,用以描述原始信号的近似低频信息。 具体代码如下: clc; % clear all; close all; load noisdopp; x = noisdopp; % Decompose x at depth 3 with db1 wavelet packets % using Shannon entropy. wpt = wpdec(x,3,'db1'); plot(wpt); % Plot wavelet packet tree wpt. cfs = wpcoef(wpt,[3 0]); figure; subplot(211); plot(x); title('Original signal'); subplot(212); plot(cfs); title('Packet (3,0) coefficients'); 运行效果图如下所示: ![]() 原始信号长度为1024,经过3层分解后,原始信号的近似信号长度为128。但是,为什么c(3,0)包数据的幅值会比原始信号大,后面会作具体研究。 2)Wprcoef: 把某个节点的小波包系数重构,得到的是和原信号一样长度的信号。 具体代码如下: % clear all; close all; load noisdopp; x = noisdopp; % Decompose x at depth 3 with db1 wavelet packets % using Shannon entropy. t = wpdec(x,3,'db1','shannon'); plot(t); % Plot wavelet packet tree. rcfs = wprcoef(t,[3 0]); figure(2); subplot(311); plot(x); title('Original signal'); subplot(312); plot(rcfs); title('Reconstructed packet 3,0)'); 运行效果图如下所示: ![]() 原始信号长度为1024,使用rcfs = wprcoef(t,[3 0])得到的近似信号长度为1024,不同于cfs = wpcoef(wpt,[3 0])。 3)分析wprcoef与wpcoef的异同 在本例中,原始信号长度为1024。使用wprcoef得到rcfs,其长度为1024;而使用wpcoef得到cfs,其长度为128。 为了方便显示,将上述组数据导入LabVIEW软件,通过波形图直观地查看这几组数据之间的区别。 将上述原始信号,rcfs,cfs信号存至Excel中,则使用如下命令: >> xlswrite('C:\compare.xls',noisdopp','sheet1','A1'); >> xlswrite('C:\compare.xls',rcfs','sheet1','B1'); >> xlswrite('C:\compare.xls',cfs','sheet1','C1'); 在LabVIEW软件中使用Report Generation Toolkit导入这三组数据,分别命令:original data,rcfs data,cfs data。![]() ![]() 在上图中,将cfs data和rcfs data(div8)作商,得到的商的值均为2.82843(恒值)。 结论: wprcoef和wpcoef使用不同的方式对原始信号做小波包分解,均可实现对原始信号的分解,某一个节点处的信号的提取。 不同的是使用wprcoef得到rcfs,其长度为1024;而使用wpcoef得到cfs,其长度为128。将rcfs信号作8分频,其大致曲线一致,只是幅值不同。 疑问: 为什么使用cfs = wpcoef(wpt,[3 0])得到的分解信号,相对于原始信号,其幅值均增加至原始幅值的2.82843倍,有待进一步研究。 附录:几组信号的实际数据对比图: ![]() |


雷达卡









京公网安备 11010802022788号







