MATLAB希爾伯特黃變換HHT

2021-09-25 12:24:35 字數 1869 閱讀 6355

首先先介紹下matlab中經驗模態分解所用到的函式emd。

imf = emd(x)

imf = emd(x,...,'option_name',option_value,...)

imf = emd(x,opts)

[imf,ort,nb_iterations] = emd(...)

做**的時候只是簡單的對訊號做乙個模態分解,因此只用到了第一種方法,imf=emd(x),這其中若x為實向量,則計算經驗模態,若x為復向量,則計算二維經驗模式。對於x為實向量的情況下,得到的是1-n個imf(內部模態函式),在加上乙個剩餘項。

在得到imf後,可以直接作圖,也可以利用工具箱中的函式emd_visu作圖,可以得到模態分解結果以及兩種方向相反的重構訊號過程,該函式的用法為

emd_visu(x,t,imf)

其中,x為原訊號,t為時間序列,imf為上一步得到的結果,該函式可得三個圖,第乙個為emd圖,後兩個為訊號重構過程,分別為f2c、c2f。

clear;close all;clc

n=1024;

fs=1024;

t=(0:n-1)/fs;

f1=70;f2=120;

x=cos(2*pi*f1*t)+2*cos(2*pi*f2*t);

imf=emd(x); %經驗模態分解

emd_visu(x,t,imf) %作圖

所得結果如下

第乙個圖所表示便是emd的過程了,7個imf加乙個剩餘項rn,後兩張圖就是原訊號的重構過程了,我們知道在hht中,有這麼乙個關係,

在emd結束後,便可以開始畫hht譜圖了,此處我結合這兩天檢視的資料,給出兩個所用到的函式用法的簡單表述,如下:

[a,f,t] = hhspectrum(imf)

用於計算hht譜,imf為前面所得結果,a為每個imf的瞬時振幅,f、tt分別為對應的瞬時頻率和時間序列。

[im,tt,ff] = toimage(a,f,t,splx,sply)

其中a,f,t與hhspecturm函式的相關定義一致,splx、sply則分別對應輸出im的列數和行數,splx一般與t的長度一致;

im為頻譜的二維影象,tt為時間序列號(此處劃重點,是「序列號」,而不是「序列」,也就是需要除以總長度得到時間序列),ff的注釋解釋為 「centers of the frequency bins」(頻率門的中心值?)。

下面直接給出程式和結果。

[a,f,tt] = hhspectrum(imf(1:end-1,:));

[im,tt,ff] = toimage(a,f,tt,length(tt));

figure;

set(gcf,'color','w');

imagesc(tt/n,[0,0.5*fs],im);

set(gca,'ydir','normal')

colormap('jet');colorbar;

xlabel('時間(s)');

ylabel('頻率(hz)');

axis([0 1 0 200]);title('hht譜') ;

本文參考自

希爾伯特變換 希爾伯特變換

希爾伯特變換 ht 是指描述乙個以實數值載波做調製的訊號之複數包絡,相移是通過希爾伯特變換器來實現的,訊號經希爾伯特變換後在頻域各頻率分量的幅度保持不變,但相位出現90度相移,正頻率之後90度負頻率超前90度,希爾伯特變換器又成為90度相位器。用希爾伯特變換描述幅值調值或相位調值的包絡,瞬時頻率和瞬...

訊號處理 希爾伯特黃變換

特點 最近在做訊號處理,發現自己基本功不夠紮實,開始了惡補之路,希望能夠盡快的補齊吧。希爾伯特黃變換 1998年,norden e.huang 黃鍔 中國台灣海洋學家 等人提出了經驗模態分解方法,並引入了hilbert譜的概念和hilbert譜分析的方法,美國國家航空和宇航局 nasa 將這一方法命...

離散希爾伯特變換

一般情況下,我們需要有關幅度和相位 或實部和虛部 在 pi,pi 上的全部資訊才能完整描述乙個序列的傅利葉變換特性 但在特定情況下,有可能不需要這些全部的資訊。1.因果實序列 因果實序列可以從它的偶對稱分量 x n x n 2 恢復出來 而偶對稱序列的傅利葉變換只有實數分量。因此,因果實序列只需要其...