小波包分解一例

     說到小波,真是痛苦,記得上小波分析這門課的時候,聽的是一頭霧水,都是說小波是繼傅里葉變換後又一重大發現,小波的論文快是被學術界寫爛了,但是工作了才發現小波真的是應用的少之又少,還是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

 

 

 

 

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