numpy.fft() return 值振幅 + 相移或角度是多少?
numpy.fft() what is the return value amplitude + phase shift OR angle?
np.fft.fft() returns一个复数数组....复数是什么意思?
我想真正的部分是振幅!
虚部是相移 ?相位角 ?或者别的什么!
我发现数组中的位置代表频率。
这不是真正的编程问题,也不特定于 numpy
。简而言之,复数的绝对值(sqrt(x.real**2 + x.imag**2)
,或numpy.abs()
)就是振幅。
更详细地说,当您将 FFT 应用于数组 X
(例如,包含函数 X(t)
的多个样本 t
的不同值)时,您尝试将其表示为 "plane waves" exp(i w t)
(其中 i
是虚数单位,w
是实值频率)与 [=21 的不同值的总和=].也就是说,你想要像
这样的东西
X = A exp(i w1 t) + B exp(i w2 t) + ...
FFT returns 你这些系数 A
, B
等对应于一些固定频率 w1
, w2
等(在 numpy
, 您可以从 fftfreq()) 中获取它们的值。
现在,这些系数通常是复数。复数 A
可以表示为 "amplitude" 和 "phase" 的组合:
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。
就我所知的任何 DFT 实现而言,您获得的值数组是一个复数数组。复数有一个范数,它对应于振幅。根据实部和虚部,它在复平面(有时称为参数)中有一个角度。这个角度对应于相位。复平面(来自Wolfram docs):
因此,您的数组包含 x
和 y
,即实部和虚部。您对角度 theta
感兴趣。可以这样计算:
tan(theta) = y/x
theta = arctan(y/x)
这会产生以弧度为单位的角度。您可能还想看看 numpy.angle().
给定频率的幅度 r 表示原始信号中该频率的量。复参数表示相角θ。
x + i*y = r * exp(i*theta)
其中 x 和 y 是 numpy FFT returns 的数字。
np.fft.fft() returns一个复数数组....复数是什么意思? 我想真正的部分是振幅! 虚部是相移 ?相位角 ?或者别的什么!
我发现数组中的位置代表频率。
这不是真正的编程问题,也不特定于 numpy
。简而言之,复数的绝对值(sqrt(x.real**2 + x.imag**2)
,或numpy.abs()
)就是振幅。
更详细地说,当您将 FFT 应用于数组 X
(例如,包含函数 X(t)
的多个样本 t
的不同值)时,您尝试将其表示为 "plane waves" exp(i w t)
(其中 i
是虚数单位,w
是实值频率)与 [=21 的不同值的总和=].也就是说,你想要像
X = A exp(i w1 t) + B exp(i w2 t) + ...
FFT returns 你这些系数 A
, B
等对应于一些固定频率 w1
, w2
等(在 numpy
, 您可以从 fftfreq()) 中获取它们的值。
现在,这些系数通常是复数。复数 A
可以表示为 "amplitude" 和 "phase" 的组合:
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。
就我所知的任何 DFT 实现而言,您获得的值数组是一个复数数组。复数有一个范数,它对应于振幅。根据实部和虚部,它在复平面(有时称为参数)中有一个角度。这个角度对应于相位。复平面(来自Wolfram docs):
因此,您的数组包含 x
和 y
,即实部和虚部。您对角度 theta
感兴趣。可以这样计算:
tan(theta) = y/x
theta = arctan(y/x)
这会产生以弧度为单位的角度。您可能还想看看 numpy.angle().
给定频率的幅度 r 表示原始信号中该频率的量。复参数表示相角θ。
x + i*y = r * exp(i*theta)
其中 x 和 y 是 numpy FFT returns 的数字。