PDA

查看完整版本 : [求助] 傅立叶变换中的位相信息


xiaolobster
2008-07-18, 04:08
在谈傅立叶变换时,大家关注的往往是其幅度谱,那么位相谱的作用呢?

查阅了一些资料,说位相谱表示为信号的个频率成分的初始位相。那么我在matlab做了一个计算,代码如下:
t = 0:0.001:0.6;
x = sin(2*pi*50*t)+sin(2*pi*120*t);
%y = x + 2*randn(size(t));
y=x;
figure;
plot(1000*t(1:50),y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)')

Y = fft(y,512);
Pyy = Y.* conj(Y) / 512;
phase=angle(Y)*180./pi;
f = 1000*(0:256)/512;
figure;
plot(f,Pyy(1:257));
figure;
plot(f,phase(1:257));
title('Frequency content of y');
xlabel('frequency (Hz)');

这是matlab帮助文件中的一个例子,我稍加改动,增加了计算计算傅立叶变换后计算位相谱的语句及相应的作图。

从理论上讲,信号由两个初位相为零的正弦函数组成,那么画出的位相谱和频率的曲线至少在频率为50和120处为零,但发现位相值不为零,而且曲线很不规则。这是为什么?


请各位大侠指教,小女子先谢过了。

songzy41
2008-07-18, 20:36
采样频率是1000Hz,FFT后的频率分辨率df=1000/512=1.953Hz,所以在FFT变换后的谱线中没有哪一条谱线代表50Hz和120Hz的。所以当然找不到频率为50和120处的初始相角为零。

xiaolobster
2008-07-19, 00:02
采样频率是1000Hz,FFT后的频率分辨率df=1000/512=1.953Hz,所以在FFT变换后的谱线中没有哪一条谱线代表50Hz和120Hz的。所以当然找不到频率为50和120处的初始相角为零。

谢谢解答.我还有疑问:

如果找你所说,FFT变换后没有哪条谱线对应50Hz和120Hz,那其他频率所对应的位相值的含义是什么呢?另外fft(x,n)的含义是,如果n小于x的长度,计算时自动解取n长度的数据。所以,我觉得参加运算的数据范围有所缩小,但是频率分辨率为1000/601=1.66Hz。

songzy41
2008-07-19, 20:25
1,在信号中只有50Hz和120Hz的分量,其它频率的幅值或不存在、或由泄漏造成,但没有具体的意义,它们的相位也没有具体的意义;
2,可把n=500进行FFT变换,这时df=2,都有具体的谱线代表50Hz和120Hz的分量,也可计算出它们的初始相角;
3,如果还用n=601点来计算,则要用校正法来计算50Hz和120Hz分量的初始相角。

xiaolobster
2008-07-22, 04:43
1,在信号中只有50Hz和120Hz的分量,其它频率的幅值或不存在、或由泄漏造成,但没有具体的意义,它们的相位也没有具体的意义;
2,可把n=500进行FFT变换,这时df=2,都有具体的谱线代表50Hz和120Hz的分量,也可计算出它们的初始相角;
3,如果还用n=601点来计算,则要用校正法...

谢谢.我按照你的方法试了一下,果然是对的.但是还是有些问题存在的.

在输入信号中,我给出了几个初位相,然后再用FFT反求出位相.我发现,当输入的正弦信号的系数为正时,由angle算出的位相再加上90才与原来的初位相相同;如果输入正弦信号的系数是负的,由angle算出的位相再-90度,才与初始位相相同。知道这是为什么吗?那么如果我不知道输入信号系数的正负时,我该怎样处理这个问题呢?

songzy41
2008-07-22, 20:24
谢谢.我按照你的方法试了一下,果然是对的.但是还是有些问题存在的.

在输入信号中,我给出了几个初位相,然后再用FFT反求出位相.我发现,当输入的正弦信号的系数为正时,由angle算出的位相再加上90才与原来的初位相相同;如果输入正弦信号的系数是负的,由angle算出的位相再-90度,才与初始位相相同。知道这是为什么吗?那么如果我不知道输入信号系数的正负时,我该怎样处理这个问题呢?

用angle求出的相位是针对cos信号的,和sin信号相差90度。