numpy.fft()返回值幅度+相移OR角度是多少?

时间:2015-02-19 22:54:38

标签: python numpy fft

np.fft.fft()返回一个复数数组....复数的含义是什么? 我想真正的部分是振幅! 虚部是相移?相位角 ?或者别的什么!

我发现数组中的位置代表了频率。

3 个答案:

答案 0 :(得分:11)

这不是一个编程问题,并不是numpy特有的。简而言之,复数(sqrt(x.real**2 + x.imag**2)numpy.abs())的绝对值是幅度。

更详细的说,当您将FFT应用于数组X(例如,包含不同X(t)值的函数t的多个样本时)时,您尝试将它表示为平面波的总和" exp(i w t)(其中i是一个虚数单位,w是一个实值频率),其值w不同。也就是说,你想要像

这样的东西
X = A exp(i w1 t) + B exp(i w2 t) + ...

FFT会返回与某些固定频率AB等对应的系数w1w2等(在numpy中,您可以得到它们来自fftfreq())的值。

现在,这些系数通常很复杂。复数A可以表示为"幅度"的组合。和"阶段"为:

A = r exp(i p)

其中r== numpy.abs(A))是幅度,p== numpy.angle(A))是相位,都是实数值。如果将其替换为FFT扩展中的术语,则得到

r exp(i p) exp(i w t) == r exp(i (w t + p))

因此,幅度r改变了术语的绝对值,而阶段p也改变了阶段。因此,为了从FFT结果中获得幅度数组,您需要将numpy.abs应用于它。


但我真的建议你阅读有关FFT理论的内容,其中包含大量信息,例如wiki

答案 1 :(得分:5)

对于我所知道的任何DFT实现,您获得的值数组是一个复数数组。复数具有一个范数,它对应于幅度。根据实部和虚部,它在复平面上有一个角度(有时称为参数)。该角度对应于相位。复杂的平面(来自Wolfram docs):

enter image description here

因此,您的数组包含xy,实部和虚部。您对角度theta感兴趣。可以这样计算:

tan(theta) = y/x

theta = arctan(y/x)

这产生以弧度表示的角度。您可能还想查看numpy.angle()

答案 2 :(得分:2)

给定频率下的幅度r表示原始信号中该频率的量。复数参数表示相角θ,

x + i * y = r * exp(i * theta)

其中x和y是numpy FFT返回的数字。