cboboc 发表于 2010-3-31 20:20

高手帮忙看看!谢谢

因为国立中央大学的程序没有给出话希尔伯特普图的程序,所以我想用国立中央大学的瞬时频率程序求出瞬时频率,然后画出谱图,我写了个程序,但是运行的时候错误很多,不出结果,请各位帮我看看!程序如下:
>> clear
>> fs=200;
>> t=0:1/fs:1;
>> s=cos(10*pi*t)+2*cos(40*pi*t);
>> allmode=eemd(s,0,1);
>> for i=2:(size(allmode,1)-1)
omega(i,:)=ifndq(allmode(i,:),1/fs)
f(i,:)=omega(i,:)/2*pi
abs_allmode(i,:)=allmode(i,:)
for j=1:length(t)
abs_allmode(i,:)=allmode(i,:)
if abs_allmode(i,:)<0
abs_allmode(i,:)=-allmode(i,:)
end
end
Nnormal=5
for jj=1:Nnormal
=extrema(abs_allmode(i,:))
dd=1:length(t)
upper=spline(spmax(:,1),spmax(:,2),dd)
for k=1:length(t)
abs_allmode(k)=abs_allmode(k)/upper(k)
end
end
A=abs_allmode(i:2:length(t)-1)
=toimage(A,f);%画出希尔伯特谱
disp_hhs(im);

杨德昌 发表于 2010-4-6 19:30

(1)      ifndq函数的输入应该是一个一个IMF,而您的输入为不准确。
(2)      Nnormal=5 %why choose Nnormal=5? 是不是利用ifndq函数中的默认值!
(3)      jj=1:Nnormal这个参数在后面的程序中 并没有用到!

[ 本帖最后由 杨德昌 于 2010-4-6 21:31 编辑 ]

cboboc 发表于 2010-4-7 08:11

回复 沙发 杨德昌 的帖子

omega(i,:)=ifndq(allmode(i,:),1/fs),这里的allmode(i,:)就表示第i个imf 啊 也就是一个imf啊 。还有就是Nnormal就是经验上要循环5次啊。

杨德昌 发表于 2010-4-8 21:43

兄弟 你的程序运行结束后,allmode是一个201行*8列的矩阵,
而allmode(i,:)表示第i行的所有列吧,而allmode中的i行的所有列 不是一个imf,
其中的i列中的所有行才是一个imf 。
这就是后面你出错的原因!
页: [1]
查看完整版本: 高手帮忙看看!谢谢