一分钟重新理解傅里叶变换
Table of Contents
1. 总览
傅里叶变换一般是指如下的公式:
\(f'(k)=\sum_{x=a}^{b-1}{f(x)\cdot e^{-2\pi ik(x-a)/(b-a)}}\)
where:
- \([a,b)\) 是原函数变量x所处的区间
- \(k\) 是新的函数变量
或者其连续形式:
\(f(\omega)=\int_{a}^{b}f(t)e^{-2\pi\omega (t-a) /(b-a)}\)
where:
- \([a,b)\) 是原函数变量t所处的区间
- \(\omega\) 是新的函数变量
或者其线性代数形式:
\(x'=F_{N}x\), with \(F_{N}=\) 为一个特殊的可逆矩阵,in which \(F_{N,mn}=e^{-2\pi i mn /N}\).
where:
- x是一个N维列向量
那么应该如何理解上述的三个公式呢?
2. 理解 \(e^{ix}\)
理解上述的任何一个公式都需要理解为何要引入一个奇怪的指数项 \(e^{ix}\) 以及这个指数项代表着什么。
然而我认为这个目标很困难以及反直觉,因为该公式首先莫名其妙引入了一个虚数i, 这就代表这个公式的结果里很可能也包含虚部,也就是说 \(e^{ix}\) 是一个复数。这是第一个point:一旦引入了这一套语言,本质上原本完全由实数所表达的空间就已经变质成了一个复数,——亦即一个二维向量,或者说一个带有着方向性(相位)的实数。
那么现在,考察一下作为复数的 \(e^{ix}\) 拥有哪些性质:
首先,这个复数的模长永远为1.
这就他妈的非常奇怪了对吧。因为 \(x\) 明明可以是一个非常大的数字,而指数函数是一个单调递增且呈现出指数性质增长的函数,而虚部无论如何也算是二维空间中的一个维度,那么这个单纯增长的虚部为何会导致一个恒定的模长呢?
原因很简单,因为这个表达是 \(e^{ix}\) 而非 \(i e^{x}\) . 而显然交换这个虚部是有条件的。 欧拉意识到
\(e^{ix}=i sinx+cosx\) (也就是表示角度是x,长度是1)
可是这个东西的发明仅仅是告诉了一个事实,并没有提供对于 \(e^{ix}\) 的任何直觉尽管人们可以通过这个模长相位角到实部虚部的转化直接在线性空间里理解这一切。
如果试图理解 \(e^{ix}\) , 至少应该先理解指数。在前面所描述的中学形式的指数爆炸之外,指数的定义其实是一个极限:
\(e^{x}=\lim_{N\rightarrow\infty}(1+x/N)^{N}\)
这个定义表明,指数是指一个极限,这个极限是一个无穷多个的连乘,是无数多个仅仅比1要大一点点的数字的连乘,同时连乘的量级与这相比于单位元所增长的量级正好(负)相关。而指数函数则是说,对于任一输入,查看将该输入切分为无穷多份之后逐步引入产生的变化率。
理解了这个,就能分别对指数的实部和虚部上的增长进行思考了。
对于实部而言,每一步所乘的都是(1+x/N)这样一个大于1的数字。而这个数字很幸运必然是一个实数。当x增长时,该式变大,所以反映在横坐标为x纵坐标为e^x上是一个指数增长曲线,反映在x轴为实部y轴为虚部的坐标系上是一个不断向右刺激的东西。
可是对于我们所要考虑到虚部: \(e^{ix}=\) 每步都迭代则是(1+ix/N),这个公式极其优美地包含了一个实部1和一个虚部ix/N, 对于任何一个东西,乘上这么一个东西就相当于在由实部和虚部构成的二维线性空间中做了一次变换。 更具体地: 这个变动是一个类似正交的矩阵,即只改变方向,微微改变大小。证明很简单,实部^2+虚部^2,而虚部在N→ \infty时为0.
旋转两次:
\((1+ix/N)(1+ix/N)=1-x^{2}/N^{2}+2ix/N\)
…
可以发现模长不会随着相乘而增长,原因就是因为 \(i^2=-1\)
直觉来看, \(e^{ix}\) 其辐长不会随着x增长的原因是因为作为实数的1其增长率被按在了虚部上,从而导致与其增长指数倍,不如进行角度为x的永远垂直于上一次的角度对微小旋转。
下一个问题:为什么旋转一个角度,如此的相位必须要由指数表达?为什么不能通过其他运算表达?指数运算的特殊之处在于什么?
答:因为“旋转”这个词的含义是“让一个点在每下一个瞬间都按照完全垂直于当前方向的方向移动”,这里的无数个微弱的瞬间就是无限多次的累加,每一次都基于上一次的角度再进行 对应的就是连乘, 而垂直对应的就是实部与虚部二者之间的操作关系,而移动的角度对应的便是x的数值。
由此可以直观理解:
| \(x=?\) | \(e^{ix}=?\) | 角度 |
|---|---|---|
| 0 | 1 | 0度 |
| \(\pi/2\) | i | 90度 |
| \(\pi\) | -1 | 180度 |
| \(3\pi/2\) | -i | 270度 |
| \(2\pi\) | 1 | 360度 |
由此可以理解,对一个实数变量$y$乘以$e^{ix}$其实本质就是对其进行升维,使得其变成二维空间下一个辐长为y且角度为x的新变量。也就是通过引入一个新的变量来赋予一个数字以方向性。
对于一个复数,乘以这个分量的本质便是对其进行旋转。
3. 理解 \(e^{2\pi ikx/Q}\)
在上述理解的基础上,就可以开始思考傅里叶变换里最重要的一坨东西 \(e^{2\pi ikx/(b-a)}\) 了。这个公式按照物理含义最容易理解的表达应该是:
\(e^{i \left( (x/(b-a) \cdot 2\pi) \cdot k \right)}\)
解释:
- 首先我们知道这是表达了一个角度。
- 对于x, 我们知道这是已有的输入变量,而b-a是x的范围,由此$x/(b-a)$这一部分事实上构造出了一个“相位”的概念,即当这个部分等于0时,代表对这个序列的开始,当这个结果等于1时,代表结束,中间的每一个数字都是代表这个序列的一个状态。
- 对于 \(x/(b-a)\), 在此基础上乘 \(2\pi\) 则将这样的相位比例具体化为了角度。换句话说 \(x/(b-a)\cdot 2\pi\) 本质上描述了一个角度,当x/(b-a)=0.5 时,这一项就是180度。
- 在上一项的基础上,再乘上一个变量k, 本质上就是去控制上述相位角角度的旋转速度,也就是频率。理解k需要在上述基础上再进行一次变形:
\(e^{i \left( x \cdot 1/((b-a)/k) \cdot 2\pi \right)}\). 即k作为频率,将原来的单个周期切分成了k个更短促的周期,使得x产生的相位差可以MOD 以达到不同的输入之间的重复性。
总结就是: \(e^{i \left( (x/(b-a) \cdot 2\pi) \cdot k \right)}\) 描述了按照kx在其范围中的角度逆时针旋转。
4. 理解傅里叶变换
现在回到傅里叶变换的公式:
\(f'(k)=\sum_{x=a}^{b-1}{f(x)\cdot e^{-2\pi ik(x-a)/(b-a)}}\) 1
这个公式就代表:说对于一个旋转速度的控制比率k, 对f(x)这一个向量的所有数值进行叠加,然而这种叠加是有方向的,方向由这些元素在f(x)存在的位置(即x)与k共同决定。 但是即使这样,一个人还是无法理解傅里叶变换为什么被提出,以及这个公式为什么要这样写,以及为何要有一个负号。
试解答之。
现在考虑一个问题:一个函数g(x)的序列是一个复数序列,其中似乎蕴含着某个周期性规律但未知。换句话说,我们仅仅能观察到g(x)的幅值随着时间的变动规律,并且记录之为f(x),但是我们想探究g(x)的这个序列里面是否隐藏着一个近似或类似于$e^{ix}$的波形式,即周期性函数形式。
为此,当我们采集了g(x)的一段振动幅度序列之后,我们可以做的方式便是使用不同的拆分周期k/(b-a)来猜测其内可能的波(们)的周期,然后将这一段波里的每一个点的角度找到,然后加负号以逆向旋转(即顺时针旋转)到x+坐标轴上(更确切地说,应该是以a处的初始相位作为初始相加轴的一个奇怪的轴)再相加。这样,相加的数值就反映了f(x)体内蕴含的周期性函数与我们所设计的这个 \(e^{ik/(b-a)2\pi x}\) 的这个k为常数x为变量的周期性函数二者之间的契合程度。由此其实也就变相地逆向推导出了以 \(f(x)\) 为振动幅度的隐而不见的复数函数g(x)的周期性——也就是其频率。
由此,通过傅里叶变换和控制k,我们就可以提取到f(x)里面那些处在同一个频率规律下周期性振动的结果。
对于其线性代数形式:
\(x'=F_{N}x\), with \(F_{N}\) 为一个特殊的可逆矩阵,in which \(F_{N,mn}=e^{-2\pi i mn /N}\).
这里也是同一个道理。此处的i便是上面的k, 此处的j便是上面的x.
由此,傅里叶变换构造了一个极其特殊的旋转矩阵来对空间做可逆的变换。
然而不幸的是,f(x)其实未必一定要充当一个幅值函数。 这种想法主要是由于经典物理里确实不存在虚数。 在量子计算中,由于各个量子态之间确实存在方向性,所以他们使得f(x)本身也可以是复数函数,由此傅里叶变换同样也适用。
Footnotes:
此处写的公式里本来是 \((x-a)/(b-a)\) 而非 \(x/(b-a)\). 前者更规范,代表去掉初始的相位差,认为开始处为0.