介紹
傅立葉變換是數學中最深刻的見解之一,但不幸的是,它的意義被埋在一些荒謬的方程中。傅立葉變換是一種把東西分解成正弦波的方法。這個名字來自一個數學家叫傅立葉。
在數學術語中,傅立葉變換是一種將信號轉換成其組成成分和頻率的技術。
傅立葉變換不僅廣泛應用於信號(無線電、聲學等)處理,而且廣泛應用於圖像分析等領域。邊緣檢測、圖像濾波、圖像重建和圖像壓縮。一個例子:透射電鏡圖像的傅立葉變換有助於檢查樣本的周期性。數據的傅立葉變換可以擴展分析樣本的可訪問信息。
為了更好地理解它,考慮一個信號x(t):
如果我們對另一個信號做同樣的事情,選擇相同的時刻,然後測量它的振幅。
考慮另一個信號y(t):
當我們同時發出這兩種信號或者把它們加起來會發生什麼?
當我們在同一時刻發出這兩個信號時,我們得到一個新的信號,它是這兩個信號的振幅之和。這是因為這兩個信號被加在一起了。
將兩個信號相加:z(t) = x(t) + y(t)
如果我們只有一個信號(它是x(t)和y(t)的和)我們能恢復到原始信號x(t)和y(t)嗎?
是的。這就是傅立葉變換的作用。它接收一個信號並把它分解成組成它的頻率。
在我們的例子中,傅立葉變換將信號z(t)分解成它的組成頻率,就像信號x(t)和y(t)一樣。傅立葉變換的作用是把我們從時域移到頻域(不理解沒關係)。
如果有人想知道,如果我們想從頻域回到時域呢?我們可以通過使用傅立葉反變換(IFT)來做到這一點。
你需要知道的數學。
時域內的任何連續信號都可以用無窮級數的正弦信號來唯一地表示出來。
這是什麼意思?
這意味著,如果我們有一個由某個函數x(t)產生的信號那麼我們就可以得到另一個函數f(t)
因此,無論信號有多強,我們都可以找到一個函數f(t),該函數是無限多個正弦曲線之和,實際上可以完美地代表信號。
現在,現在出現的問題是,如何在上式中找到係數,因為這些值將決定輸出的形狀,從而決定信號的形狀。
因此,為了獲得這些係數,我們使用傅立葉變換,並且傅立葉變換的結果是一組係數。因此,我們X(w)用來表示傅立葉係數,它是頻率的函數,是通過求解以下積分得到的:
傅立葉變換表示為不定積分:
X(w):傅立葉變換
x(t):傅立葉逆變換
傅立葉變換和反傅立葉變換同時,當我們實際解上面的積分時,我們得到了這些複數其中a和b對應於我們要求的係數。
連續傅立葉變換將無限持續時間的時域信號轉換成由無限數量的正弦波組成的連續頻譜。實際上,我們處理的是離散採樣的信號,通常以固定間隔,有限的持續時間或周期性地進行。為此,經典傅立葉變換算法可以表示為離散傅立葉變換(DFT),該函數將函數的等距樣本的有限序列轉換為離散時間的等距樣本的等長序列傅立葉變換:
這就是離散傅立葉變換。我們可以做這個計算它會產生一個複數形式為a + ib其中傅立葉級數有兩個係數。
現在,我們知道了如何對信號進行採樣以及如何應用離散傅立葉變換。我們想做的最後一件事是,我們想擺脫複數,i因為在mllib或systemML裡的歐拉公式不支持複數,該複數指出:
所以,如果我們把歐拉公式代入傅立葉變換方程並求解,它會產生實部和虛部。
正如您所看到的,X由a+ib或a-ib格式的複數組成。如果你解出上面的方程你會得到傅立葉係數a和b。
現在如果你把a和b的值代入f(t)的方程那麼你就可以根據它的頻率來定義一個信號。
在一般實踐中,我們使用快速傅立葉變換(FFT)算法,該算法將DFT遞歸地劃分為較小的DFT,從而大大減少了所需的計算時間。DFT的時間複雜度為2N,而FFT 的時間複雜度為2NlogN
為什麼用餘弦和正弦函數表示信號?
雖然Sine和Cosine函數最初是基於直角三角形定義的,但在當前情況下,從那種角度看並不是最好的事情。您可能已經被教會認識到正弦函數是「斜邊對立的」,但是現在是時候有一點不同的觀點了。
考慮單位圓:
在笛卡爾平面上。假設通過原點的直線與軸在逆時針方向上成角度θ,則直線與圓的交點為(cosθ,sinθ)。
想一想。這種觀點與較早的觀點相關嗎?這兩個定義是相同的。
假設我們通過使θ線性增加開始旋轉直線。你會得到這樣的東西:
正弦和餘弦函數在某些情況下可以說是最重要的周期函數:
SHM振蕩器中位移,速度和加速度如何隨時間變化的周期性函數是正弦函數。每個粒子都有波動的性質,反之亦然。這是德布羅意的波粒對偶。波始終是某種物理量的正弦函數。聲音本身就是一種壓力擾動,它通過能夠壓縮和膨脹的物質介質傳播。它是聲波在某一點上的壓強,它隨時間呈正弦變化。
傅立葉變換的收斂
如果一個點以恆定的速度繞圓運動,則其在地面上方的高度將跟蹤正弦函數。點移動的速度對應於頻率,圓的半徑對應于振幅。
再增加1個圓,
再添加2個圓,
再添加9個圓;
人工智慧中的傅立葉變換
傅立葉變換是線性函數,可引起非線性。使用卷積。
2個信號的乘積的傅立葉變換是2個信號的卷積。
令x(t)和y(t)是兩個具有卷積X(t)* Y(t)的函數,並且F表示傅立葉變換,則
F{x(t).y(t)} = X(t)*Y(t)
請記住,時域中的卷積是頻域中的乘法。這就是傅立葉變換主要用於機器學習,尤其是深度學習算法的方式。
我將以卷積神經網絡為例;
CNN中90%的計算都是卷積,並且有許多方法可以降低這種計算的強度,其中之一是快速傅立葉變換(FFT)。
代替卷積,輸入和濾波器矩陣通過FFT轉換到頻域,以進行乘法。然後,通過逆FFT(IFFT)將輸出轉換回時域。
FFT的另一用途是可用於降維或特徵提取。
當數據集中的每個樣本都是信號(時間序列或圖像等)時,它可能包含數千個樣本。但是它們實際上可能只對應於傅立葉域中的幾個點(特別是如果存在一定的周期性)。這大大簡化了問題。
有時使用傅立葉域可能會提供平移不變性。也就是說,即使信號之間存在滯後,這種方差也不會影響它們在傅立葉域中的表示。
傅立葉變換的Python實現
可以使用numpy和scipy python庫完成FFT的最簡單實現。
結論
FFT用於數字記錄、採樣、加法合成和基音校正軟體。
FFT的重要性來自於這樣一個事實:它使得在頻域工作與在時間域或空間域工作在計算上同樣可行。好了,這就是這篇文章的全部內容,希望你們喜歡。