是的,可以仅使用实数来表示严格实数输入的FFT频域结果。
FFT结果中的那些复数仅是2个实数,都需要给它们提供具有长度和方向角(或幅值和相位)的结果向量的2D坐标。 FFT结果中的每个频率分量都可以具有唯一的幅度和唯一的相位(相对于FFT孔径中的某个点)。
单是一个实数不能代表幅度和相位。 如果丢掉相位信息,如果尝试使用iFFT重建信号,信号很容易使信号失真(信号不对称)。 因此,完整的FFT结果需要每个FFT仓2个实数。 根据常规约定,这2个实数在复杂数据类型的某些FFT中捆绑在一起,但是FFT结果可以轻松地(有些FFT确实)产生2个实矢量(一个用于余弦坐标,一个用于正弦坐标)。
还有一些FFT例程可以直接产生幅度和相位,但是它们的运行速度比产生复杂(或两个实数)矢量结果的FFT慢。 还有一些FFT例程,它们仅计算幅度并丢弃相位信息,但是它们运行的速度通常不会比一般的FFT处理之后要快。 也许他们以不可逆的代价为编码员节省了几行代码。 但是,很多库都不会费心去包含这些较慢且不太通用的FFT形式,而只是让编码器转换或忽略它们需要或不需要的内容。
另外,许多人认为使用复杂的算术可以使所涉及的数学更加优雅。
(添加:)此外,作为另一种选择,您可以考虑每个FFT结果仓中的两个分量,而不是将实数和虚数分量视为偶数和奇数分量。