?? xiaoboshipinfenxi.txt
字號:
小波時頻(尺度)圖的繪制原理與實現
應廣大版友的需要,下面將介紹小波時頻(尺度)圖的繪制原理,并舉例加以說明。
-、繪制原理
1.需要用到的小波工具箱中的三個函數
COEFS = cwt(S,SCALES,'wname')
說明:該函數能實現連續小波變換,其中S為輸入信號,SCALES為尺度,wname為小波名稱。
FREQ = centfrq('wname')
說明:該函數能求出以wname命名的母小波的中心頻率。
F = scal2frq(A,'wname',DELTA)
說明:該函數能將尺度轉換為實際頻率,其中A為尺度,wname為小波名稱,DELTA為采樣周期。
注:這三個函數還有其它格式,具體可參閱matlab的幫助文檔。
2.尺度與頻率之間的關系
設a為尺度,fs為采樣頻率,Fc為小波中心頻率,則a對應的實際頻率Fa為
Fa=Fc×fs/a (1)
顯然,為使小波尺度圖的頻率范圍為(0,fs/2),尺度范圍應為(2*Fc,inf),其中inf表示為無窮大。在實際應用中,只需取尺度足夠大即可。
3.尺度序列的確定
由式(1)可以看出,為使轉換后的頻率序列是一等差序列,尺度序列必須取為以下形式:
c/totalscal,...,c/(totalscal-1),c/4,c/2,c (2)
其中,totalscal是對信號進行小波變換時所用尺度序列的長度(通常需要預先設定好),c為一常數。
下面講講c的求法。
根據式(1)容易看出,尺度c/totalscal所對應的實際頻率應為fs/2,于是可得
c=2×Fc/totalscal (3)
將式(3)代入式(2)便得到了所需的尺度序列。
4.時頻圖的繪制
確定了小波基和尺度后,就可以用cwt求小波系數coefs(系數是復數時要取模),然后用scal2frq將尺度序列轉換為實際頻率序列f,
最后結合時間序列t,用imagesc(t,f,abs(coefs))便能畫出小波時頻圖。
注意:直接將尺度序列取為等差序列,例如1:1:64,將只能得到正確的尺度-時間-小波系數圖,而無法將其轉換為頻率-時間-小波系數圖。這是因為此時的頻率間隔不為常數。
此時,可通過查表的方法將尺度轉化為頻率或直接修改尺度軸標注。同理,利用本帖所介紹的方法只能得到頻率-時間-小波系數圖,不能得到正確的尺度-時間-小波系數圖。
二、應用例子
下面給出一實際例子來說明小波時頻圖的繪制。所取仿真信號是由頻率分別為100Hz和200Hz的兩個正弦分量所合成的信號。
clear;
clc;
fs=1024; %采樣頻率
f1=100;
f2=200;
t=0:1/fs:1;
s=sin(2*pi*f1*t)+sin(2*pi*f2*t); %兩個不同頻率正弦信號合成的仿真信號
%%%%%%%%%%%%%%%%%小波時頻圖繪制%%%%%%%%%%%%%%%%%%
wavename='cmor3-3';
totalscal=256; %尺度序列的長度,即scal的長度
wcf=centfrq(wavename); %小波的中心頻率
cparam=2*wcf*totalscal; %為得到合適的尺度所求出的參數
a=totalscal:-1:1;
scal=cparam./a; %得到各個尺度,以使轉換得到頻率序列為等差序列
coefs=cwt(s,scal,wavename); %得到小波系數
f=scal2frq(scal,wavename,1/fs); %將尺度轉換為頻率
imagesc(t,f,abs(coefs)); %繪制色譜圖
colorbar;
xlabel('時間 t/s');
ylabel('頻率 f/Hz');
title('小波時頻圖');
程序運行結果如下:
說明:(1)應用時只須改變wavename和totalscal兩個參數即可。
(2)在這個例子中,最好選用復的morlet小波,其它小波的分析效果不好,而且morlet小波的帶寬參數和中心頻率取得越大,時頻圖上反映的時頻聚集性越好。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -