为什么FFT产生复数而不是实数?(Why does FFT produce complex numb

2019-06-23 22:31发布

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

这难道不是可能代表唯一真正的数字来看频域?

Answer 1:

FFT是根本基础的变化。 到其中的FFT改变你的原始信号的基础是一组正弦波代替。 为了使该基础来描述所有它需要能够表示相以及振幅可能的输入; 相位被使用复数表示。

例如,假设你FFT仅包含单个正弦波的信号。 根据阶段你可能会得到一个完全真实的FFT结果。 但是,如果你几度改变你输入的阶段,还能怎么FFT输出表示输入?

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



Answer 2:

该FFT为您提供振幅相位。 振幅被编码为复数的幅度(SQRT(X ^ 2 + Y ^ 2)),而相位编码为角度(ATAN2(Y,X))。 有来自FFT严格真实结果,输入信号必须具有偶对称(即,X [n]的缀=(X [NN]))。

如果所有你关心的是强度,复数的幅度是足够的分析。



Answer 3:

是的,这可能代表只用实数严格实际输入的FFT频域结果。

在FFT结果那些复数仅仅只是2的实数,这是给你同时具有一个长度和一个方向角(或幅度和相位)的结果矢量的2D坐标都必需的。 并在FFT结果每频率分量可具有独特的振幅和唯一的相位(相对于在FFT孔径一些点)。

独自一个实数不能代表幅值和相位。 如果你扔掉的相位信息,这样很容易大规模如果您尝试使用IFFT重建它(和信号不是对称的)信号失真。 因此,一个完整的FFT结果需要每FFT仓2张实数。 这2件实数中通过共同约定一个复杂的数据类型,一些FFT的捆绑在一起,但FFT结果可以很容易地(和一些做的FFT)只是生产2个实向量(一个余弦坐标,一个用于正弦坐标)。

也有直接产生幅值和相位FFT程序,但他们比产生复杂的(或两个实)向量结果FFT的运行速度比较慢。 这里还存在仅计算幅度和刚刚扔掉的相位信息FFT程序,但它们通常不跑不是让你做你自己更一般的FFT后快。 也许他们节省了编码器的几行代码,在不被可逆的成本。 但是很多图书馆也懒得包括FFT这些慢,未及一般形式,只是让编码器转换或忽视他们所需要或不需要。

此外,许多人认为参与使用复杂的算术是很多更优雅的数学。

(由:)而且,作为另一种选择,可以考虑每个FFT结果仓的两个组成部分,而不是作为实部和虚部,作为偶数和奇数组件,无论是真实的。



Answer 4:

如果给定频率的FFT系数fx + iy ,你可以看看x为在该频率的余弦的系数,而y是正弦系数。 如果添加了这两种波对于特定的频率,您将获得在该频率相位移动的波; 这一波的幅度sqrt(x*x + y*y)等于所述复系数的幅度。

的离散余弦变换 (DCT)是傅立叶的相对变换其产生的所有实系数。 二维DCT被许多图像/视频压缩算法中。



Answer 5:

  1. 离散傅里叶变换是从根本复数在“频域”中的“时域”,以复数的矢量载体的转变(我用引号,因为如果你申请缩放因子权,DFT是自己的逆)。 如果您的输入是真实的,那么你就可以同时执行两个的DFT:取输入向量xy,并计算F(X + I Y)。 我忘了你后来是怎么分开的DFT,但我怀疑这是一些有关对称性和共轭复数。

  2. 的离散余弦变换排序的让你代表“频域”与实数,并且是常见的有损压缩算法(JPEG,MP3)。 令人惊讶的事情(我)是它的工作原理,即使它似乎丢弃相位信息,但是这也似乎让大多数信号处理目的用处不大(我不知道一个简单的方法做卷积/相关性与一个DCT)。

我可能已经得到了一些细节错了;)



文章来源: Why does FFT produce complex numbers instead of real numbers?