小波包分解一例

     说到小波,真是痛苦,记得上小波分析这门课的时候,听的是一头雾水,都是说小波是继傅里叶变换后又一重大发现,小波的论文快是被学术界写烂了,但是工作了才发现小波真的是应用的少之又少,还是15年七八月份的事,应用研究了下,现在想想,真是快万忘了。推荐一本书不错:MATLAB 6.5 辅助小波分析与应用 飞思科技.pdf.不是讲理论,而是直接将怎么用的。下载链接:

拿一组波形示意如下:对此进行6层小波分解:计算得到的小波频带能量分布图如下:

由此便可看不信号的频率成分是在哪些频带部分的。感觉无非是比滤波器方便了些;其他并不感觉有什么特殊用处;

附:计算程序如下

 

function EE = xiaobobao_db10_fenjie( x,n )
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here
% n=7;%分解层数
wpt=wpdec(x,n,'db10','shannon');%小波基
% wpviewcf(wpt,1);%顺序
%二进制与格雷码对应顺序,是从0000开始的,先减1再与高位异或,结果才对
y=zeros(2^n,length(x));
for i=1:2^n
    q=num2gray(i-1,n);%.y[1]与0000对应
%   disp(['顺序为:',num2str(q)]);
    y(i,:)=wprcoef(wpt,[n,q]);
end
%求能量
E=zeros(1,2^n);%
for j=1:2^n
%     E(j)=nengliang(y(j,:));
    E(j)=sum(y(j,:).^2);
end
% %求总能量
E_total=sum(E); %求总能量
%能量归一化
EE=zeros(1,2^n);
for k=1:2^n
    EE(k)=E(k)/E_total;
end
% figure,bar(EE);title(['信号频带能量分布-层数',num2str(n)]);

end

 

 

function c=num2gray(a,L)
%将十进制数转化为格雷码,小波包分解时用,便于重新排列顺序
b=dec2bin(a,L);%L=4,8...
 c(1)=b(1);
for i=1:L-1
    m=bin2dec(b(i));
    n=bin2dec(b(i+1));
    c(i+1)=dec2bin(xor(m,n));
end
c=bin2dec(c);%对于的格雷码的十进制表示
end

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章