为什么 FFT 会生成复数而不是实数?
简答:短回答
FFT 为什么会产生复数而不是实数?
FT 结果为复数数组的原因在于系数计算中涉及到了复指数乘法器。最终结果因此为复数。FT 使用该乘法器来将信号与多个频率进行相关性分析。原理在下文中进一步详述。
不能用实数表示频域吗?
当然,FT 返回的复系数的 1D 数组可以用由实值构成的 2D 数组来表示,这可以是笛卡尔坐标 x 和 y,也可以是极坐标 r 和 θ(更多 信息)。但是...
复指数形式是信号处理中最适合的形式
仅有实数据并不是很有用。
一方面,已经可以使用函数之一real、imag、abs和angle获取这些坐标。
另一方面,这种孤立的信息非常有限。例如,如果我们添加两个振幅和频率相同但相位相反的信号,则结果为零。但是,如果我们放弃相位信息,我们只是将信号加倍,这是完全错误的。
与普遍的观念相反,使用复数并不是因为这样的数字是一个方便的容器,可以容纳两个独立的值。这是因为处理周期信号始终涉及三角学,并且有一种简单的方法可以从正弦和余弦移动到更简单的复数代数:欧拉公式。
因此,大多数时候信号只是转换为其复指数形式。例如,具有10 Hz频率、3振幅和π/4弧度相位的信号:
可以用 x = 3.ei(2π.10.t+π/4) 来描述。
将指数拆分:x = 3.ei.π/4 乘以 ei.2π.10.t,其中 t 是时间。
第一个数字是称为相量的常数。一个常见的简洁形式是 3∠π/4。第二个数字是随时间变化的变量,称为载波。
这个信号 3.ei.π/4 times ei.2π.10.t 可以很容易地绘制出来,可以作为余弦(实部)或正弦(虚部):
from numpy import arange, pi, e, real, imag
t = arange(0, 0.2, 1/200)
x = 3 * e ** (1j*pi/4) * e ** (1j*2*pi*10*t)
ax1.stem(t, real(x))
ax2.stem(t, imag(x))
现在,如果我们看一下FT系数,我们会发现它们是相量,它们不嵌入频率,这只与采样数量和采样频率有关。
实际上,如果我们想在时域中绘制FT分量,我们必须单独从找到的频率创建载波,例如通过调用 fftfreq。有了相量和载波,我们就有了谱组成部分。
相量是一个向量,而向量可以旋转
通过使用 real 和 imag 函数提取直角坐标,上面使用的相量 3.e(i.π/4),也是复数 2.12 + 2.12j(对于科学家和工程师来说i是j)。这些坐标可以在平面上绘制,其中垂直轴表示i(左侧):
该点也可以表示一个向量(中心)。极坐标可以用来代替笛卡尔坐标(右图)。极坐标可以通过abs和angle提取。很明显,这个向量也可以表示为相量3∠π/4(简写形式为3.e(i.π/4))。
这个向量的提醒是为了介绍相量的操作方式。假设我们有一个振幅为1的实数,它不小于角度为0的复数,以及一个相量(x∠0)。我们还有第二个相量(3∠π/4),我们想要这两个相量的乘积。我们可以使用一些三角学的笛卡尔坐标计算结果,但这很繁琐。最简单的方法是使用复指数形式:
我们只需要将角度相加并将实数系数相乘:1.e(i.0) 乘以 3.e(i.π/4) = 1x3.ei(0+π/4) = 3.e(i.π/4)。
我们可以直接写成:(1∠0) 乘以 (3∠π/4) = (3∠π/4)。
无论如何,结果就是这个:
实际效果是将实数转化并缩放其大小。在傅里叶变换中,实数是样本幅度,乘数的大小实际上为1,因此这对应于这个操作,但结果是相同的:
这个长的介绍是为了解释FT背后的数学原理。
傅里叶变换如何创建谱系数
FT的原理是,对于每个谱系数进行计算:
将每个样本振幅乘以不同的相位器,使得角度从第一个样本到最后一个递增,
求出所有先前产品的总和。
如果有N个样本xn(0到N-1),则需要计算N个谱系数Xk。按照FT方程式计算系数Xk涉及将每个样本振幅xn乘以相位器e-i2πkn/N并求和。
在N个单独的产品中,乘数角度根据2π.n/N和k而变化,这意味着角度从0到2π变化,现在忽略k。因此,在执行这些产品时,我们将可变实振幅乘以一个大小为1,角度从0到完整圆的相量。我们知道这种乘法会旋转和缩放实振幅:
来源: 波恩大学物理学院的A. Dieckmann
做这个求和实际上是试图将信号样本与相量角速度相互关联,相量角速度指的是其角度随n/N变化的快慢。结果告诉我们这种关联有多强(幅度),以及它有多少同步性(相位)。
对于k个谱系数,这个操作被重复计算(一半为k负,一半为k正)。随着k的变化,角度增量也会变化,因此相互关联会针对另一个频率进行检查。
结论
傅里叶变换的结果既不是正弦波也不是余弦波,它们是描述相关性的相量,相量是一个常量,表示为复指数,嵌入了幅度和相位。乘以载波,载波也是一个复指数,但它是可变的,取决于时间,在时域中它们绘制螺旋线。
来源
当这些螺旋体被投影到水平平面上时,通过取FT结果的实部,绘制的函数是余弦函数。当它们被投影到垂直平面上时,通过取FT结果的虚部,绘制的函数是正弦函数。相位确定了螺旋体开始的角度,因此没有相位,无法使用逆FT重建信号。
复指数乘法器是将振幅变化的线性速度转换为角速度(频率乘以2π)的工具,所有这些都围绕着欧拉公式将正弦波和复指数联系起来。