黄昏寒鸦 发表于 2011-12-26 10:09

大家帮帮忙啊!为什么我做出来的结果是这样呢?

   小弟,刚刚接触EMD分解不久,幸好有这样一个论坛,使我受益匪浅。于是我自己编了一个程序,可是运算结果感觉有问题啊。望各位前辈给予指导啊!
N=1000;
n=1:N;
fs=1000;
t=n/fs;
fx=30;
fy=60;
x=sin(2*pi*fx*t);
y=2*sin(2*pi*fy*t);
q=x+y;
data=q;
imf=emd(data);                        %对输入信号进行EMD分解   
=hhspectrum(imf);            %对IMF分量求取瞬时频率与振幅:A:是每个IMF的振幅向量,f:每个IMF对应的瞬时频率,t:时间序列号
=toimage(A,f);            %将每个IMF信号合成求取Hilbert谱,E:对应的振幅值,Cenf:每个网格对应的中心频率这里横轴为时间,纵轴为频率      
                                                   %即时频图(用颜色表示第三维值的大小)和三维图(三维坐标系:时间,中心频率,振幅)         
cemd_visu(data,1:length(data),imf);   %显示每个IMF分量及残余信号--------------------------------------------
disp_hhs(E);                        %希尔伯特谱----------------------------------------------------------
%画出边际谱
%N=length(Cenf);%设置频率点数   %完全从理论公式出发。网格化后中心频率很重要,大家从连续数据变为离散的角度去思考,相信应该很容易理解
for k=1:size(E,1)
    bjp(k)=sum(E(k,:))*1/fs;
end
figure(3);
plot(Cenf(1,:)*fs,bjp);% 作边际谱图   进行求取Hilbert谱时频率已经被抽样成具有一定窗长的离散频率,所以此时的频率轴已经是中心频率
xlabel('频率 / Hz');
ylabel('幅值');
figure;
myimage(E,'2D');   % 画出二维希尔伯特谱
figure;
myimage(E,'3D');   %三维
结果为:






第2个与第4个个人感觉有问题。求指导啊!呵呵

safin0524 发表于 2013-4-23 23:44

楼主如果用myimage作图就会发生这种情况

不知道是不是myimage 程序的问题

cyp1967 发表于 2014-6-15 16:21

楼主:好像没有myimage这个函数吧?
页: [1]
查看完整版本: 大家帮帮忙啊!为什么我做出来的结果是这样呢?