1. 程式人生 > >理解離散傅立葉變換(一. 傅立葉變換的由來)

理解離散傅立葉變換(一. 傅立葉變換的由來)

理解離散傅立葉變換(一)                      ------傅立葉變換的由來 關於傅立葉變換,無論是書本還是在網上可以很容易找到關於傅立葉變換的描述,但是大都是些故弄玄虛的文章,太過抽象,盡是一些讓人看了就望而生畏的公式的羅列,讓人很難能夠從感性上得到理解,最近,我偶爾從網上看到一個關於數字訊號處理的電子書籍,是一個叫Steven W. Smith, Ph.D.外國人寫的,寫得非常淺顯,裡面有七章由淺入深地專門講述關於離散訊號的傅立葉變換,雖然是英文文件,我還是硬著頭皮看完了有關傅立葉變換的有關內容,看了有茅塞頓開的感覺,在此把我從中得到的理解拿出來跟大家分享,希望很多被傅立葉變換迷惑的朋友能夠得到一點啟發,這電子書籍是免費的,有興趣的朋友也可以從網上下載下來看一下,URL地址是: 要理解傅立葉變換,確實需要一定的耐心,別一下子想著傅立葉變換是怎麼變換的,當然,也需要一定的高等數學基礎,最基本的是級數變換,其中傅立葉級數變換是傅立葉變換的基礎公式。 一、
傅立葉變換的提出
讓我們先看看為什麼會有傅立葉變換?傅立葉是一位法國數學家和物理學家的名字,英語原名是Jean Baptiste Joseph Fourier(1768-1830), Fourier對熱傳遞很感興趣,於1807年在法國科學學會上發表了一篇論文,論文裡描述運用正弦曲線來描述溫度分佈,論文裡有個在當時具有爭議性的決斷:任何連續週期訊號都可以由一組適當的正弦曲線組合而成。當時審查這個論文的人,其中有兩位是歷史上著名的數學家拉格朗日(Joseph Louis Lagrange, 1736-1813)和拉普拉斯(Pierre Simon de Laplace, 1749-1827),當拉普拉斯和其它審查者投票通過並要發表這個論文時,拉格朗日堅決反對,在近50年的時間裡,拉格朗日堅持認為傅立葉的方法無法表示帶有稜角的訊號,如在方波中出現非連續變化斜率。法國科學學會屈服於拉格朗日的威望,否定了傅立葉的工作成果,幸運的是,傅立葉還有其它事情可忙,他參加了政治運動,隨拿破崙遠征埃及,法國大革命後因怕會被推上斷頭臺而一直在逃避。直到拉格朗日死後15年這個論文才被髮表出來。 誰是對的呢?拉格朗日是對的:正弦曲線無法組合成一個帶有稜角的訊號。但是,我們可以用正弦曲線來非常逼近地表示它,逼近到兩種表示方法不存在能量差別,基於此,傅立葉是對的。 為什麼我們要用正弦曲線來代替原來的曲線呢?如我們也還可以用方波或三角波來代替呀,分解訊號的方法是無窮多的,但分解訊號的目的是為了更加簡單地處理原來的訊號。用正餘弦來表示原訊號會更加簡單,因為正餘弦擁有原訊號所不具有的性質:正弦曲線保真度。一個正餘弦曲線訊號輸入後,輸出的仍是正餘弦曲線,只有幅度和相位可能發生變化,但是頻率和波的形狀仍是一樣的。且只有正餘弦曲線才擁有這樣的性質,正因如此我們才不用方波或三角波來表示。 二、
傅立葉變換分類
根據原訊號的不同型別,我們可以把傅立葉變換分為四種類別:
1 非週期性連續訊號 傅立葉變換(Fourier Transform)
2 週期性連續訊號 傅立葉級數(Fourier Series)
3 非週期性離散訊號 離散時域傅立葉變換(Discrete Time Fourier Transform)
4 週期性離散訊號 離散傅立葉變換(Discrete Fourier Transform)
下圖是四種原訊號圖例: 這四種傅立葉變換都是針對正無窮大和負無窮大的訊號,即訊號的的長度是無窮大的,我們知道這對於計算機處理來說是不可能的,那麼有沒有針對長度有限的傅立葉變換呢?沒有。因為正餘弦波被定義成從負無窮小到正無窮大,我們無法把一個長度無限的訊號組合成長度有限的訊號。面對這種困難,方法是把長度有限的訊號表示成長度無限的訊號,可以把訊號無限地從左右進行延伸,延伸的部分用零來表示,這樣,這個訊號就可以被看成是非週期性離解訊號,我們就可以用到離散時域傅立葉變換的方法。還有,也可以把訊號用複製的方法進行延伸,這樣訊號就變成了週期性離解訊號,這時我們就可以用離散傅立葉變換方法進行變換。這裡我們要學的是離散訊號,對於連續訊號我們不作討論,因為計算機只能處理離散的數值訊號,我們的最終目的是運用計算機來處理訊號的。 但是對於非週期性的訊號,我們需要用無窮多不同頻率的正弦曲線來表示,這對於計算機來說是不可能實現的。所以對於離散訊號的變換隻有離散傅立葉變換(DFT)才能被適用,對於計算機來說只有離散的和有限長度的資料才能被處理,對於其它的變換型別只有在數學演算中才能用到,在計算機面前我們只能用DFT方法,後面我們要理解的也正是DFT方法。這裡要理解的是我們使用週期性的訊號目的是為了能夠用數學方法來解決問題,至於考慮週期性訊號是從哪裡得到或怎樣得到是無意義的。 每種傅立葉變換都分成實數和複數兩種方法,對於實數方法是最好理解的,但是複數方法就相對複雜許多了,需要懂得有關複數的理論知識,不過,如果理解了實數離散傅立葉變換(real DFT),再去理解複數傅立葉變換就更容易了,所以我們先把複數的傅立葉變換放到一邊去,先來理解實數傅立葉變換,在後面我們會先講講關於複數的基本理論,然後在理解了實數傅立葉變換的基礎上再來理解複數傅立葉變換。 還有,這裡我們所要說的變換(transform)雖然是數學意義上的變換,但跟函式變換是不同的,函式變換是符合一一映射準則的,對於離散數字訊號處理(DSP),有許多的變換:傅立葉變換、拉普拉斯變換、Z變換、希爾伯特變換、離散餘弦變換等,這些都擴充套件了函式變換的定義,允許輸入和輸出有多種的值,簡單地說變換就是把一堆的資料變成另一堆的資料的方法。 三、
一個關於實數離散傅立葉變換(Real DFT)的例子
先來看一個變換例項,下圖是一個原始訊號影象: 這個訊號的長度是16,於是可以把這個訊號分解9個餘弦波和9個正弦波(一個長度為N的訊號可以分解成N/2+1個正餘弦訊號,這是為什麼呢?結合下面的18個正餘弦圖,我想從計算機處理精度上就不難理解,一個長度為N的訊號,最多隻能有N/2+1個不同頻率,再多的頻率就超過了計算機所能所處理的精度範圍),如下圖:        9個餘弦訊號:    9個正弦訊號: 把以上所有訊號相加即可得到原始訊號,至於是怎麼分別變換出9種不同頻率訊號的,我們先不急,先看看對於以上的變換結果,在程式中又是該怎麼表示的,我們可以看看下面這個示例圖:   上圖中左邊表示時域中的訊號,右邊是頻域訊號表示方法,從左向右表示正向轉換(Forward DFT),從右向左表示逆向轉換(Inverse DFT),用小寫x[]表示訊號在每個時間點上的幅度值陣列, 用大寫X[]表示每種頻率的副度值陣列, 因為有N/2+1種頻率,所以該陣列長度為N/2+1,X[]陣列又分兩種,一種是表示餘弦波的不同頻率幅度值:Re X[],另一種是表示正弦波的不同頻率幅度值:Im X[],Re是實數(Real)的意思,Im是虛數(Imagine)的意思,採用複數的表示方法把正餘弦波組合起來進行表示,但這裡我們不考慮複數的其它作用,只記住是一種組合方法而已,目的是為了便於表達(在後面我們會知道,複數形式的傅立葉變換長度是N,而不是N/2+1)。 下一節我們將來看一下實數傅立葉變換的具體方法。