Python fft()返回值振幅是多少;相移还是角度?
fft()返回一个复杂数组。。。。这个复数是什么意思? 我想真正的部分是振幅! 虚部是相移?相位角?或者别的什么Python fft()返回值振幅是多少;相移还是角度?,python,numpy,fft,Python,Numpy,Fft,fft()返回一个复杂数组。。。。这个复数是什么意思? 我想真正的部分是振幅! 虚部是相移?相位角?或者别的什么 我计算出数组中的位置表示频率。这不是真正的编程问题,也不是特定于numpy。简而言之,复数的绝对值(sqrt(x.real**2+x.imag**2),或numpy.abs())是振幅 更详细地说,当您将FFT应用于数组X(例如,该数组包含函数X(t)在t的不同值处的多个样本)时,您尝试将其表示为“平面波”exp(i w t)(其中i是一个虚单位,w是一个实值频率)具有不同的w值。也
我计算出数组中的位置表示频率。这不是真正的编程问题,也不是特定于
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返回与某些固定频率相对应的系数A
,B
等w1
,w2
等(在numpy
中,可以从中获取其值)
现在,这些系数通常是复杂的。复数A
可以表示为“振幅”和“相位”的组合,如下所示:
其中,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理论的知识,例如,有大量的信息。对于我所知道的任何DFT实现,你获得的值数组都是复数数组。复数有一个与振幅相对应的范数。根据实部和虚部,它在复平面上有一个角度(有时称为参数)。该角度对应于相位。复杂平面(从): 因此,数组包含实部和虚部的
x
和y
。您对角度θ感兴趣。可以这样计算:
tan(θ)=y/x
theta=arctan(y/x)
这将产生以弧度为单位的角度。您可能还想看看。给定频率下的幅值r表示原始信号中该频率的量。复数参数表示相位角θ
x+i*y=r*exp(i*theta)
其中x和y是numpy FFT返回的数字。一般来说,要解释FFT,您需要绘制20*log(abs(FFT(x)),这会获取复数的大小,并将其放入dB scaleTanks中以获得答案……我试图从(时间,amp)中获取顶部(频率,amp,相位)通过FFT,然后使用生成的freq++绘制正弦波。不同之处在于我想在样本的时间范围之上/之后绘制。
r exp(i p) exp(i w t) == r exp(i (w t + p))