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

时间:2012-04-24 19:15:52

标签: algorithm math audio signal-processing fft

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

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

6 个答案:

答案 0 :(得分:72)

FFT基本上是基础的变化。 FFT改变原始信号的基础是一组正弦波。为了使该基础描述所有可能的输入,它需要能够表示相位和幅度;相位用复数表示。

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

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

答案 1 :(得分:44)

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

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

答案 2 :(得分:34)

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

FFT结果中的那些复数只是2个实数,这两个实数都需要给出具有长度和方向角(或幅度和相位)的结果向量的2D坐标。 FFT结果中的每个频率分量都可以具有唯一的幅度和唯一的相位(相对于FFT孔径中的某个点)。

单独一个实数不能代表幅度和相位。如果您丢弃相位信息,如果您尝试使用iFFT重新创建信号(并且信号不对称),则可能会轻易地使信号失真。因此,完整的FFT结果需要每个FFT bin 2个实数。这两个实数按照通用约定在一些复杂数据类型的FFT中捆绑在一起,但FFT结果很容易(有些FFT)只生成2个实数向量(一个用于余弦坐标,一个用于正弦坐标)。 p>

还有直接产生幅度和相位的FFT例程,但它们比产生复杂(或两个真实)矢量结果的FFT运行得慢。还有一些FFT例程只能计算幅度并且只是丢弃相位信息,但是它们通常运行速度不会比在更通用的FFT之后自己完成。也许他们以不可逆的代价为代码保存了几行代码。但是很多库都不愿意包含这些较慢且不那么通用的FFT形式,只需让编码器转换或忽略它们需要或不需要的东西。

另外,许多人认为使用复杂的算法使数学成为一个很多更优雅。

(已添加:)而且,作为另一种选择,您可以考虑每个FFT结果箱的两个组件,而不是真实和虚构组件,作为偶数和奇数组件,都是真实的。

答案 3 :(得分:17)

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

Discrete Cosine Transform(DCT)是傅立叶变换的相对值,它产生所有实数系数。许多图像/视频压缩算法都使用二维DCT。

答案 4 :(得分:9)

  1. 离散傅立叶变换基本上是从“时域”中的复数向量到“频域”中的复数向量的转换(我使用引号,因为如果你应用正确的缩放因子,DFT是它自己的逆)。如果你的输入是真实的,那么你可以一次执行两个DFT:取输入向量 x y 并计算F( x + < EM> I 的ý)。我忘记了你之后如何分离DFT,但我怀疑它是关于对称性和复杂共轭的东西。

  2. discrete cosine transform sort-of允许您使用reals表示“频域”,并且在有损压缩算法(JPEG,MP3)中很常见。令人惊讶的是(对我而言)即使它似乎丢弃了相位信息,它仍然有效,但这似乎也使得它对大多数信号处理目的没那么有用(我不知道一个简单的方法来进行卷积/相关DCT)。

  3. 我可能错了一些细节;)

答案 5 :(得分:2)

就您提出这个问题的方式而言,我相信您正在寻找一种更直观的思维方式,而不是数学答案。我来自机械工程背景,这就是我对傅立叶变换的看法。我参考钟摆将傅立叶变换上下文化。如果我们只有钟摆的 x 速度与时间的关系,并且我们被要求估计钟摆的能量(或钟摆的力源),傅立叶变换给出了完整的答案。由于通常我们观察到的只是 x 速度,我们可能会得出结论,钟摆只需要提供与其动能的正弦变化相等的能量。但钟摆也有势能。该能量与势能异相 90 度。因此,为了跟踪势能,我们只是跟踪(动能)实分量的 90 度异相部分。虚部可以被认为是“潜在速度”,它代表了源必须提供以强制振荡行为的势能的表现。有用的是,这可以很容易地扩展到电容器和电感器也以“潜在形式”存储能量的电气环境。如果信号不是正弦的,当然变换会尝试将其分解为正弦。我认为这是假设最终信号是由无限源的组合作用产生的,每个源都具有不同的正弦曲线行为。我们试图确定的是在每个时刻产生最终观测信号的每个源的强度和相位。

PS:1)最后两个陈述通常是我对傅立叶变换本身的看法。 2)我说的是势速度而不是势能,因为变换通常不会改变原始信号或物理量的维度,因此它不能从表示速度转换为能量。