如何理解離散傅里葉變換(一)實數(shù)形式傅里葉變換 如何理解離散傅里葉變換(一) ——實數(shù)形式傅里葉變換 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 本文作者:隨煜而安 二零一五年五月二十三日 原創(chuàng)作者:July、dznlong 推薦閱讀: 1.The Scientist and Engineer's Guide to Digital Signal Processing,By Steven W. Smith, Ph.D。http://www./pdfbook.htm。 2.July大神博客 點擊打開鏈接 3.dznlong大神博客 點擊打開鏈接
4.高等數(shù)學/數(shù)學分析中關(guān)于傅里葉級數(shù),三角函數(shù)正交系的部分內(nèi)容 5.深入淺出的講解傅里葉變換(個人感覺講的一般,但是配圖很形象幫助理解) 點擊打開鏈接 說明: I、本文中闡述的離散傅里葉變換方法是July、dznlong 兩位根據(jù)此書:The Scientist and Engineer's Guide to Digital Signal Processing,By Steven W. Smith, Ph.D.而翻譯而成的,此書地址:http://www./pdfbook.htm。 II、同時,有相當一部分內(nèi)容編輯整理自dznlong、July兩位的博客,本文是根據(jù)兩人文章的思路添加上一些個人的想法以及補充一些細節(jié)的成果。上面也貼出了其博客地址,向原創(chuàng)的作者表示致敬。 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 談?wù)劯道锶~變換 開始進入正題: “關(guān)于傅立葉變換,無論是書本還是在網(wǎng)上可以很容易找到關(guān)于傅立葉變換的描述,但是大都是些故弄玄虛的文章,太過抽象,盡是一些讓人看了就望而生畏的公式的羅列,讓人很難能夠從感性上得到理解”---dznlong, 那么,到底什么是傅里葉變換算法?傅里葉變換所涉及到的公式具體有多復雜列?這篇文章我借鑒兩位大神的思路,并且先不列出一些復雜的公式,一步一步的引出我們要研究的東西,盡量做到通俗易懂。 傅里葉變換(Fourier transform)是一種線性的積分變換。因其基本思想首先由法國學者傅里葉系統(tǒng)地提出,所以以其名字來命名以示紀念。傅里葉變換就是一種變換而已,只是這種變換是從時間轉(zhuǎn)換為頻率的變化。 傅里葉變換的提出: 傅立葉是一位法國數(shù)學家和物理學家,原名是Jean Baptiste Joseph Fourier(1768-1830), Fourier于1807年在法國科學學會上發(fā)表了一篇論文,論文里描述運用正弦曲線來描述溫度分布,論文里有個在當時具有爭議性的決斷:任何連續(xù)周期信號都可以由一組適當?shù)恼仪€組合而成。 當時審查這個論文拉格朗日堅決反對此論文的發(fā)表,而后在近50年的時間里,拉格朗日堅持認為傅立葉的方法無法表示帶有棱角的信號,如在方波中出現(xiàn)非連續(xù)變化斜率。直到拉格朗日死后15年這個論文才被發(fā)表出來。 誰是對的呢?拉格朗日是對的:正弦曲線無法組合成一個帶有棱角的信號。但是,我們可以用正弦曲線來非常逼近地表示它,逼近到兩種表示方法不存在能量差別,基于此,傅立葉是對的。 我們觀察下圖,直觀的感受一下這個決斷和傅里葉變換究竟在做怎樣的一件事情。(圖片來自:點擊打開鏈接)
在這兩幾幅圖中,分別代表了兩個傅里葉變換。最前面黑色的線代表的就是要進行變換的時域上的函數(shù)f(t),它可以表示成后面所有彩色表示的正弦波疊加而成的總和。而后面依不同顏色排列而成的正弦波就是組合為f(t)的各個分量。這些正弦波按照頻率從低到高從前向后排列開來,而每一個波的振幅都是不同的。一定有細心的讀者發(fā)現(xiàn)了,在兩個正弦波之間可能還有一條直線,那并不是分割線,而是振幅為0的正弦波!也就是說,為了組成特殊的曲線,有些正弦波成分是不需要的,或者說時域上的函數(shù)f(t)中不含有這種對應(yīng)頻率的分量。來看一個更為詳細一些的圖:
對于每個正弦波分量,如果我們只看它的頻率和幅值。那么對于所有分量,就形成了一個以頻率為自變量,幅值為因變量的頻率域上的函數(shù)F(w),也就是頻域圖像。這時,一個時域——頻域的映射就形成了。這個例子中我們可以看出,一個時域上的近似矩形波被分解成了不同頻率分量的正弦波,反過來看,一些不同頻率的正弦波疊加成了一個矩形波。要注意的是,在實際中通常是將時域的函數(shù)變換為不同頻率的正弦波和余弦波的疊加,而不僅僅是一些正弦波的疊加,盡管這并沒有什么不同,因為我們知道正余弦是可以互相表示的。 到此,在沒有任何公式的情況下,我們也大概知曉了傅里葉變換在做怎樣的一件事情。
傅立葉變換分類
根據(jù)原信號的不同類型,我們可以把傅立葉變換分為四種類別: 現(xiàn)在我們要列出一些公式了,先觀察即可,后面會做出詳細的解釋。 1.連續(xù)傅里葉變換 一般情況下,若“傅里葉變換”一詞不加任何限定語,則指的是“連續(xù)傅里葉變換”。連續(xù)傅里葉變換將平方可積的函數(shù)f(t)表示成復指數(shù)函數(shù)的積分或級數(shù)形式。
這是將頻率域的函數(shù)F(ω)表示為時間域的函數(shù)f(t)的積分形式。 連續(xù)傅里葉變換的逆變換 (inverse Fourier transform)為: 即將時間域的函數(shù)f(t)表示為頻率域的函數(shù)F(ω)的積分。 2.傅里葉級數(shù) 連續(xù)形式的傅里葉變換其實是傅里葉級數(shù) (Fourier series)的推廣,因為積分其實是一種極限形式的求和算子而已。 對于周期函數(shù),其傅里葉級數(shù)是存在的:
其中Fn為復幅度。對于實值函數(shù),函數(shù)的傅里葉級數(shù)可以寫成:
3.離散時域傅里葉變換
4.離散傅里葉變換 為了在科學計算和數(shù)字信號處理等領(lǐng)域使用計算機進行傅里葉變換,必須將函數(shù)xn定義在離散點而非連續(xù)域內(nèi),且須滿足有限性或周期性條件。這種情況下,使用離散傅里葉變換(DFT),將函數(shù)xn表示為下面的求和形式:
其中Xk是傅里葉幅度。
現(xiàn)在我們已經(jīng)把四種類型的傅里葉變換的公式給出了,直接看這些公式,就像很多教科書那樣,我想大家跟我一樣都是一頭霧水。 下面是July、dznlong兩位大神給出的一些更為直觀的東西。 我們可以觀察思考下上述傅立葉變換的4種變體的特點
下圖是四種原信號圖例(從上到下,依次是FT,F(xiàn)S,DTFT,DFT):
對于計算機來說只有離散的和有限長度的數(shù)據(jù)才能被處理。所以首先可以肯定的是,對于計算機中的研究,我們的時域信號需要是離散的。對于我們要處理的輸入信號,考慮如果是非周期性信號的普遍情況。我們需要用無窮多不同頻率的正弦曲線來表示,這對于計算機來說也是不可能實現(xiàn)的。所以頻率域上也要是離散的。所以基于上面的分析,我們下面重點討論和理解的是離散傅立葉變換(DFT),因為只有它才能被計算機適用。
另外,每種傅立葉變換都分成實數(shù)和復數(shù)兩種方法,對于實數(shù)方法是最好理解的,但是復數(shù)方法就相對復雜許多了,需要懂得有關(guān)復數(shù)的理論知識,不過,如果理解了實數(shù)離散傅立葉變換(real
DFT),再去理解復數(shù)傅立葉變換就更容易了,所以我們先把復數(shù)的傅立葉變換放到一邊去,先來理解實數(shù)傅立葉變換,在后面我們會先講講關(guān)于復數(shù)的基本理論,然后在理解了實數(shù)傅立葉變換的基礎(chǔ)上再來理解復數(shù)傅立葉變換。所以本文后面的重點是理解實數(shù)離散傅立葉變換(real DFT)。 截止到這里,我們簡單闡述了傅里葉變換的一些基礎(chǔ)知識和思想。后面,我們將從相對簡單的實數(shù)傅里葉變換出發(fā),試著去理解它。 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 實數(shù)離散傅立葉變換(real DFT)
首先,先來看一個關(guān)于實數(shù)離散傅立葉變換(Real DFT)的例子 通過這個例子,是想引出實數(shù)離散傅里葉變換在數(shù)學或者說程序中的表達方法,并且如果能理解實數(shù)離散傅里葉變換的原理就更好了 下圖是一個實數(shù)原始離散信號圖像:
結(jié)合下面的18個正余弦圖,我想從計算機處理精度上就不難理解,一個長度為N的信號,最多只能有N/2+1個不同頻率,再多的頻率就超過了計算機所能所處理的精度范圍),如下圖: 9個余弦信號: 從左至右,從上到下,分別對應(yīng)著頻率k=0~8; 頻率k=i就代表在長度為N的區(qū)間上存在著i個周期。k越大,周期越小。
9個正弦信號:
同樣的,從左至右,從上到下,分別對應(yīng)著頻率k=0~8;
把以上所有信號相加即可得到原始信號,至于是怎么分別變換出9種不同頻率信號的,我們也先不急,后面會說到,先看看對于以上的變換結(jié)果,在程序中又是該怎么表示的,我們可以看看下面這個示例圖:
X[]數(shù)組又分兩種,一種是表示余弦波的不同頻率幅度值:Re X[],另一種是表示正弦波的不同頻率幅度值:Im X[]。 其中,Re是實數(shù)(Real)的意思,Im是虛數(shù)(Imagine)的意思,采用復數(shù)的表示方法把正余弦波組合起來進行表示,但這里我們不考慮復數(shù)的其它作用,只記住是一種組合方法而已,目的是為了便于表達(個人感覺這樣表示是因為更為普遍和常用的復數(shù)形式傅里葉變換的存在,為了在形式上契合它)。還有,在后面我們會知道,復數(shù)形式的傅立葉變換頻率域數(shù)組長度是N,而不是N/2+1。 到此,實數(shù)形式的離散傅里葉變換的表示方法及符號約定我們已經(jīng)說清楚了,并且變換所做的實際工作我們也心里有數(shù)了?,F(xiàn)在,補充上面欠著的關(guān)于“一個長度為N的信號可以分解成N/2+1個正余弦信號”的證明1。
這個問題解決了,不過到這里不知道有沒有人和我有同樣的疑問。為什么變換后的正弦余弦分量的頻率取值都正好是整數(shù)?這個問題將在下面的學習中自然而然的明白。
實數(shù)形式離散傅里葉正變換(DFT) 由上面的討論我們知道DFT是要將時域長度為N的離散序列x(n)變換為不同頻率取值的正余弦分量,且頻率K取值為0~N/2+1。其實我們正變換要做的是已知時域序列x(n),求頻率域上的幅度值數(shù)組,也就是ReX[] 和ImX[]。
有三種完全不同的方法進行DFT:一種方法是通過聯(lián)立方程進行求解, 從代數(shù)的角度看,要從N個已知值求N個未知值,需要N個聯(lián)立方程,且N個聯(lián)立方程必須是線性獨立的,但這是這種方法計算量非常的大且極其復雜,所以很少被采用;第二種方法是利用信號的相關(guān)性(correlation)進行計算,這個是我們后面將要介紹的方法;第三種方法是快速傅立葉變換(FFT),這是一個非常具有創(chuàng)造性和革命性的的方法,因為它大大提高了運算速度,使得傅立葉變換能夠在計算機中被廣泛應(yīng)用,但這種算法是根據(jù)復數(shù)形式的傅立葉變換來實現(xiàn)的,它把N個點的信號分解成長度為N的頻域,這個跟我們現(xiàn)在所進行的實域DFT變換不一樣,而且這種方法也較難理解,這里我們先不去理解,等先理解了復數(shù)DFT后,再來看一下FFT。有一點很重要,那就是這三種方法所得的變換結(jié)果是一樣的,經(jīng)過實踐證明,當頻域長度為32時,利用相關(guān)性方法進行計算效率最好,否則FFT算法效率較高。現(xiàn)在就讓我們來看一下相關(guān)性算法。--July
上面a和 b兩個圖是待檢測信號波,圖a很明顯可以看出是個3個周期的正弦信號波,圖b的信號波則看不出是否含有正弦或余弦信號,圖c和d都是個3個周期的正弦信號波,圖e和f分別是a、b兩圖跟c、d兩圖相乘后的結(jié)果,圖e所有點的平均值是0.5,說明信號a含有振幅為1的正弦信號c,但圖f所有點的平均值是0,則說明信號b不含有信號d。這個就是通過信號相關(guān)性來檢測是否含有某個信號的方法。
第二個式子中加了個負號,是為了保持復數(shù)形式的一致,前面我們知道在計算時又加了個負號,所以這只是個形式的問題,并沒有實際意義,你也可以把負號去掉,并在計算時也不加負號。 這里有一點必須明白一個正交的概念:兩個函數(shù)相乘,如果結(jié)果中的每個點的總和為0,則可認為這兩個函數(shù)為正交函數(shù)。要確保關(guān)聯(lián)性算法是正確的,則必須使得跟原始信號相乘的信號的函數(shù)形式是正交的,我們知道所有的正弦或余弦函數(shù)是正交的,這一點我們可以通過簡單的高數(shù)知識就可以證明它,所以我們可以通過關(guān)聯(lián)的方法把原始信號分離出正余弦信號。也就是說,一個帶有多個頻率分量的時域函數(shù)f(t)乘以某個頻率的正交基的積分,其實就等于函數(shù)中對應(yīng)這個頻率的分量與這個頻率正交基的積分,也就求出了函數(shù)與這個頻率的“關(guān)聯(lián)度”。當然,其它的正交函數(shù)也是存在的,如:方波、三角波等形式的脈沖信號,所以原始信號也可被分解成這些信號,但這只是說可以這樣做,卻是沒有用的。
實數(shù)形式離散傅里葉逆變換——合成運算方法(Real Inverse DFT)
DFT合成等式(合成原始時間信號,頻率-->時間,逆向變換):
如果有學過傅立葉級數(shù),對這個等式就會有似曾相識的感覺,不錯!這個等式跟傅立葉級數(shù)是非常相似的:
當然,差別是肯定是存在的,因為這兩個等式是在兩個不同條件下運用的,至于怎么證明DFT合成公式,這個我想需要非常強的高等數(shù)學理論知識了,這是研究數(shù)學的人的工作,對于普通應(yīng)用者就不需要如此的追根究底了,但是傅立葉級數(shù)是好理解的,我們起碼可以從傅立葉級數(shù)公式中看出DFT合成公式的合理性。
到此為止,我們對傅立葉變換便有了感性的認識了。但是,這只是在實域上的離散傅立葉變換,其中雖然也用到了復數(shù)的形式,但那只是個替代的形式,并無實際意義,現(xiàn)實中一般使用的是復數(shù)形式的離散傅立葉變換,且快速傅立葉變換是根據(jù)復數(shù)離散傅立葉變換來設(shè)計算法的。隨著作者之后的學習,再總結(jié)出后面的博文。
|
|