longing547 发表于 2012-12-15 22:31

希尔伯特包络解调的疑惑

各位前辈,不记得在哪个帖子里看到对一个信号做希尔伯特包络解调的几行程序:
y=hilbert(x);
y1=abs(x+j*y);%不知道加上x是用途(应该是不用加x的,这样得到的就是25hz的频率)
Y1=fft(y1);
好像是有问题的,例如用一个仿真信号检验一下就可以发现:x1=(1+cos(2*pi*25*t));x2=cos(2*pi*400*t);
x1为调制信号,x2为载波信号,x1*x2得到一个调频信号。用上面三行程序做完发现调制频率25是出来了,关键是x2中的400变成了800hz。
不知道以前那个帖子里y1=abs(x+1i*y);加上x是什么用途,希望各位高手能解释一下。图在下面
谢谢!!

longing547 发表于 2012-12-15 22:32

自己顶一下,希望各位老师前辈给以指导

longing547 发表于 2012-12-15 22:36

我把这个模拟信号的程序给出来:
clear
fs=2048;
t=0:1/fs:2;
x1=(1+cos(2*pi*25*t));
x2=cos(2*pi*400*t);
for i=1:4096
x(i)=x1(i)*x2(i);
end
X=fft(x);
y=hilbert(x);
y1=abs(x+1i*y);
y1=detrend(y1);
Y1=fft(y1);
n=length(Y1);
m=1:n/2;
f1=fs*m/n;
figure(1)
plot(f1,abs(Y1(1:n/2)));
figure()
plot(f1,X(1:n/2));

yghit08 发表于 2012-12-16 11:43

不用加,可能你记错了!

longing547 发表于 2012-12-16 12:40

yghit08 发表于 2012-12-16 11:43 static/image/common/back.gif
不用加,可能你记错了!

当时应该是看到好几个帖子里都这么用的,正常应该是不用加的。加上不知道是不是有什么特别的用意,所以请高手能指点一下!!

yghit08 发表于 2012-12-16 13:56

本帖最后由 yghit08 于 2012-12-16 14:14 编辑

longing547 发表于 2012-12-16 12:40 static/image/common/back.gif
当时应该是看到好几个帖子里都这么用的,正常应该是不用加的。加上不知道是不是有什么特别的用意,所以请 ...
加了以后正确吗?为什么不相信自己做的结果!别人都那样不是你也可以那样的理由,这是小孩的理由和逻辑!

fzwxjtu 发表于 2012-12-16 21:40

本帖最后由 fzwxjtu 于 2012-12-16 21:43 编辑

matlab里面的hilbert函数得到直接就是原信号的解析信号,不用再去y=x+i*hilbert(x)了。
help hilbert:
HILBERTDiscrete-time analytic signal via Hilbert transform.
    X = HILBERT(Xr) computes the so-called discrete-time analytic signal
    X = Xr + i*Xi such that Xi is the Hilbert transform of real vector Xr.

longing547 发表于 2012-12-17 21:49

yghit08 发表于 2012-12-16 13:56 static/image/common/back.gif
加了以后正确吗?为什么不相信自己做的结果!别人都那样不是你也可以那样的理由,这是小孩的理由和逻辑!

嗯,我当然知道这样是i正确的,只是以为有什么特别的用处的。谢谢啦

longing547 发表于 2012-12-17 21:51

fzwxjtu 发表于 2012-12-16 21:40 static/image/common/back.gif
matlab里面的hilbert函数得到直接就是原信号的解析信号,不用再去y=x+i*hilbert(x)了。
help hilbert:
...

我之前是看过这个的,才认为是不应该加上原信号的。只是以为有什么特别的用意所以才问问大家的,多谢回复!
页: [1]
查看完整版本: 希尔伯特包络解调的疑惑