在尝试理解快速傅里叶变换时,我遇到了相位问题。我把它分解为下面的简单代码。计算一个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'命令并不能解决我的问题。
谢谢和最诚挚的问候,
潮湿
答案 0 :(得分:3)
FFT相位角为零的默认波形是余弦波,它在FFT窗口中以1.0开始和结束(不是在FFT窗口中以0.0或零交叉开始和结束的正弦波。)是因为通用命名法是调用FFT基矢量(复指数)的余弦函数分量" real"组件。正弦函数基础分量被称为"虚构",因此推断出非零复杂相位。
答案 1 :(得分:1)
应该是这样。如果你使用余弦,你会发现一个零阶段。
暂时忽略数字傅里叶变换并采用sin(x)
的良好旧傅里叶变换,我懒得走过,我们得到一对纯粹的虚构的三角洲。
至于一个直观的原因,回想一下,离散傅立叶变换是在复平面中沿着曲线平均一堆点,同时转动你想要计算的二进制位的角频率并使用对应于样品。如果在以自己的频率转动时采样正弦曲线,则得到的形状是以虚轴为中心的圆(见下文)。它的平均值当然会在假想轴上。
使用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
所以代码工作正常。