tangaoming 发表于 2007-4-20 11:03

关于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呀,谁知道为什么吗?谢谢

eight 发表于 2007-4-20 11:39

原帖由 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 函数有关,迟点我再看看

tangaoming 发表于 2007-4-21 15:05

呵呵,希望楼主能尽快给我看看,我刚接触这个,还不是很懂,谢谢

tangaoming 发表于 2007-4-22 09:20

eight,你怎么不管呢?能给我解释一下怎么从归一化频率去得到实际频率?谢谢

eight 发表于 2007-4-22 10:11

原帖由 tangaoming 于 2007-4-22 09:20 发表
eight,你怎么不管呢?能给我解释一下怎么从归一化频率去得到实际频率?谢谢

不是人人都有责任帮助别人,也不是人人都这么有空去帮助别人。我的事情多得一塌糊涂,所以,请耐心等待,或者自己解决,建议你去matlab版看看置顶贴:聚宝盆

rc-hw-0002 发表于 2007-4-22 11:15

回复 #1 tangaoming 的帖子

你这样改一下就对了:
x=hilbert(x');=instfreq(x);

你原来的做法是错误的
这样再乘以采样频率就可以得到真实的频率

tangaoming 发表于 2007-4-22 14:27

呵呵,十分感谢

springxxc 发表于 2007-4-23 22:41

消除误差后的正确代码为:

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);

huangyong87 发表于 2007-4-24 11:29

原来如此,受益匪浅!
楼主若将=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)的微分吗?

victorliuchuang 发表于 2007-4-27 00:10

疑问

Undefined command/function 'instfreq'各位打扰了,我是第一次接触HHT,把理论已经看完,正准备编程阶段,我执行了上面的程序,出现这种情况怎么办啊?也想问问大家,我该怎样去编程?看有关matlab书?什么样的书能把你们编写的程序看明白?

tangaoming 发表于 2007-4-27 08:32

我还有两点不明:1,hilbert变换既可以是行向量也可以是列向量,为什么非要x'才能hilbert变换
2,就是x.'和x'有什么区别,谢谢

huangyong87 发表于 2007-4-27 11:21

因为x是复数,x'为复共轭转置,x.'为非共轭转置。

tangaoming 发表于 2007-4-27 12:47

哦,明白了,原来如此

lsclsc27 发表于 2007-5-4 16:28

原算法是利用前后各一点来求中间一点的频率,用的是一阶差分方法了

huangyong87 发表于 2007-5-5 11:54


原算法是利用前后各一点来求中间一点的频率,用的是一阶差分方法了

能否解释一下0.5*(angle(-x(t+1).*conj(x(t-1)))+pi)的意义或提供参考文献?我一直没有搞懂为何x(t+1)前有负号,且+pi。重庆大学谭善文的博士论文中提到了离散瞬时频率的计算,但形式与上式有一些不同。还请高人指教。
页: [1] 2
查看完整版本: 关于instfreq函数