即使算法的输入是一组离散的实数(整数),我们遇到的所有FFT实现都将产生复杂的值(具有实部和虚部)。
不可能仅用实数来表示频域吗?
Answers:
FFT从根本上说是基础的改变。FFT改变原始信号的基础是一组正弦波。为了使该基础描述所有可能的输入,它必须能够表示相位和幅度。该阶段用复数表示。
例如,假设您对仅包含一个正弦波的信号进行FFT。根据相位,您可能会获得完全真实的FFT结果。但是,如果将输入的相位偏移几度,则FFT输出还能如何表示该输入?
编辑:这是一个有点松散的解释,但我只是想激发直觉。
是的,可以仅使用实数来表示严格实数输入的FFT频域结果。
FFT结果中的那些复数仅是2个实数,这两个都需要为您提供具有长度和方向角(或幅值和相位)的结果向量的2D坐标。FFT结果中的每个频率分量都可以具有唯一的幅度和唯一的相位(相对于FFT孔径中的某个点)。
单是一个实数不能代表幅度和相位。如果丢掉相位信息,如果尝试使用iFFT重建信号(信号不对称),则很容易使信号失真。因此,完整的FFT结果需要每个FFT仓2个实数。根据常规约定,这2个实数在复杂数据类型的某些FFT中捆绑在一起,但是FFT结果可以轻松地(某些FFT确实)产生2个实向量(一个用于余弦坐标,一个用于正弦坐标)。
也有直接产生幅度和相位的FFT例程,但是它们比产生复杂(或两个实数)矢量结果的FFT运行得慢。也有一些FFT例程,它们仅计算幅度并且仅丢弃相位信息,但是它们的运行速度通常不比让您在执行更通用的FFT之后自己执行的速度更快。也许他们以不可逆的代价为编码员节省了几行代码。但是很多库都不会费心去包含这些较慢且不太通用的FFT形式,而只是让编码器转换或忽略它们需要或不需要的内容。
此外,许多人认为参与是一个数学大量的使用复杂的算法(其中,对于严格的实际输入,余弦相关性,甚至部分的FFT结果放在实分量更优雅,和正弦相关或奇数组件FFT结果放入复数的虚数部分中。)
(添加:)此外,作为另一种选择,您可以考虑每个FFT结果仓的两个分量,而不是将它们视为实数和虚数分量,而将其视为偶数和奇数分量。
离散傅里叶变换从根本上说是从“时域”中的复数向量到“频域”中的复数向量的转换(我使用引号,因为如果您应用正确的比例因子,则DFT是它自己的逆)。如果输入是实数,则可以一次执行两个DFT:取输入向量x和y并计算F(x + i y)。我忘记了以后如何分离DFT,但是我怀疑这与对称性和复共轭有关。
的离散余弦变换排序的让你代表“频域”与实数,并且是在有损压缩算法(JPEG,MP3)常见的。(对我而言)令人惊讶的是,即使它似乎丢弃了相位信息,它仍然可以工作,但这似乎也使得它不能用于大多数信号处理目的(我不知道一种简单的方法来进行卷积/相关运算)。 DCT)。
我可能弄错了一些细节;)