DEV Community

codemee
codemee

Posted on • Edited on

1

傅立葉轉換 (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)

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

結語

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

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay