为什么FFT产生复数而不是实数?

问题描述 投票:77回答:5

即使算法的输入是一组离散的实数(整数),我们遇到的所有FFT实现都导致复杂的值(具有实部和虚部)。

是否不可能仅以实数表示频域?

algorithm math audio signal-processing fft
5个回答
83
投票

FFT从根本上来说是基础的改变。 FFT改变原始信号的基础是一组正弦波。为了使该基础描述所有可能的输入,它必须能够表示相位和幅度。该阶段用复数表示。

例如,假设您对仅包含一个正弦波的信号进行FFT。根据相位,您可能会获得完全真实的FFT结果。但是,如果将输入的相位偏移几度,FFT输出还能如何表示该输入?

编辑:这是一个有点宽松的解释,但我只是想激发直觉。


51
投票

FFT为您提供幅度相位。幅度被编码为复数(sqrt(x ^ 2 + y ^ 2))的大小,而相位被编码为角度(atan2(y,x))。要从FFT获得严格的真实结果,输入信号必须具有偶数对称性(即x [n] = conj(x [N-n]))。

如果您只关心强度,则复数的大小足以进行分析。


40
投票

是,可以仅使用实数来表示严格实数输入的FFT频域结果。


19
投票
如果给定频率f的FFT系数为x + i y,则可以将x视为该频率下的余弦系数,而y是正弦系数。如果将这两个波添加到特定频率,则将获得该频率的相移波。该波的大小为sqrt(x*x + y*y),等于复系数的大小。

9
投票
  1. 离散傅里叶变换从根本上讲是从“时域”中的复数向量到“频域”中的复数向量的转换(我使用引号,因为如果应用正确的比例因子,则DFT是它自己的反函数)。如果输入是真实的,则可以一次执行两个DFT:取输入向量

    x

© www.soinside.com 2019 - 2024. All rights reserved.