距離上一次發稿已經過去了快三個月,創作欲有些旺盛,雖然最近很忙,但還是想寫點東西,因為近來重新仔細研讀了奧本海姆的那本聖經級別的綠皮書《信號與系統》,深有感觸,我在之前學習中的更多困惑也得到了解決,因此想分享給讀者,同時也強烈推薦此書及MIT的奧本海姆相關公開課程給EE相關專業的朋友,不管是初學信號與系統還是已經學過這門課的同學,都非常值得細細品味

在我大一還是大二(具體不記得了)學習這門課時,有一個很大的疑惑困擾著我,我們為什麼要對一個信號做傅立葉展開呢?誠然,書上的很多例題告訴我們傅立葉變換讓解題或者實際問題變得簡單,但是並沒有哪本書清楚的說明傅立葉展開的意義所在,而我仔細審視這個困惑的根源,可以分為兩個部分,首先,為什麼要對信號進行展開?其次,為什麼一定是用復指數正交基展開?這個問題問擾了我很長一段時間,因為這兩年做的最多還是數字信號處理相關的工程和項目,所以這個可以算是一個核心癥結,而我接下來文章會對這兩個困惑逐一進行解釋,至少它現在已經能夠讓我非常安心和舒服的使用傅立葉變換了,希望也能給和我有同樣困惑的朋友一點啟發。(由於想保證我自己的連貫的創作體驗,在接下來的論述中我不會加入任何公式和圖形幫助理解,純粹的語言文字描述,這可能對我是友好的,但對讀者並不友好,但我想如果可以通篇讀下來的讀者一定會兩眼發光,心曠神怡)

整個信號與系統的框架建立中,我們大多數時間研究的系統默認都是線性時不變的(而在現實生活中常常還是因果的),為什麼這麼默認?因為物理過程大多具有線性和時不變性,同時,線性時不變系統的數學描述上具有共性,比如不同的系統可用同一微分方程或者差分方程來表示,因此我們易於建立一套方法論去分析這類系統,同時也更容易讓學生來學習,這裡就像我們研究回歸問題時,通常學的都是線性擬合,比如最小二乘法,為什麼,不是它在任何情況下都好,也不是非線性比不上線性,而是非線性相對於線性而言太複雜了,沒有這麼好解釋,也不易建立方法論,就像現在的deep-learning,每一層輸出都會經過一個激活函數,來對結果進行非線性變換,這在經過多層之後,整個模型就變成了一個黑匣子,只有機器知道自己在做些什麼,而人類卻很難去解釋,對於這樣的問題和系統,人類想去研究起來就格外的費勁

而線性時不變系統又具有非常多很好的特性,比如說疊加性質,這裡就要說到信號展開的問題了,為什麼要展開?如果將線性時不變系統的輸入用一組基本信號的線性組合來表示,可由系統對這些基本信號的響應,利用疊加性質得到整個系統的輸出。因此,照這個思路繼續下去,我們可以找到一種求系統輸出的更簡單的方法,而不需要每次都對於不同的x(t)去解微分方程的y(t)

首先以離散時間信號為例,我們可以將一個時間序列表示成一串移位單位脈衝序列的線性組成,而系統對每一個移位脈衝都有一個輸出,也就是響應,各個移位脈衝序列的區別僅在於在一個脈衝中加入了不同的時移,因此這裡如果把系統變成時不變系統,根據時不變性,那麼其對應的輸出也就是某一脈衝序列的響應加入一與之對應的時移,因此我們可以確定一個單位衝激響應,而其他脈衝序列的響應僅是在其上添加一個時移,這樣我們可以巧妙而簡潔的將一個線性時不變系統的輸出表示成輸入序列與其單位衝激響應的卷積和的形式,故這裡可以說是因為線性時不變系統特有的疊加性質和時不變性,才導致了卷積這麼一個經典而又簡潔的表達形式,同時,換句話說,當已知一個線性時不變系統的單位衝激響應時,你也就知道了這個系統的全部特性

這裡略作小結,我們已經看到了線性時不變系統的好,它讓我們之前繁瑣的求輸出的過程變成了在已知單位衝激響應時求卷積的過程,而且因為卷積的形式就是一個循環移位求和,這個過程完全可以交給計算機去做,絲毫不需要花費太大的力氣,而這裡可以有人要問了,單位衝激響應怎麼得到,把一個狄拉克函數丟到系統裏作為輸入,看系統的輸出不就知道了嗎?而以上過程的推導都是基於我們先將一個時間序列表示成一串移位單位脈衝序列的線性組成纔得到的,所以這裡我們也可以粗略感受到展開的妙處了,接下來我們來看看傅立葉同學做的事情(當然並不完全是他乾的,或者說他只是提供最初思想的那個人)

現在,我們不用移位脈衝信號,我們想要將信號表示成另一組基本信號的線性組合,而這裡我們要遵循幾個原則來讓我們之後的分析變得簡單,首先,這組基本信號要能夠構成一類相當廣泛的有用信號,也許不能表示所有信號,但至少在大多數情況下得夠用,然後呢,在線性時不變系統中,對每一個基本信號的響應最好也要十分的簡單

我們知道在傅立葉分析中選用的基是復指數信號(對於傅立葉級數展開數學上大多數情況下會表示成三角函數的形式,但本質都是相同的,因為學過複變函數的都知道正弦波其實就是一個圓周運動在一條直線上的投影,故之後論述中以復指數信號為基)所謂的基,也就是在線代裏我們學過的,在某個線性空間中如果可以找到了一些線性無關的向量,這些向量可以通過線性組合構成無數其他該空間的向量,那麼這組線性無關的向量就稱為該空間的一組基,雖然我們在線代裏的基是以向量形式表示,而這裡的基是一組函數,但思想上是一致的,如果這組函數兩兩之間的內積為零,而自己與自己的內積為1,那麼這組基就被稱為正交函數基,所謂內積,也就是求其在某個規定區間內的積分,很顯然,傅立葉基是一組無限正交基

接下來先從傅立葉級數說起,任意週期信號(功率有限)都可以表示成一組復指數信號(傅立葉基)的線性組合,這裡用到的復指數信號可能是無限個,也可能是有限個,對於離散的情況而言,因為離散復指數信號的週期性,必然是有限的,而在滿足狄利克雷條件時,信號的傅立葉級數展開是收斂的,而對於每組基前面的係數也非常好求,根據正交性,只需要將原始信號與基做內積即可求得,這原本應該是數學裡級數那一塊的內容,不做深究,但現在的問題來了,為什麼我們要選擇復指數信號作為基(傅立葉基),而不是其他的信號,其實在不同情況下,我們也是有依據其他的基所做的變換的,比如哈達瑪變換,小波變換,這些基是不是比不上傅立葉基,或者說,為什麼傅立葉基我們用的最多,這確實是一個值得思考的問題。

這裡回過頭來看我們之前提到的尋找基的兩個準則,首先,這組基本信號要能夠構成一類相當廣泛的有用信號(一會說到傅立葉變換時,就會知道傅立葉變換的使用條件是針對能量有限信號,只有這類信號才能做傅立葉變換),然後呢,在線性時不變系統中,對每一個基本信號的響應最好也要十分的簡單,這裡,就要說到復指數信號一個非常神奇的性質了,復指數信號是線性時不變系統的特徵函數,所謂特徵函數,又可以和線性代數裏的特徵向量做類比,如果某個矩陣乘以一個向量後所得向量與該向量平行,那麼就稱該向量為該矩陣的特徵向量,而特徵函數也就是說,一個復指數信號通過線性時不變系統後仍舊是一個復指數信號,其頻率未發生變換,只是指數全面的幅度發生了變化,而這個幅度也是可以用一個通式表示的,那就是該線性時不變系統的單位衝激響應的傅立葉正變換,這件事情非常的神奇,神奇到我們就有了頻譜這個東西(雖然準確來說我們在能量信號的傅立葉變換中才去說頻譜,傅立葉級數中通常叫傅立葉係數譜)

總之,這裡通過線性時不變系統後,復指數信號的頻率沒變,係數是一個關於頻率w的函數,我們將其稱為頻率響應,對於原始的輸入信號在做傅立葉展開時(即一組復指數信號的線性組合),每個不同頻率的復指數信號前都會有一個係數,這個稱之為傅立葉係數而線性時不變系統也就可以看作是通過乘以相應頻率點上的頻率響應值來逐個改變輸入信號的傅立葉係數,於是我們整理一下就會發現,如果我們知道一個線性時不變系統的單位衝激響應,通過傅立葉正變換可以求出其頻率響應,而如果我們又知道輸入信號的傅立葉係數,那麼自己通過乘法就可以求出輸出信號所對應的傅立葉級數,而不需要先在時間域上做卷積運算,再做傅立葉級數展開這麼麻煩,根據復指數信號是線性時不變系統的特徵函數這一點讓原本的卷積運算變為了更加簡單的逐頻率係數相乘,確實是一件讓人激動的事情

雖然我們還只講了傅立葉級數,沒有說傅立葉變換,但觀者應該已經可以體會到傅立葉分析的奇妙所在,而我們之前說的一個信號的傅立葉級數展開的條件是它首先是一個週期信號,並且功率有限,但如果這麼限定下來,對於非週期信號豈不是很不友好,因此我們要把傅立葉級數再往前推一步,讓其對於非週期信號也同樣適用,而這就是我們通常所說的大名鼎鼎的無處不在的傅立葉變換(這篇我們討論的是連續傅立葉變換以及離散時間傅立葉變換,對於其演進的版本,比如快速演算法的DFT,FFT這些不做探討)

先給出傅立葉變換的使用條件,僅限於能量有限信號,對於非能量有限信號拉普拉斯在向你招手,而更傅立葉級數一樣,還是那句話,一個能量有限信號可以由一組復指數信號的線性組合來表示,但是這裡,每個復指數信號前面的係數都是無窮小,很多人可能對這個表述有疑惑,明明傅立葉正反變化都是以積分的形式給出(連續時),怎麼又是線性組合,這裡就要來源於傅立葉變換的推導,對於每一個能量有限的非週期信號都可以看作是週期無窮大的週期信號,而我們依然將其按照傅立葉級數的方式展開,就會得到一個黎曼和的形式,這和我們在高數中學的定積分的推到過程非常類似,一組極限和的結果變成了在某個區間內的積分,所以雖然傅立葉變換(連續)是以積分形式給出,但其本質還是可以看作一組復指數信號的線性組合,但我之前也說了,每個復指數信號前面的係數都是無窮小,因為會乘上一個積分式裏最後的那個無窮小量,因此我們就不能在用傅立葉係數(傅立葉級數的係數)來表示,而需要找一個非無窮小量,並且去之前的傅立葉係數成正比,因此我們這裡要做歸一化,把每個傅立葉係數成以信號的週期T(無窮大量),得到的就是一個有限值,而這也就是我們通常所說的傅立葉正變換,或者說頻譜公式(注意,這還是一個關於w的函數,可能是實數也可能是偶數),我們將其畫出來應該是一個三維的圖像,一個w,一個實軸,一個復軸,而如果對其取模的話,對於任意頻率都會得到一個實數,就是我們通常所說的幅度譜,當然把它的相位提取出來就是相位譜,只是這個我們通常考試考的不多(但實際上同樣非常重要)

至此,不管是週期信號還是能量有限信號,我們都可以通過傅立葉級數展開或者傅立葉變換來得到其傅立葉係數譜或者頻率譜,這件事情的好處有很多,比如對於原本的線性時不變系統而言,我們不在需要去直接求單位衝激響應,只需要通過輸出信號的傅立葉變換除以輸入信號的傅立葉變換,得到其頻率響應,然後再做一次傅立葉反變換即可,當然其中傅立葉變換的公式是一定的,你可以將其看成是時域向頻域做的一次映射,而輸入,輸出,單位衝激響應,這三者是知二推一的關係,顯然在頻域裏做乘法運算比在時域做卷積運算要方便很多,但如果僅僅是減少運算量這件事情似乎很難說服大多數人接受傅立葉變換,它的優勢覺不僅於此,這裡知乎上有很多的講解傅立葉變換通俗易懂的文章,讀起來肯定比我這一篇要舒服很多,其中很多的道理也講的很清楚,我這裡不再過多展開,僅補充幾點

通常大家說自己學完傅立葉變換後最大的感受就是看問題的角度變多了,以前我們總在時域上看問題,最多不過是四維空間,而現在我們多了一個研究和分析問題的角度就是頻域,時域上很多複雜的問題放到頻域裡面去看就會簡單很多,比如一組不同頻率的正弦波的疊加在時域上可能是一個比較複雜的模型,但在頻域上則是對應於不同頻率處的衝激響應,一目瞭然,從實際問題中體會傅立葉變換的妙處和哲學是一個理解它的不錯的方法,但是在我看來,由於這本身還是一個數學方法,所以最好的還是要從數學的角度來看其實傅立葉變換,或者是小波變換,或者是離散餘弦變換,這些變換本質都是一種基變換,對於不同的系統,不同的研究對象,我們可以選取不同的基來讓研究和分析變得更加簡單,比如因為復指數信號是線性時不變系統的特徵函數,因此我們在研究線性時不變系統及其特性時通常採用傅立葉變換,選取了一組好的基,可以讓問題變得簡單,比如我們的現在機器學習裏很多的降維演算法,像PCA,K-L變換也是基變換,對於一些基可能會出現很多很小的係數,或者是零係數,這要用這組基去表示這一信號或者向量時也就更加的簡潔,而越是簡潔就越於分析

總之,傅立葉變換是一個非常神聖而又優雅的數學方法,它的應用絕對遠不止本文提到的這些,比如濾波,調製等等,由於筆者學通信出生,對這方面的內容還是很有興趣的,但我想每一個學EE的同學都應該把傅立葉變換熟記於心,同時不至於其公司的簡單形式,更應知道其適用範圍和數學內涵,我想這對於我們以後的研究和學習都大有裨益

推薦閱讀:

相關文章