在一段正弦波上的Matlab fft返回-pi / 2的相位。为什么?

时间:2016-08-10 18:31:35

标签: matlab fft phase

在尝试理解快速傅里叶变换时,我遇到了相位问题。我把它分解为下面的简单代码。计算一个50Hz正弦波的周期,并应用fft算法:

    fs = 1600;
    dt = 1/fs;
    L  = 32;      
    t=(0:L-1)*dt; 
    signal  = sin(t/0.02*2*pi); 

    Y = fft(signal);
    myAmplitude = abs(Y)/L *2 ;
    myAngle     = angle(Y);

    Amplitude_at_50Hz = myAmplitude(2);
    Phase_at_50Hz     = myAngle(2);

虽然振幅正常,但我不明白相位结果。为什么我得到-pi / 2?由于只有一个纯正弦波,我预计相位为0.要么我的数学错误,要么我使用Matlab,或两者都有...(一个自制的fft给了我相同的结果。所以我想我是绊倒我的数学。)

这里有一篇类似的帖子:MATLAB FFT Phase plot。但是,建议的'unwrap'命令并不能解决我的问题。

谢谢和最诚挚的问候,

潮湿

3 个答案:

答案 0 :(得分:3)

FFT相位角为零的默认波形是余弦波,它在FFT窗口中以1.0开始和结束(不是在FFT窗口中以0.0或零交叉开始和结束的正弦波。)是因为通用命名法是调用FFT基矢量(复指数)的余弦函数分量" real"组件。正弦函数基础分量被称为"虚构",因此推断出非零复杂相位。

答案 1 :(得分:1)

应该是这样。如果你使用余弦,你会发现一个零阶段。

暂时忽略数字傅里叶变换并采用sin(x)的良好旧傅里叶变换,我懒得走过,我们得到一对纯粹的虚构的三角洲。

至于一个直观的原因,回想一下,离散傅立叶变换是在复平面中沿着曲线平均一堆点,同时转动你想要计算的二进制位的角频率并使用对应于样品。如果在以自己的频率转动时采样正弦曲线,则得到的形状是以虚轴为中心的圆(见下文)。它的平均值当然会在假想轴上。

polar sine is circle

使用wolfram alpha制作的情节。

答案 2 :(得分:1)

正弦函数的傅里叶变换,例如A * sin((2 * pi * f)* t)其中f是频率,将在+ f和-f处的频域中产生2个幅度为A / 2的脉冲,其中相关的阶段分别是-pi / 2和pi / 2。 您可以在这里查看其证据: http://mathworld.wolfram.com/FourierTransformSine.html

所以代码工作正常。