資源簡介
HHT(Hilbert-Huang Transform)希爾伯特黃變換,HHT就是先將信號進行經驗模態分解(EMD分解),然后將分解后的每個IMF分量進行Hilbert變換,得到信號的時頻屬性的一種時頻分析方法。
代碼片段和文件信息
function?hht=HHT(x)
????clc;
????N=length(x);
????t=0:0.01:8;
????deta=t(2)-t(1);??%采樣間隔
????fs=1/deta;???????%采樣頻率
%fft默認計算的信號是從0開始的
????z=x;
????c=emd(z);
%計算每個IMF分量及最后一個剩余分量residual與原始信號的相關性
????[mn]=size(c);
????for?i=1:m
????????a=corrcoef(c(i:)z);
????????xg(i)=a(12);
????end
????????xg;
????for?i=1:m-1
????%--------------------------------------------------------------------
????%計算各IMF的方差貢獻率
????%定義:方差為平方的均值減去均值的平方
????%均值的平方
????%imfp2=mean(c(i:)2).^2
????%平方的均值
????%imf2p=mean(c(i:).^22)
????%各個IMF的方差
????????mse(i)=mean(c(i:).^22)-mean(c(i:)2).^2;
????end;
??????mmse=sum(mse);
????for?i=1:m-1
????????mse(i)=mean(c(i:).^22)-mean(c(i:)2).^2;?
????%方差百分比,也就是方差貢獻率
????????mseb(i)=mse(i)/mmse*100;
????%顯示各個IMF的方差和貢獻率
????end;
%畫出每個IMF分量及最后一個剩余分量residual的圖形
????????figure(1)
????for?i=1:m-1
????????disp([‘imf‘int2str(i)])?;disp([mse(i)?mseb(i)]);???%disp函數直接將內容輸出在Matlab命令窗口中
????end;
?????????subplot(m+111)
?????????plot(tz)
?????????set(gca‘fontname‘‘times?New?Roman‘)
?????????set(gca‘fontsize‘14.0)
?????????ylabel([‘signal‘‘Amplitude‘])
????for?i=1:m-1
????????subplot(m+11i+1);
????????set(gcf‘color‘‘w‘)
????????plot(tc(i:)‘k‘)
????????set(gca‘fontname‘‘times?New?Roman‘)
????????set(gca‘fontsize‘14.0)
????????ylabel([‘imf‘int2str(i)])
????end
????????subplot(m+11m+1);
????????set(gcf‘color‘‘w‘)
????????plot(tc(m:)‘k‘)
????????set(gca‘fontname‘‘times?New?Roman‘)
????????set(gca‘fontsize‘14.0)
????????ylabel([‘r‘int2str(m-1)])
%畫出每個IMF分量及剩余分量residual的幅頻曲線
%?????figure(2)
%?????subplot(m+111)
%?????set(gcf‘color‘‘w‘)
%?????[fz]=fftfenxi(tz);
%?????plot(fz‘k‘)
%?????set(gca‘fontname‘‘times?New?Roman‘)
%?????set(gca‘fontsize‘14.0)
%?????ylabel([‘initial?signal‘int2str(m-1)‘Amplitude‘])
%?????for?i=1:m-1
%?????????subplot(m+11i+1);
%?????????set(gcf‘color‘‘w‘)
%?????????[fz]=fftfenxi(tc(i:));
%?????????plot(fz‘k‘)
%?????????set(gca‘fontname‘‘times?New?Roman‘)
%?????????set(gca‘fontsize‘14.0)
%?????????ylabel([‘imf‘int2str(i)‘Amplitude‘])
%?????end
%?????????subplot(m+11m+1);
%?????????set(gcf‘color‘‘w‘)
%?????????[fz]=fftfenxi(tc(m:));
%?????????plot(fz‘k‘)
%?????????set(gca‘fontname‘‘times?New?Roman‘)
%?????????set(gca‘fontsize‘14.0)
%?????????ylabel([‘r‘int2str(m-1)‘Amplitude‘])
????????hx=hilbert(z);
????????xr=real(hx);xi=imag(hx);
????%計算瞬時振幅
????????sz=sqrt(xr.^2+xi.^2);
????%計算瞬時相位
????????sx=angle(hx);
????%計算瞬時頻率
????????dt=diff(t);
????????dx=diff(sx);
????????sp=dx./dt;
????????figure(6)
????????plot(t(1:N-1)sp)
????????title(‘瞬時頻率‘)
????%計算HHT時頻譜和邊際譜
????????[Afatt]=hhspectrum(c);
????
評論
共有 條評論