darkhorse 发表于 2012-10-25 19:52

瞬时频率正确性的问题

利用matlab时频工具箱自带函数instfreq(x1')*fs得到的瞬时频率
和按照瞬时频率的定义设计的程序
   :x1=hilbert(imf(2,:));
       xr1=real(x1);
       xi1=imag(x1);P1=atan2(xi1,xr1);%imf1的瞬时相位
       xh1=unwrap(P1);%unwrap(w)就是解卷绕,使相位在pi处不发生跳变,从而反应出真实的相位变化
       fs=20000;
      xhd1=fs*diff(xh1)/(2*pi);%归一化后的瞬时频率
   xsp=abs(xhd1);XSP为瞬时频率
两种方法得到的瞬时频率的值不一样,请问各位大侠,哪种求解瞬时频率的方法是对的,小弟不胜感激!!!

yghit08 发表于 2012-10-25 22:14

没有看到你的图,从我现在做过的经验来看instfreq这个做的是正确的。至于为什么你另一种方法做的是否正确,我想一方面有可能你编程有问题(atan的定义范围你自习考量考量)。另外,评价对与错,针对你的仿真信号,真实的结果是显然的,为什么不做出来呢或者说为什么不选一个很确定的信号做比较呢????

darkhorse 发表于 2012-10-25 22:48

yghit08 发表于 2012-10-25 22:14 static/image/common/back.gif
没有看到你的图,从我现在做过的经验来看instfreq这个做的是正确的。至于为什么你另一种方法做的是否正确, ...

好的 ,我先通过仿真验证一下吧。先谢了!!

zhyjig 发表于 2013-6-16 10:37

yghit08 发表于 2012-10-25 22:14 static/image/common/back.gif
没有看到你的图,从我现在做过的经验来看instfreq这个做的是正确的。至于为什么你另一种方法做的是否正确, ...

我用instfreq求瞬时频率如图黑色曲线,
用dp/dt求瞬时频率如图蓝色曲线
为什么差这么多呢?

s=hilbert(singal);
=instfreq(s');
ph1=unwrap(ph);
dp=diff(ph);
dt=diff(t);
for j=1:99
   if dp(j)<0
         dp(j)=dp(j)+2*pi;
   end
end
freq=dp./dt/fs;

yghit08 发表于 2013-6-16 10:46

本帖最后由 yghit08 于 2013-6-16 10:49 编辑

zhyjig 发表于 2013-6-16 10:37 static/image/common/back.gif
我用instfreq求瞬时频率如图黑色曲线,
用dp/dt求瞬时频率如图蓝色曲线
为什么差这么多呢?

先不管差异,先确定哪个求得对!
想让我说谁对谁错吗?为什么不从方法自身说这事,非得自己拿个不知对错的自编程序来说事。你能肯定你编的算瞬时频率的程序段没问题?确定这个再说。为什么不用确定结果的仿真数据测自己的程序段???
你用的方法和instfreq用的方法是一样的。

luweiyun 发表于 2013-7-3 11:39

yghit08 发表于 2013-6-16 10:46 static/image/common/back.gif
先不管差异,先确定哪个求得对!
想让我说谁对谁错吗?为什么不从方法自身说这事,非得自己拿个不知对错 ...

有负的哦
页: [1]
查看完整版本: 瞬时频率正确性的问题