即使算法的输入是一组离散的实数(整数),我们遇到的所有FFT实现都导致复杂的值(具有实部和虚部)。
是否不可能仅以实数表示频域?
FFT从根本上来说是基础的改变。 FFT改变原始信号的基础是一组正弦波。为了使该基础描述所有可能的输入,它必须能够表示相位和幅度。该阶段用复数表示。
例如,假设您对仅包含一个正弦波的信号进行FFT。根据相位,您可能会获得完全真实的FFT结果。但是,如果将输入的相位偏移几度,FFT输出还能如何表示该输入?
编辑:这是一个有点宽松的解释,但我只是想激发直觉。
FFT为您提供幅度和相位。幅度被编码为复数(sqrt(x ^ 2 + y ^ 2))的大小,而相位被编码为角度(atan2(y,x))。要从FFT获得严格的真实结果,输入信号必须具有偶数对称性(即x [n] = conj(x [N-n]))。
如果您只关心强度,则复数的大小足以进行分析。
是,可以仅使用实数来表示严格实数输入的FFT频域结果。
f
的FFT系数为x + i y
,则可以将x
视为该频率下的余弦系数,而y
是正弦系数。如果将这两个波添加到特定频率,则将获得该频率的相移波。该波的大小为sqrt(x*x + y*y)
,等于复系数的大小。x