# 傅立叶变换 (Fourier Transform) 玩玩看
这一篇文稿,有很多想法和内容参考了 betterexplained.com 的网页[1],另外模拟程式也参考了 kazad 的程式码[2] 以及 quantblog.wordpress.com 的程式码[3] 做进一步的修改而成,就先在此一併说明。感谢有这些资源,让我可以进一步拿来改写,希望对于初学者,尤其不太喜欢读英文的,能够有一点点帮助。
傅立叶变换在理工的领域常常被提到,那麽到底它是什麽东西呢?简而言之,它可以用来告诉我们:在时间讯号裡面,到底躲藏了哪些频率的讯号在裡面。反过来,如果知道各种频率成份,那麽组合起来的时间讯号又是长怎麽样的。我们一起来学习吧!
首先,如果一个点在圆週上做等速运动,那麽它在 X 轴或 Y 轴上的投影,其大小和时间的关係会是一个弦波,如下面的图示:
这边,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: 点击时图形会暂停或继续执行,也可以直接点选整个图形。暂停之后会出现捲动棒,此时可以用滑鼠或键盘左右键来移动时间点。
- 傅立叶人像图: 点击时图形背景会改变颜色。
練習
请读者先随便玩一玩,大致熟悉之后再进到下一页。
Better Explained, An Interactive Guide To The Fourier Transform (opens new window) ↩︎
https://gist.github.com/kazad/8bb682da198db597558c ↩︎
http://treeblurb.com/dev_math/sin_canv00.html ↩︎
傅立叶变换-01 →