是的,可以仅使用实数来表示严格实数input的FFT频域结果。
FFT结果中的那些复数仅仅是2个实数,这两个实数都需要给出具有长度和方向angular度(或幅度和相位)的结果向量的二维坐标。 并且FFT结果中的每个频率分量可以具有唯一的幅度和唯一的相位(相对于FFT孔径中的某个点)。
单靠一个实数不能代表量级和阶段。 如果丢弃相位信息,如果尝试使用iFFT重新创build信号(信号不对称),则很容易使信号大量失真。 所以一个完整的FFT结果需要每个FFT bin有两个实数。 这两个实数在一些复杂数据types的FFT中按照惯例被捆绑在一起,但是FFT结果可以很容易地(和一些FFT)产生2个实数vector(一个用于余弦坐标,一个用于正弦坐标)。
也有直接产生幅度和相位的FFT程序,但是它们比产生复杂(或两个实数)向量结果的FFT运行更慢。 还有一些FFT程序只计算幅度并丢弃相位信息,但通常运行速度不会比在更一般的FFT之后自己做。 也许他们会以不可逆的代价为代码保存几行代码。 但是很多库并不需要包含这些较慢和较不常用的FFTforms,只需让编码器转换或忽略他们需要或不需要的内容即可。
此外,许多人认为使用复杂的算术,涉及到的math更加优雅。
(增加:)而且,作为另一种select,您可以将每个FFT结果库的两个分量视为实数和虚数分量,而不是实数和偶数分量。