logo资料库

希尔伯特黄变换(HHT)求模态参数具体过程,附matlab代码.docx

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
2.
1.这样吧,我把以前做的两个信号叠加然后 EMD 分解后求 HT 谱和边际谱的程序附上吧。 你可以参照。 clear; fs=1000; tspan=2; t=1/fs:1/fs:tspan; N=length(t); x=sin(2*pi*20*t); y=sin(2*pi*60*t+140); z=x+y; plot(t,z); imf=emd(z); cemd_visu(z,1:length(z),imf); %%%imf1 的 Hilbert 变换 xn1=hilbert(imf(1,:)); xr1=real(xn1); xi1=imag(xn1); A1=sqrt(xr1.^2+xi1.^2); figure,subplot(2,1,1);plot(t,A1); xlabel('时间(t)');ylabel('瞬时振幅');title('imf1') %%%imf2 的 Hilbert 变换 xn2=hilbert(imf(2,:)); xr2=real(xn2); xi2=imag(xn2); A2=sqrt(xr2.^2+xi2.^2); subplot(2,1,2);plot(t,A2); xlabel('时间(t)');ylabel('瞬时振幅');title('imf2') %%%imf1 的瞬时相位 P1=atan2(xi1,xr1); figure,subplot(2,1,1);plot(t,P1); xlabel('时间(t)'); ylabel('瞬时相位');title('imf1') %%%imf2 的瞬时相位 P2=atan2(xi2,xr2); subplot(2,1,2);plot(t,P2); xlabel('时间(t)'); ylabel('瞬时相位');title('imf2') %%%%imf1 瞬时频率 xh1=unwrap(P1); fs=1000; xhd1=fs*diff(xh1)/(2*pi); figure,subplot(2,1,1);plot(t(1:1999),xhd1); xlabel('时间(t)');ylabel('瞬时频率');title('imf1') %%%%imf2 瞬时频率 xh2=unwrap(P2);
fs=1000; xhd2=fs*diff(xh2)/(2*pi); subplot(2,1,2);plot(t(1:1999),xhd2); xlabel('时间(t)');ylabel('瞬时频率');title('imf2') >> [A,f,t]=hhspectrum(imf); >> [E,t,cenf]=toimage(A,f); >> disp_hhs(E,[],1000); for k=1:size(E,1) bjp(k)=sum(E(k,:))*1/tspan*1/fs; end H=size(E,1); f=(0:H-1)/H*(fs/2); figure (); plot(f,bjp); xlabel('频率 / Hz'); ylabel('幅值');title('边际谱') 出来的 HT 谱和边际谱图如下: HT 谱.jpg (19.48 KB, 下载次数: 8) 边际谱.jpg (19.91 KB, 下载次数: 2)
2. 我在运行程序的时候,运行到命令行 [im,tt1]=toimage(A,fa,tt,length(tt)); 的时候总是有如下错误提示 ??? Error: File: toimage.m Line: 59 Column: 1 This statement is not inside any function. (It follows the END that terminates the definition of the function "toimage".) 观察 toimage.m,发现 toimage.m Line: 59 Column: 1 对应着 命令行 lt=length(t); 请问是什么原因? 请高手帮忙解答 解答:删除 toimage 程序 59 Column: 1 前面的 end!
分享到:
收藏