从浑天仪说起
下图是中国汉代科学家张衡发明的浑天仪复制品。我们可以看到,它用若干嵌套的圆环来模拟天体的运行。让人吃惊的是,这种做法居然蕴含着非常深刻的数学原理。让我们从傅立叶变换说起。
傅立叶变换的本质
数学家们喜欢用简单的函数来拟合复杂的函数。比如微积分中著名的泰勒公式就是用多项式函数拟合任意一个函数。傅立叶变换则是用三角函数来拟合任意一个周期函数。离散傅立叶变换的本质就是用一系列的正弦(或者余弦)函数的和来拟合一个周期函数f(t)。公式如下:
(1)
其中T是f(t)的周期,即f(t+T)=f(t)对任意t成立。和的周期是。因为频率等于周期的倒数,所以后两者的频率是f(t)的频率的k倍。这说明,我们在拟合任意一个周期函数时,只需要考虑整数倍频率的三角函数,而不需要考虑任意倍数频率的三角函数。
更进一步,我们能不能在正弦和余弦之间只保留一个呢?还真行,因为:
(2)
其中,。值得注意的是,这个转换在或等于0或者都等于0时仍然成立。
因此,我们只需要正弦函数就能够拟合任意周期函数。其中参数和分别被称为正弦函数的振幅和偏移。也就是说,虽然三角函数少了一个,但参数数量并没有增加。
类似地,我们可以很容易地把公式(2)转换为一个具有振幅和偏移的余弦函数。我们把这两种变换分别称为正弦傅立叶变换和余弦傅立叶变换。
正弦和余弦傅立叶变换意味着什么
再来看看下面两个公式,告诉我,你会想到什么?
(3)
(4)
没错,我们会想到点的极坐标。就是旋转半径的长度,是旋转时间。是角速度,是一个常量。则是旋转起始角度。公式(3)和(4)可以用来分别计算直角坐标系下点的横坐标和纵坐标。
总结一下,我们得到以下两个公式:
(5)
(6)
其中函数和分别用来计算点的横、纵坐标。的取值范围是[0, T]。
应用
公式(5)和(6)提示我们:直角坐标系下,在一幅由一定顺序的点组成的图像中,每个点的横、纵坐标可以分开来计算,互不干扰。并且,每一个这样的坐标——不管是横坐标还是纵坐标——都可以转化为一组固定的半径和起始角度的组合,即和。每一对半径和起始角度又对应了一个以整数倍频率旋转着的圆。把这些圆的圆心按频率从低到高首尾相连,就可以构成一幅有趣的动画,该动画不仅重现了原图像,更揭示了傅立叶变换的本质。
根据这个想法,我们用Python写了一些程序,利用快速傅立叶变换(参见函数numpy.fft.fft)、OpenCV(参见包cv2)和图像io(参见包imageio)实现了一些有趣的动画,能够利用嵌套的圆圈绘画出我们事先指定的图像。结果如下。
甚至可以绘画0~9十个数字。
最后给大家看的是奥运五环和龙: