声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3215|回复: 5

[FFT] FFT变换法求两个信号的相位差

[复制链接]
发表于 2009-1-11 14:03 | 显示全部楼层 |阅读模式

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

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

x
我用FFT变换法求出来两个信号的相位差的误差很大啊,
n=1:100;
x=8*sin(2*pi*200/1000*n+pi/6);         %原信号
y=5*sin(2*pi*200/1000*n+pi/3);
X=fft(x);
Y=fft(y);
qx=atan(imag(X)./real(X));
qy=atan(imag(Y)./real(Y));
q=qy-qx;
plot(n,180*q/pi)
xlabel('信噪比')
ylabel('相位差(度)')
请问这样写程序有没有什么错误?为什么结果差距这么大?

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2009-1-11 14:52 | 显示全部楼层
信号x和y都是200的正弦信号(采样频率1000),要计算相位差只应计算200处的相位,而在其它的频率上没有信号,最多只是信号谱分析中的泄漏,求那些频率的相位差没有意义。如果只求200处的相位差,则能正确地计算出为pi/6。
 楼主| 发表于 2009-1-12 13:13 | 显示全部楼层
我明白了,十分感谢.
 楼主| 发表于 2009-1-14 18:37 | 显示全部楼层
如果我的两个信号都加上高斯噪声的话,每个频率上的相位差不就都有意义了么?
那为什么还是那么大的误差!L=100;                       %信号长度
nx=randn(1,L);             %正态高斯白噪声
ny=randn(1,L);
n=1:100;
x=5*sin(2*pi*200/1000*n+pi/6)+nx;         %原信号
y=8*sin(2*pi*200/1000*n+pi/3)+ny;

X=fft(x);
Y=fft(y);
qx=atan(imag(X)./real(X));
qy=atan(imag(Y)./real(Y));
q=qy-qx;
plot(n,q+30,'-');
xlabel('信噪比')
ylabel('相位差(度)')
legend('数字相关法')
发表于 2009-1-14 20:05 | 显示全部楼层
问题是楼主得到的那张图有什么意义? 因为除了在200HZ时的相位角是已知的,其它频率虽然有意义,但相位差应该多少呢?得到的图主要是噪声在各频率上的相位差,而在200HZ处相位差依然是30度。但如果楼主做这样的设置:
x=5*sin(2*pi*200/1000*n+pi/6)+nx;         %原信号
y=8*sin(2*pi*200/1000*n+pi/3)+nx;
可以看到除200HZ处相位差是30度,其它频率的相位差几乎为0。
 楼主| 发表于 2009-1-16 21:59 | 显示全部楼层
我知道,可是上面的程序运行出的结果并不符合理论上的几乎为0.
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-17 03:36 , Processed in 0.086261 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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