小波變換時頻圖繪製

繪製原理:

需要用到的小波工具箱中的三個函數cwt(),centfrq(),scal2frq()

COEFS = cwt(S,SCALES,'wname')

該函數實現連續小波變換,其中S爲輸入信號,SCALES爲尺度,wname爲小波名稱

FREQ = centfrq('wname')

該函數求以wname命名的母小波的中心頻率。

F = scal2frq(A,'wname',DELTA)

該函數能將尺度轉換爲實際頻率,其中A爲尺度,wname爲小波名稱,DELTA爲採樣週期。
尺度與頻率之間的關係

設a爲尺度,fs爲採樣頻率,Fc爲小波中心頻率,則a對應的實際頻率Fa爲
Fa=Fc* fs/a,顯然,根據採樣定理,爲使小波尺度圖的頻率範圍爲(0,fs/2),尺度範圍應爲(2*Fc,inf),其中inf表示爲無窮大。在實際應用中,只需取尺度足夠大即可。
尺度序列的確定

由上式可以看出,爲使轉換後的頻率序列是一等差序列,尺度序列必須取爲以下形式: c/totalscal, c/(totalscal-1), …,c/2,c 其中,totalscal是對信號進行小波變換時所用尺度序列的長度(通常需要預先設定好),c爲一常數。 而尺度c/totalscal所對應的實際頻率應爲fs/2,於是可得 c=2Fctotalscal 於是可得到所需的尺度序列。

時頻圖的繪製

確定了小波基和尺度後,就可以用cwt求小波係數coefs(係數是複數時要取模),然後用scal2frq將尺度序列轉換爲實際頻率序列f,最後結合時間序列t,用imagesc(t,f,abs(coefs))便能畫出小波時頻圖。

二、應用例子

下面給出一實際例子來說明小波時頻圖的繪製。所取仿真信號是由頻率分別爲50Hz和100Hz的兩個正弦分量所合成的信號

  % 小波時頻分析
    clc
    clear all
    close all
    % 原始信號
    fs=1000;
    f1=50;
    f2=100;
    t=0:1/fs:1;
    s=sin(2*pi*f1*t)+sin(2*pi*f2*t);
    figure
    plot(t, s)
    % 連續小波變換
    wavename='cmor3-3';
    totalscal=256;
    Fc=centfrq(wavename); % 小波的中心頻率
    c=2*Fc*totalscal;
    scals=c./(1:totalscal);
    f=scal2frq(scals,wavename,1/fs); % 將尺度轉換爲頻率
    coefs=cwt(s,scals,wavename); % 求連續小波係數
    figure
    imagesc(t,f,abs(coefs));
    set(gca,'YDir','normal')
    colorbar;
    xlabel('時間 t/s');
    ylabel('頻率 f/Hz');
    title('小波時頻圖');

在這裏插入圖片描述
在這裏插入圖片描述

說明:
在這個例子中,最好選用復的morlet小波,其它小波的分析效果不好,而且morlet小波的帶寬參數和中心頻率取得越大,時頻圖上反映的時頻聚集性越好。
與其他時頻分析對比,如短時傅里葉變換時頻圖
在這裏插入圖片描述
小結:高頻時小波效果好,因爲小波在高頻處分辨率可以自動調整,分辨率高。

%時頻分析
clc
clear all
close all
% 原始信號
fs=1000;
f1=50;
f2=100;
t=0:1/fs:1;
s = sin(2*pi*f1*t)+sin(2*pi*f2*t);%+randn(1, length(t));
% s = chirp(t,20,0.3,300);
s = chirp(t,20,1,500,'q');
figure
plot(t, s)
% 連續小波變換時頻圖
wavename='cmor3-3';
totalscal=256;
Fc=centfrq(wavename); % 小波的中心頻率
c=2*Fc*totalscal;
scals=c./(1:totalscal);
f=scal2frq(scals,wavename,1/fs); % 將尺度轉換爲頻率
coefs=cwt(s,scals,wavename); % 求連續小波係數
figure
imagesc(t,f,abs(coefs));
set(gca,'YDir','normal')
colorbar;
xlabel('時間 t/s');
ylabel('頻率 f/Hz');
title('小波時頻圖');
% 短時傅里葉變換時頻圖
figure
spectrogram(s,256,250,256,fs);
% 時頻分析工具箱裏的短時傅里葉變換
f = 0:fs/2;
tfr = tfrstft(s');
tfr = tfr(1:floor(length(s)/2), :);
figure
imagesc(t, f, abs(tfr));
set(gca,'YDir','normal')
colorbar;
xlabel('時間 t/s');
ylabel('頻率 f/Hz');
title('短時傅里葉變換時頻圖');

轉載
https://blog.csdn.net/weixin_40583722/article/details/79892289

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