用希尔伯特黄变换HHT求时频谱和边际谱.docx

上传人:b****6 文档编号:8826659 上传时间:2023-02-02 格式:DOCX 页数:17 大小:133.18KB
下载 相关 举报
用希尔伯特黄变换HHT求时频谱和边际谱.docx_第1页
第1页 / 共17页
用希尔伯特黄变换HHT求时频谱和边际谱.docx_第2页
第2页 / 共17页
用希尔伯特黄变换HHT求时频谱和边际谱.docx_第3页
第3页 / 共17页
用希尔伯特黄变换HHT求时频谱和边际谱.docx_第4页
第4页 / 共17页
用希尔伯特黄变换HHT求时频谱和边际谱.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

用希尔伯特黄变换HHT求时频谱和边际谱.docx

《用希尔伯特黄变换HHT求时频谱和边际谱.docx》由会员分享,可在线阅读,更多相关《用希尔伯特黄变换HHT求时频谱和边际谱.docx(17页珍藏版)》请在冰豆网上搜索。

用希尔伯特黄变换HHT求时频谱和边际谱.docx

用希尔伯特黄变换HHT求时频谱和边际谱

【原创】用希尔伯特黄变换(HHT)求时频谱和边际谱

寒假将至,精心将自己最近做的东西总结了一下,能跟大家分享讨论是我的荣幸。

源代码也贴出来了,希望大家能提出宝贵意见~顺祝大家寒假快乐,新年快乐~~1.什么是HHT?

HHT就是先将信号进行经验模态分解(EMD分解),然后将分解后的每个IMF分量进行Hilbert变换,得到信号的时频属性的一种时频分析方法。

2.EMD分解的步骤。

截图07.png(51.93KB

2010-2-518:

30

截图08.png(31.36KB

2010-2-518:

30

截图09.png(30.93KB

2010-2-518:

30

EMD分解的流程图如下:

101.PNG(79.44KB

2010-2-518:

49

3.实例演示。

给定频率分别为10Hz和35Hz的两个正弦信号相叠加的复合信号,采样频率fs=2048Hz的信号,表达式如下:

y=5sin(2*pi*10t+5*sin(2*pi*35t

(1为了对比,先用fft对求上述信号的幅频和相频曲线。

复制内容到剪贴板

代码:

functionfftfenxi

clear;clc;

N=2048;

%fft默认计算的信号是从0开始的

t=linspace(1,2,N;deta=t(2-t(1;1/deta

x=5*sin(2*pi*10*t+5*sin(2*pi*35*t;

%N1=256;N2=512;w1=0.2*2*pi;w2=0.3*2*pi;w3=0.4*2*pi;

%x=(t>=-200&t<=-200+N1*deta.*sin(w1*t+(t>-200+N1*deta&t<=-200+N2*deta.*sin(w2*t+(t>-200+N2*deta&t<=200.*sin(w3*t;

y=x;

m=0:

N-1;

f=1./(N*deta*m;%可以查看课本就是这样定义横坐标频率范围的

%下面计算的Y就是x(t的傅里叶变换数值

%Y=exp(i*4*pi*f.*fft(y%将计算出来的频谱乘以exp(i*4*pi*f得到频移后[-2,2]之间的频谱值

Y=fft(y;

z=sqrt(Y.*conj(Y;

plot(f(1:

100,z(1:

100;

title('幅频曲线'

xiangwei=angle(Y;

figure(2

plot(f,xiangwei

title('相频曲线'

figure(3

plot(t,y,'r'

%axis([-2,2,0,1.2]

title('原始信号'

102.PNG(57.26KB

2010-2-518:

42

103.PNG(24.85KB

2010-2-518:

42

104.PNG(25.65KB

2010-2-518:

42

(2)用Hilbert变换直接求该信号的瞬时频率

复制内容到剪贴板

代码:

clear;clc;clf;

%假设待分析的函数是z=t^3

N=2048;

%fft默认计算的信号是从0开始的

t=linspace(1,2,N;deta=t(2-t(1;fs=1/deta;

x=5*sin(2*pi*10*t+5*sin(2*pi*35*t;

z=x;

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;

plot(t(1:

N-1,sp

title('瞬时频率'

106.PNG(35.92KB

2010-2-518:

42

小结:

傅里叶变换不能得到瞬时频率,即不能得到某个时刻的频率值。

Hilbert变换是求取瞬时频率的方法,但如果只用Hilbert变换求出来的瞬时频率也不准确。

(出现负频,实际上负频没有意义!

(3)用HHT求取信号的时频谱与边际谱

复制内容到剪贴板

代码:

functionHHT

clear;clc;clf;

N=2048;

%fft默认计算的信号是从0开始的

t=linspace(1,2,N;deta=t(2-t(1;fs=1/deta;

x=5*sin(2*pi*10*t+5*sin(2*pi*35*t;

z=x;

c=emd(z;

%计算每个IMF分量及最后一个剩余分量residual与原始信号的相关性

[m,n]=size(c;

fori=1:

m;

a=corrcoef(c(i,:

z;

xg(i=a(1,2;

end

xg;

fori=1:

m-1

%--------------------------------------------------------------------

%计算各IMF的方差贡献率

%定义:

方差为平方的均值减去均值的平方

%均值的平方

%imfp2=mean(c(i,:

2.^2

%平方的均值

%imf2p=mean(c(i,:

.^2,2

%各个IMF的方差

mse(i=mean(c(i,:

.^2,2-mean(c(i,:

2.^2;

end;

mmse=sum(mse;

fori=1:

m-1

mse(i=mean(c(i,:

.^2,2-mean(c(i,:

2.^2;

%方差百分比,也就是方差贡献率

mseb(i=mse(i/mmse*100;

%显示各个IMF的方差和贡献率

end;

%画出每个IMF分量及最后一个剩余分量residual的图形

figure(1

fori=1:

m-1

disp(['imf',int2str(i];disp([mse(imseb(i];

end;

subplot(m+1,1,1

plot(t,z

set(gca,'fontname','timesNewRoman'

set(gca,'fontsize',14.0

ylabel(['signal','Amplitude']

fori=1:

m-1

subplot(m+1,1,i+1;

set(gcf,'color','w'

plot(t,c(i,:

'k'

set(gca,'fontname','timesNewRoman'

set(gca,'fontsize',14.0

ylabel(['imf',int2str(i]

end

subplot(m+1,1,m+1;

set(gcf,'color','w'

plot(t,c(m,:

'k'

set(gca,'fontname','timesNewRoman'

set(gca,'fontsize',14.0

ylabel(['r',int2str(m-1]

%画出每个IMF分量及剩余分量residual的幅频曲线

figure(2

subplot(m+1,1,1

set(gcf,'color','w'

[f,z]=fftfenxi(t,z;

plot(f,z,'k'

set(gca,'fontname','timesNewRoman'

set(gca,'fontsize',14.0

ylabel(['initialsignal',int2str(m-1,'Amplitude']

fori=1:

m-1

subplot(m+1,1,i+1;

set(gcf,'color','w'

[f,z]=fftfenxi(t,c(i,:

;

plot(f,z,'k'

set(gca,'fontname','timesNewRoman'

set(gca,'fontsize',14.0

ylabel(['imf',int2str(i,'Amplitude']

end

subplot(m+1,1,m+1;

set(gcf,'color','w'

[f,z]=fftfenxi(t,c(m,:

;

plot(f,z,'k'

set(gca,'fontname','timesNewRoman'

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时频谱和边际谱

[A,fa,tt]=hhspectrum(c;

[E,tt1]=toimage(A,fa,tt,length(tt;

figure(3

disp_hhs(E,tt1%二维图显示HHT时频谱,E是求得的HHT谱

pause

figure(4

fori=1:

size(c,1

faa=fa(i,:

;

[FA,TT1]=meshgrid(faa,tt1;%三维图显示HHT时频图

surf(FA,TT1,E

title('HHT时频谱三维显示'

holdon

end

holdoff

E=flipud(E;

fork=1:

size(E,1

bjp(k=sum(E(k,:

*1/fs;

end

f=(1:

N-2/N*(fs/2;

figure(5

plot(f,bjp;

xlabel('频率/Hz';

ylabel('信号幅值';

title('信号边际谱'%要求边际谱必须先对信号进行EMD分解

function[A,f,tt]=hhspectrum(x,t,l,aff

error(nargchk(1,4,nargin;

ifnargin<2

t=1:

size(x,2;

end

ifnargin<3

l=1;

end

ifnargin<4

aff=0;

end

ifmin(size(x==1

ifsize(x,2==1

x=x';

ifnargin<2

t=1:

size(x,2;

end

end

Nmodes=1;

else

Nmodes=size(x,1;

end

lt=length(t;

tt=t((l+1:

(lt-l;

fori=1:

Nmodes

an(i,:

=hilbert(x(i,:

'';

f(i,:

=instfreq(an(i,:

',tt,l';

A=abs(an(:

l+1:

end-l;

ifaff

disprog(i,Nmodes,max(Nmodes,100

end

end

functiondisp_hhs(im,t,inf

%DISP_HHS(im,t,inf

%displaysinanewfigurethespectrumcontainedinmatrix"im"

%(amplitudesinlog.

%

%inputs:

-im:

imagematrix(e.g.,outputof"toimage"

%-t(optional:

timeinstants(e.g.,outputof"toimage"

%-inf(optional:

-dynamicrangeindB(wrtmax

%default:

inf=-20

%

%utilisation:

disp_hhs(im;disp_hhs(im,t;disp_hhs(im,inf

%disp_hhs(im,t,inf

figure

colormap(bone

colormap(1-colormap;

ifnargin==1

inf=-20;

t=1:

size(im,2;

end

ifnargin==2

iflength(t==1

inf=t;

t=1:

size(im,2;

else

inf=-20;

end

end

ifinf>=0

error('infdoitetre<0'

end

M=max(max(im;

im=log10(im/M+1e-300;

inf=inf/10;

imagesc(t,fliplr((1:

size(im,1/(2*size(im,1,im,[inf,0];

set(gca,'YDir','normal'

xlabel(['time']

ylabel(['normalizedfrequency']

title('Hilbert-Huangspectrum'

function[f,z]=fftfenxi(t,y

L=length(t;N=2^nextpow2(L;

%fft默认计算的信号是从0开始的

t=linspace(t(1,t(L,N;deta=t(2-t(1;

m=0:

N-1;

f=1./(N*deta*m;

%下面计算的Y就是x(t的傅里叶变换数值

%Y=exp(i*4*pi*f.*fft(y%将计算出来的频谱乘以exp(i*4*pi*f得到频移后[-2,2]之间的频谱值

Y=fft(y;

z=sqrt(Y.*conj(Y;

107.PNG(88.8KB

2010-2-518:

42

108.PNG(93.91KB

2010-2-518:

42

109.PNG(55.65KB

2010-2-518:

42

110.PNG(108.1KB

2010-2-518:

42

111.PNG(37.52KB

2010-2-518:

42

4.总结。

(1)边际谱与傅里叶谱的比较:

      意义不同:

边际谱从统计意义上表征了整组数据每个频率点的累积幅值分布,而傅里叶频谱的某一点频率上的幅值表示在整个信号里有一个含有此频率的三角函数组分。

      作用不同:

边际谱可以处理非平稳信号,如果信号中存在某一频率的能量出现,就表示一定有该频率的振动波出现,也就是说,边际谱能比较准确地反映信号的实际频率成分。

而傅里叶变换只能处理平稳信号。

(2)HHT与Hilbert变换的比较:

      Hilbert变换只是单纯地求信号的瞬时振幅,频率和相位,有可能出现没有意义的负频率;HHT变换先将信号进行EMD分解,得到的是各个不同尺度的分量,对每一个分量进行Hilbert变换后得到的是有实际意义的瞬时频率。

PS:

运行上面的程序需要装时频工具箱,我仅将用到的emd分解的程序贴到下面。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1