dlchen 发表于 2007-8-17 11:30

在Matlab中如何实现求两个信号的相位差?

在matlab中如何实现两个多频率成分信号在各频率点的相位差?多谢。

songzy41 发表于 2007-8-17 14:56

可对两信号分别作FFT变换,在频域上分别对每一个信号求出各频率点的初始相角,用相减的方法求出两信号之间在各频率点的相角之差。

[ 本帖最后由 zhlong 于 2007-11-14 11:13 编辑 ]

Hyowinner 发表于 2009-1-11 10:55

我用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('相位差(度)')
请问这样写程序有没有什么错误?为什么结果差距这么大?

[ 本帖最后由 Hyowinner 于 2009-1-11 10:59 编辑 ]

Spire 发表于 2009-4-10 16:24

你应该选取对应频率成分,再相减。

wisdomgirl 发表于 2009-4-28 15:06

回复 地板 Spire 的帖子

你对两信号用Hilbert变换求出瞬时相位再减

lyvv 发表于 2009-5-21 10:22

回复 5楼 wisdomgirl 的帖子

请问下
Hilbert变换怎么求出瞬时相位?
在网上找了好久都没有找到

yuxma 发表于 2009-5-24 15:38

信号为f;
在matlab中写下面语句:
H=hilbert(t); %Hilbert变换
ang=angle(H); %求折叠相位 ,这个就是瞬时相位
unwran=unwrap(ang);%求无折叠相位

lzk55882 发表于 2009-5-24 15:50

回复 楼主 dlchen 的帖子

help cpsd
它的相谱我觉得就是你要的答案

future05 发表于 2009-10-2 18:32

能不能给出具体的程序。

mao 发表于 2009-10-4 10:14

本帖最后由 VibInfo 于 2016-11-8 15:02 编辑

原帖由 lzk55882 于 2009-5-24 15:50 发表
help cpsd
它的相谱我觉得就是你要的答案
我也认为作互谱分析是最简单的方法,看它的相位谱就一目了然了

z_c217 发表于 2012-3-14 16:40

回复 1 # dlchen 的帖子

楼主好,我现在也遇到同样的问题,如何求两路同源信号的相位差,恳请赐教啊!!谢谢啦!!

rencs1 发表于 2012-3-15 08:46

楼主最后最后解决了吗?

Ayaphis 发表于 2012-10-5 19:17

Hyowinner 发表于 2009-1-11 10:55 static/image/common/back.gif
我用FFT变换法求出来的误差很大啊,
n=1:100;
x=8*sin(2*pi*200/1000*n+pi/6);         %原信号


这个算法的问题不在于误差

根据复变函数的知识,相位p = angle (w)
是多值函数
这个函数的主值值域是(-pi,pi)
记主值为 p0,这个函数全部的值为 p0+k*2*pi;其中k为整数
于是上文算法得到的相位差p2-p1的值域为(-2*pi,2*pi)
要使值域在(-pi,pi),由复变函数知识,可以先对相位做除法运算
dp =angle (w2/w1)
由复变函数知识有angle(w2/w1) = angle(w2 *conj(w1))
即把
qx=atan(imag(X)./real(X));
qy=atan(imag(Y)./real(Y));
q=qy-qx;
改为
q = angle(qy *conj(qj))


但是这样算出来的也是主值,而不是真实值
一般碰到这种问题,真实值只能靠相位谱的连续性和经验判断了
页: [1]
查看完整版本: 在Matlab中如何实现求两个信号的相位差?