# 傅立叶变换 (Fourier Transform) 玩玩看

这一篇文稿,有很多想法和内容参考了 betterexplained.com 的网页[1],另外模拟程式也参考了 kazad 的程式码[2] 以及 quantblog.wordpress.com 的程式码[3] 做进一步的修改而成,就先在此一併说明。感谢有这些资源,让我可以进一步拿来改写,希望对于初学者,尤其不太喜欢读英文的,能够有一点点帮助。

傅立叶变换在理工的领域常常被提到,那麽到底它是什麽东西呢?简而言之,它可以用来告诉我们:在时间讯号裡面,到底躲藏了哪些频率的讯号在裡面。反过来,如果知道各种频率成份,那麽组合起来的时间讯号又是长怎麽样的。我们一起来学习吧!

首先,如果一个点在圆週上做等速运动,那麽它在 X 轴或 Y 轴上的投影,其大小和时间的关係会是一个弦波,如下面的图示:

Canvas Not supported, sorry.

这边,Y 轴上的投影大小会变成 sin 函数(红色),而 X 轴的投影大小就是 cos 函数(绿色)。我们在下面的讨论,基本上会使用 X 轴的投影。

我们会用来做讲解的程式,是从 betterexplained.com (opens new window) 所提供的线上程式,像下面这样:

那我把这个程式稍微做了一些改写,在之后的页面读者会看到有一些差别,不过基本的功能是一样的。

以下先说明这个模拟程式的基本功能,然后再进行我们的说明。

  • 左上角的 Cycles:输入的数字表示频率为 0Hz, 1Hz, 2Hz... 的振幅,例如输入 1 -1,表示频率 0Hz (直流) 的振幅为 1,频率 1Hz 的振幅为 -1,以此类推。也可以输入起始的角度,例如输入 0 1:90,表示没有直流成分,而频率 1Hz 的振幅为为 1,起始角度为 90 度。图中左方会显示每个不同频率讯号旋转的状况,以绿色小点表示。
  • 右上角的 Time:输入的数字表示取样时间点的值,基本上假设输入 n 个数,则会有 n 个时间取样点,其中每隔 1/n 秒取样一次,每经过 1 秒视为重覆取样。图中央右方会显示每个取样点的值,以橘色小点表示。
  • 右上角的取样值,实际意义为左上角所有频率成份加总结果的水平值,也就是把所有绿色小点加总之后,将其投影在 X 轴上的实数值。在输入左上角或右上角时,另一边也会跟着改变,使得两边的讯号可以对应起来。
  • 下面的按钮:
    • Total: 是否显示加总的讯号。
    • Parts: 是否显示各成份讯号。
    • Ticks: 是否显示取样时间点格线。
    • Derive: 这部份比较复杂,最后再详说。
    • Running: 点击时图形会暂停或继续执行,也可以直接点选整个图形。暂停之后会出现捲动棒,此时可以用滑鼠或键盘左右键来移动时间点。
    • 傅立叶人像图: 点击时图形背景会改变颜色。

練習

请读者先随便玩一玩,大致熟悉之后再进到下一页。


  1. Better Explained, An Interactive Guide To The Fourier Transform (opens new window) ↩︎

  2. https://gist.github.com/kazad/8bb682da198db597558c ↩︎

  3. http://treeblurb.com/dev_math/sin_canv00.html ↩︎