关于instfreq函数
我做了一个简单的例子T=10;N=1024;n=0:1:N-1;dt=T/N;t=n*dt;
x=cos(2*pi*t);x=hilbert(x);=instfreq(x');
plot(t,fnor);
得出来的fnor=0.4902,而这个信号的频率应该是1呀,谁知道为什么吗?谢谢 原帖由 tangaoming 于 2007-4-20 11:03 发表
我做了一个简单的例子
T=10;N=1024;n=0:1:N-1;dt=T/N;t=n*dt;
x=cos(2*pi*t);x=hilbert(x);=instfreq(x');
plot(t,fnor);
得出来的fnor=0.4902,而这个信号的频率应该是1呀,谁知道为什么吗?谢谢
这个问题与 instfreq 中的 angle 函数有关,迟点我再看看 呵呵,希望楼主能尽快给我看看,我刚接触这个,还不是很懂,谢谢 eight,你怎么不管呢?能给我解释一下怎么从归一化频率去得到实际频率?谢谢 原帖由 tangaoming 于 2007-4-22 09:20 发表
eight,你怎么不管呢?能给我解释一下怎么从归一化频率去得到实际频率?谢谢
不是人人都有责任帮助别人,也不是人人都这么有空去帮助别人。我的事情多得一塌糊涂,所以,请耐心等待,或者自己解决,建议你去matlab版看看置顶贴:聚宝盆
回复 #1 tangaoming 的帖子
你这样改一下就对了:x=hilbert(x');=instfreq(x);
你原来的做法是错误的
这样再乘以采样频率就可以得到真实的频率 呵呵,十分感谢
消除误差后的正确代码为:
T=10;N=1024;
n=0:1:N-1;
dt=T/N;
t=n*dt;
x=sin(0.8*pi*t);
x=hilbert(x');
=instfreq(x);
fnor1=fnor/0.976553*100;
fnor1(1,1)
plot(t,fnor1); 原来如此,受益匪浅!
楼主若将=instfreq(x');变为=instfreq(x.');也能得到正确答案。
在下尚有一事不明,望高人指点:
(1)为何fnor再乘以采样频率就可以得到真实的频率?
(2)利用instfreq函数的算法fnormhat=0.5*(angle(-x(t+1).*conj(x(t-1)))+pi)/(2*pi);中,
0.5*(angle(-x(t+1).*conj(x(t-1)))+pi)是用中心差分计算 arg x(t)的微分吗?
疑问
Undefined command/function 'instfreq'各位打扰了,我是第一次接触HHT,把理论已经看完,正准备编程阶段,我执行了上面的程序,出现这种情况怎么办啊?也想问问大家,我该怎样去编程?看有关matlab书?什么样的书能把你们编写的程序看明白? 我还有两点不明:1,hilbert变换既可以是行向量也可以是列向量,为什么非要x'才能hilbert变换2,就是x.'和x'有什么区别,谢谢 因为x是复数,x'为复共轭转置,x.'为非共轭转置。 哦,明白了,原来如此 原算法是利用前后各一点来求中间一点的频率,用的是一阶差分方法了
原算法是利用前后各一点来求中间一点的频率,用的是一阶差分方法了
能否解释一下0.5*(angle(-x(t+1).*conj(x(t-1)))+pi)的意义或提供参考文献?我一直没有搞懂为何x(t+1)前有负号,且+pi。重庆大学谭善文的博士论文中提到了离散瞬时频率的计算,但形式与上式有一些不同。还请高人指教。
页:
[1]
2