声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3630|回复: 17

[HHT] 瞬时频率问题

[复制链接]
发表于 2007-9-4 10:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我自己编的求瞬时频率的小程序
fs=1024;
N=256;
dt=1/fs;
t=0:dt:(N-1)*dt;
s=cos(2*pi*12*t);
s1=hilbert(s);
s2=s+i*s1;
fai=angle(s2);
fai=unwrap(fai);
theta=diff(fai)/dt/(2*pi);
plot(theta)
为什么求出的频率不在12HZ呢?
瞬时频率对带有直流量的s=s+c是没有意义的,但是我所取信号为正弦信号为什么画出的图为什么不在12hz呢?

[ 本帖最后由 kevin19821 于 2007-9-4 10:15 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-9-4 10:53 | 显示全部楼层
把fai=angle(s2);
里的s2改成s1
看看hilbert的帮助说明

评分

1

查看全部评分

 楼主| 发表于 2007-9-4 11:02 | 显示全部楼层
知道了, hilbert之后就是解析信号了,谢谢楼上的
发表于 2007-9-4 11:06 | 显示全部楼层
fs=1024;
N=256;
dt=1/fs;
t=0:dt:(N-1)*dt;
s=cos(2*pi*12*t);
s1=hilbert(s')';
s2=s+i*s1;
figure(1)
subplot(2,1,1)
plot(s1)
subplot(2,1,2)
plot(s2)
theta=instfreq(s1')';
theta=theta.*fs
figure(2)
plot(theta)

[ 本帖最后由 zhangnan3509 于 2007-9-4 11:12 编辑 ]
1.gif
2.gif
 楼主| 发表于 2007-9-4 11:19 | 显示全部楼层
上面的程序有两个问题不解:
(1)?? Undefined function or variable 'instfreq'.
(2)plot(s2) s2为解析信号,作图时应该取实部
发表于 2007-9-4 11:22 | 显示全部楼层

回复 #5 kevin19821 的帖子

第一个问题,你没有instfreq函数,咱们版里有这个程序。
第二我想看看你上面作出来的s2到底是什么样子,挺好玩的。
发表于 2007-9-4 12:39 | 显示全部楼层
学知识了,感谢!
发表于 2007-9-4 12:45 | 显示全部楼层
同时很想知道,解析信号的确切定义!!!任何知识都扣的很细是不是很费时间啊?
发表于 2007-9-4 12:52 | 显示全部楼层

回复 #8 caichengtao 的帖子

咱们HHT里面的采用hilbert变换,将x(t) 变换成解析形式然后求瞬时频率。当然hilbert变换也不仅仅使用在黄变换中,下面的图片就是在小波中的应用

[ 本帖最后由 zhangnan3509 于 2007-9-4 12:56 编辑 ]
1.gif

评分

1

查看全部评分

发表于 2007-9-4 13:10 | 显示全部楼层
感谢zhangnan3509 !回复及时准确!
 楼主| 发表于 2007-9-4 14:55 | 显示全部楼层

回复 #4 zhangnan3509 的帖子

能解释以下为什么在程序里面求HILBERT时取两次共轭呢?
 楼主| 发表于 2007-9-4 15:02 | 显示全部楼层

回复 #4 zhangnan3509 的帖子

再次感谢zhangnan3509,我还有两点不明白

为什么在程序里面求HILBERT时取两次转置呢?
s1=hilbert(s')';
theta=instfreq(s1')';
还有:theta=theta.*fs?

[ 本帖最后由 kevin19821 于 2007-9-4 15:10 编辑 ]
发表于 2007-9-4 15:28 | 显示全部楼层

回复 #12 kevin19821 的帖子

首先我们做一个实验
Xr = [1; 2; 3; 4];X = hilbert(Xr')'

X =

   1.0000 - 1.0000i
   2.0000 + 1.0000i
   3.0000 + 1.0000i
   4.0000 - 1.0000i

如果不转置
Xr = [1; 2; 3; 4];X = hilbert(Xr)

X =

   1.0000 + 1.0000i
   2.0000 - 1.0000i
   3.0000 - 1.0000i
   4.0000 + 1.0000i
或者分别转置
Xr = [1; 2; 3; 4];X = hilbert(Xr)'

X =

   1.0000 - 1.0000i   2.0000 + 1.0000i   3.0000 + 1.0000i   4.0000 - 1.0000i

Xr = [1; 2; 3; 4];X = hilbert(Xr')

X =

   1.0000 + 1.0000i   2.0000 - 1.0000i   3.0000 - 1.0000i   4.0000 + 1.0000i

你比较一下 是不是按照双转置的正确,输入列向量,输出列向量。而且计算结果正确。

你说的另外一句 是因为经过了瞬时频率函数的计算,得出的是归一化的结果,如果要得到实际的频率值要乘以采样频率
发表于 2008-7-21 17:44 | 显示全部楼层

回复 13楼 的帖子

zhangnan3509 真是好人呢
发表于 2008-9-17 11:34 | 显示全部楼层

疑问

为什么s1和theta长度不一样,如何把横轴改为时间?????????
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-26 05:21 , Processed in 0.087142 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表