从傅立叶变换到奥运五环

从浑天仪说起

下图是中国汉代科学家张衡发明的浑天仪复制品。我们可以看到,它用若干嵌套的圆环来模拟天体的运行。让人吃惊的是,这种做法居然蕴含着非常深刻的数学原理。让我们从傅立叶变换说起。

傅立叶变换的本质

数学家们喜欢用简单的函数来拟合复杂的函数。比如微积分中著名的泰勒公式就是用多项式函数拟合任意一个函数。傅立叶变换则是用三角函数来拟合任意一个周期函数。离散傅立叶变换的本质就是用一系列的正弦(或者余弦)函数的和来拟合一个周期函数f(t)。公式如下:

f(t) = \frac{a_0}{2}+\sum_{k=1}^{n}(a_ksin(\frac{2\pi k}{T}t)+b_kcos(\frac{2\pi k}{T}t))        (1)

其中T是f(t)的周期,即f(t+T)=f(t)对任意t成立。cos(\frac{2\pi k}{T}t)sin(\frac{2\pi k}{T}t)的周期是\frac{T}{k}。因为频率等于周期的倒数,所以后两者的频率是f(t)的频率的k倍。这说明,我们在拟合任意一个周期函数时,只需要考虑整数倍频率的三角函数,而不需要考虑任意倍数频率的三角函数。

更进一步,我们能不能在正弦和余弦之间只保留一个呢?还真行,因为:

a_ksin(\frac{2\pi k}{T}t)+b_kcos(\frac{2\pi k}{T}t)                (2)

=\sqrt{a_k^2+b_k^2}\times (\frac{a_k}{\sqrt{a_k^2+b_k^2}}sin(\frac{2\pi k}{T}t)+\frac{b_k}{\sqrt{a_k^2+b_k^2}}cos(\frac{2\pi k}{T}t))

=r_k\times sin(\frac{2\pi k}{T}t+\alpha_k)

其中r_k=\sqrt{a_k^2+b_k^2}\alpha_k= arctan(b_k, a_k)。值得注意的是,这个转换在a_kb_k等于0或者都等于0时仍然成立。

因此,我们只需要正弦函数就能够拟合任意周期函数。其中参数r_k\alpha_k分别被称为正弦函数的振幅和偏移。也就是说,虽然三角函数少了一个,但参数数量并没有增加。

类似地,我们可以很容易地把公式(2)转换为一个具有振幅和偏移的余弦函数。我们把这两种变换分别称为正弦傅立叶变换余弦傅立叶变换

正弦和余弦傅立叶变换意味着什么

再来看看下面两个公式,告诉我,你会想到什么?

r_k\times cos(\frac{2\pi k}{T}t+\alpha_k)        (3)

r_k\times sin(\frac{2\pi k}{T}t+\alpha_k)        (4)

没错,我们会想到点的极坐标。r_k就是旋转半径的长度,t是旋转时间。\frac{2\pi k}{T}是角速度,是一个常量。\alpha_k则是旋转起始角度。公式(3)和(4)可以用来分别计算直角坐标系下点的横坐标和纵坐标。

总结一下,我们得到以下两个公式:

f_x(t)=a_0^x+\sum_{k=1}^{n} r_k^x\times cos(\frac{2\pi k}{T}t+\alpha_k^x)        (5)

f_y(t)=a_0^y+\sum_{k=1}^{n} r_k^y\times sin(\frac{2\pi k}{T}t+\alpha_k^y)        (6)

其中函数f_xf_y分别用来计算点的横、纵坐标。t的取值范围是[0, T]。

应用

公式(5)和(6)提示我们:直角坐标系下,在一幅由一定顺序的点组成的图像中,每个点的横、纵坐标可以分开来计算,互不干扰。并且,每一个这样的坐标——不管是横坐标还是纵坐标——都可以转化为一组固定的半径和起始角度的组合,即r_k\alpha_k。每一对半径和起始角度又对应了一个以整数倍频率旋转着的圆。把这些圆的圆心按频率从低到高首尾相连,就可以构成一幅有趣的动画,该动画不仅重现了原图像,更揭示了傅立叶变换的本质。

根据这个想法,我们用Python写了一些程序,利用快速傅立叶变换(参见函数numpy.fft.fft)、OpenCV(参见包cv2)和图像io(参见包imageio)实现了一些有趣的动画,能够利用嵌套的圆圈绘画出我们事先指定的图像。结果如下。

甚至可以绘画0~9十个数字。

最后给大家看的是奥运五环和龙:

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方林博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值