"傅里叶分析:用圆画羊驼" 是 Dekau.dev 上一篇文章的标题,它把一种最著名用于清理音频和压缩图像的数学工具,指向了一个异想天开的问题:怎么画只羊驼?

在作者的叙述中,傅里叶变换是在描述信号的两种方式之间转换的方法。在时域里,你有一个随时间变化的函数,比如声波。在频域里,你有一份清单,列出存在哪些频率以及每个频率的强度。文章给出的经典例子是正弦波 sin(2π×3t):它的傅里叶变换在正负 3 赫兹处各有一个单独的峰值。音频工程师用它来找出不需要的嗡嗡声,然后用逆变换去除;图像处理则用相关思想做高斯模糊和 JPEG 压缩。

那么这怎么变成了绘画?作者对“绘画”的定义是:把铅笔尖放在纸上,不抬笔一直画到完成的那条路径。给定这样一条路径,你可以把一组向量首尾相连,每个向量以自己的速度在圆周上旋转,每个向量的尾部固定在前一个向量的尖端。如果你选对了圆,最后一个向量的尖端就会移动并描绘出原始草图。

这是最让人惊讶的部分,值得停下来看看几何原理,因为它违背直觉。这些圆并不是像看起来那样一个套一个嵌套在一起。每个圆的圆心坐落在前一个圆的尖端上,并围绕这个移动的圆心旋转。因此,任一圆的运动是它之前所有圆运动的叠加:一个小圆在一个大圆的尖端上旋转,那个大圆又在一个更大圆的尖端上旋转,以此类推。文章用一系列简单案例说明了这一点。最令人意外的是,直线竟然也能用圆画出来,而圆与直线简直是截然不同的形状。通过缩小最外层的圆并让它转得更快,同一个结构能画出正方形。再加一个圆,就能画出鱼。作为标题示例,作者用 1,024 个圆画了一只羊驼,每个圆有自己的频率、半径和起始角度。

由一串旋转圆的尖端描摹出的直线
由旋转圆产生的直线,是文章的简单演示案例之一。adekau.github.io

文章用简单案例说明几何原理,表明即使是直线也能用圆画出来。

由一串旋转圆的尖端描摹出的正方形
通过缩小最外层圆并加快旋转速度产生的正方形。adekau.github.io

通过缩小最外层圆并让它转得更快,同一个结构能画出正方形。

由一串旋转圆的尖端描摹出的鱼
在结构中加入第三个圆产生的鱼。adekau.github.io

再加一个圆就能画出鱼,这是文章另一个演示例子。

频域中显示的方波
方波,正方形的频域视图。adekau.github.io

方波是用圆画出的正方形在频域中的对应物,展示了时域/频域对偶性。

你能调整每个圆的参数恰好有三个:转得多快(频率)、有多大(半径)、从哪里开始(相位)。文章的关键简化在于,这三个参数全能装进一个复数里。这不只是个记号技巧。复数 a + bi 本身就编码了二维空间中的一个点,实部在一条轴上,虚部在另一条轴上,而欧拉恒等式把复指数与旋转联系起来。因此,旋转向量自然写作复指数形式,而它的速度恰好是同一个向量旋转 90 度后的结果,这正是虚数单位会出现在看似关于运动的陈述中的原因。文章那句“速度与位置相同,只是实部变成了虚部”说的就是这个观察:乘以 i 就把向量旋转了四分之一圈。

剩下的问题是:怎么从一条画好的路径反推出那组正确的圆?这正是傅里叶变换的本职工作,文章通过两部分数学知识铺垫而至。第一,复数作为二维向量。第二,线性代数:平面上任意向量都能写成基向量的组合,点积告诉你被分解向量里包含每个基向量多少成分。文章算了一道具体例题,把向量 (0.7, 1.2) 用两个正交单位向量表示,点积结果约为 1.34 和 0.35,正好是所需的缩放因子。同一个思想,从有限数列推广到连续函数,就变成了由积分定义的内积:对区间上的两个函数,把其中一个乘以另一个的共轭再积分,再除以周期。傅里叶系数就是路径与给定频率的正弦或余弦之间的内积,量度该频率在路径里的含量。把所有频率分量加起来,每个都实现为一个旋转圆,就重建了路径。包含的圆越多,绘制的图形就越接近原始输入。

作者不只写了数学,还把它实现出来了。GitHub 上的配套项目 adekau/fourier 是一个 Angular 应用,完整实现了这一过程,还带有本地开发服务器,你能实时看着那些圆重绘出形状。

清楚说明文章能做什么、不能做什么很有必要,因为这能建立正确的预期。该方法适用于单条连续闭合曲线:也就是一笔画完的东西。它自身无法编码带有断开片段或间隙的图画,因为最后一个向量的尖端永不停止沿连续路径移动,而一串旋转圆没有“抬笔”机制。文章自己的措辞很严谨:“大多数闭合曲线”都能这样画,羊驼的 1,024 个圆是作者选作演示的数字,不是理论最小值。这篇文章是科普演示而非严格论述,所以近似收敛的确切条件超出了文章涵盖范围。

整体来看,这篇文章生动演示了复杂形状如何分解为简单的周期性运动,这同一个原理让你能从混音中分离出单个乐器、或给照片加模糊,现在被用来素描。它之所以能当教具,是因为它把从时域到频域的抽象转换变得具体可见:你真能眼睁睁看着一只羊驼从旋转的圆圈中浮现出来。