在Matlab中如何实现求两个信号的相位差?
在matlab中如何实现两个多频率成分信号在各频率点的相位差?多谢。 可对两信号分别作FFT变换,在频域上分别对每一个信号求出各频率点的初始相角,用相减的方法求出两信号之间在各频率点的相角之差。[ 本帖最后由 zhlong 于 2007-11-14 11:13 编辑 ] 我用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 的帖子
你对两信号用Hilbert变换求出瞬时相位再减回复 5楼 wisdomgirl 的帖子
请问下Hilbert变换怎么求出瞬时相位?
在网上找了好久都没有找到 信号为f;
在matlab中写下面语句:
H=hilbert(t); %Hilbert变换
ang=angle(H); %求折叠相位 ,这个就是瞬时相位
unwran=unwrap(ang);%求无折叠相位
回复 楼主 dlchen 的帖子
help cpsd它的相谱我觉得就是你要的答案 能不能给出具体的程序。 本帖最后由 VibInfo 于 2016-11-8 15:02 编辑
原帖由 lzk55882 于 2009-5-24 15:50 发表
help cpsd
它的相谱我觉得就是你要的答案
我也认为作互谱分析是最简单的方法,看它的相位谱就一目了然了 回复 1 # dlchen 的帖子
楼主好,我现在也遇到同样的问题,如何求两路同源信号的相位差,恳请赐教啊!!谢谢啦!! 楼主最后最后解决了吗? 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]