DEV Community

codemee
codemee

Posted on • Updated on

傅立葉轉換 (Fourier Transform) 的概念

傅立葉轉換可以做什麼?

傅立葉轉換是很厲害的工具, 可以幫我們分析出合成波中的組成份子, 得到一組簡單波的組合。舉例來說, 像是以下這個合成波:

實際上是由以下兩個簡單波組成:

sin(2x*π)

sin(3x*π)

而傅立葉轉換就可以幫你從前面的組合波拆解出來它是 sin(2x*π) + sin(3x*π)。那麼傅立葉轉換究竟是如何辦到的呢?

傅立葉轉換的基本想法

如果我們把組合的波與其中一個組成份子, 例如 sin(3x*π) 放在一起觀察:

你會看到組合波與這個組成份子有相似性, 但如果非組成份子的簡單波, 例如 sin(x*π) 放在一起觀察:

你會發現這兩個波常常會出現波峰對上波谷的情況。

如果想要凸顯這樣的觀察結果, 可能的作法就是把組合波與簡單波相乘, 如果該簡單波是組成份子, 就會因為波峰對波峰、波谷對波谷, 所以相乘後會有許多大的正數;反之, 若不是組成份子的簡單波, 因為常有波峰對波谷的狀況, 相乘後會有許多大的負數, 我們先來試看看。

首先看一下組合波與 sin(3x*π) 相乘的結果:

如果我們把相乘結果的每一點 y 座標加總 (積分) 起來, 就會是一個很大了正數。組合波與 sin(2x*π) 相乘的結果也類似:

接著來看一下組合波與 sin(x*π) 相乘的結果:

你可以看到這個圖形幾乎是對稱的, 如果我們一樣把圖形上每一點的 y 座標加總, 就會是很小的正數, 因為圖形中比較高的波峰與波谷都相抵銷了。組合波與不是組成份子的 sin(6x*π) 相乘的結果也類似:

傅立葉轉換的運作方法

透過以上的觀察, 我們可以把組合波與簡單波相乘之後加總 (積分) 的值當成是該簡單波在組合波中所佔的強度, 組成份子的簡單波計算出來的強度會遠遠大於非組成份子, 如此一來, 只要用各種簡單波和合成波相乘再加總, 就可以透過相對強度的比較分析出合成波的組成份子了。

離散傅立葉轉換 (Discrete Fourier Transform, DFT)

一般常用的其實是離散傅立葉轉換, 當我們需要分析自然環境的波時, 會以採樣的方式取得組合波上面的資料點, 由於資料是不連續的, 因此稱為『離散』。

實際運算時也不會是代入所有可能的簡單波, 而是以採樣頻率的一半為基準, 再以採樣數往下平均切割成各個頻率區間, 以代表各頻率區間的正弦波進行類似前文提到的計算, 分析出各頻率區間的強度, 找出可能的頻率成分。

之所以是以採樣頻率的一半為基準, 是因為採樣頻率如果不到特定簡單波頻率的 2 倍, 表示單一完整波的週期裡採樣數就不到 2 個點, 無法從組合波中萃取出完整的簡單波。例如以下的圖中, 若只抽樣這 3 個點, 所代表的波頻率與實際的頻率差多了:

快速傅立葉轉換 (Fast Fourier Transform, FFT)

實際上大家現在所用的都是快速傅立葉轉換, 這是從離散傅立葉轉換加快計算速度而來, 採樣數越多時, 計算所需耗用的時間與原本的離散傅立葉轉換差距越大, 可以大幅縮短計算的時間。

結語

以上是相當簡化的傅立葉轉換的概念, 只是為了讓大家可以理解, 實際的運算包含了積分與複數空間, 我們就不細談了。

Top comments (0)