1. 程式人生 > >頻域與時域濾波 (一)

頻域與時域濾波 (一)

前面通過 Ken 與 Roy 的對話,我們知道一個訊號(嚴格而言是週期訊號)可以用許許多多的正(餘)弦波加在一起來表示。而對於不同的訊號,這些正(餘)訊號波的振幅和頻率不盡相同,因此,一個訊號實際上對應一系列的振幅和頻率,正如前面所述,這個振幅和頻率的集合就是所謂的頻譜(或者任何你喜歡的可以表示相同意義的名稱)。總而言之,有了訊號在頻域空間上的定義,我們可以討論許多有趣的問題。今天,我們將介紹訊號處理中很重要的概念--濾波。一如既往,問題由 Ken 與 Roy 間的對話來展開。

Roy: 還記得我們說過一個訊號可以用許多特定的波形“加起來”來表示嗎?
Ken: 是的。我們還提到了如何用所謂的正交性來找出這些波形。
Roy: 很好。今天,我們接著說點別的,不妨從頻域空間來說起。你還記得什麼叫頻譜吧!
Ken: er...頻譜就是頻率的集合嗎?
Roy: “譜”這個詞也許比較難懂,但你用了“集合”一詞來解釋,說明你對譜還是有點概念的。對於“譜”,我們最熟悉的應該是菜譜了吧。菜譜不但止是一些材料的集合,它還給出了組合這些材料的方法。依樣畫葫蘆,我們可以認為譜就是一些“成份與合成方法”的集合。或者說,“譜”是物件或事物按一定形式編排好的東東。
Ken: 那麼,頻譜是頻率的集合不對嗎?
Roy
:
如果加上振幅和“組合”方法就對了。你己經知道一個訊號可以用一系列不同頻率以及幅度的波形合成的。那麼,我們總可以說,而這種波形是正(餘)弦波,因此,我們只要給出它的頻率和幅度就能表示某個特定的正(餘)弦波了(實際上還要有位相,但我們這裡忽略了)。假設有這樣的一個訊號 F(t) 它可以用下列正弦波表示

F(t) = A_0/sin/omega_0t + A_1/sin/omega_1t + A_2/sin/omega_2t + A_3/sin/omega_3t

看到了吧, (A_0, /omega_0), / (A_1, /omega_1), / (A_2, /omega_2), / (A_3, /omega_3) 這四組數對是不是確定了四個正弦波?
Ken: 是的
Roy: 我們可以進一步認為這四組數對也確定了訊號 F(t)
Ken: 嗯...但這四組數對只確定了F(t)嗎?它們會不會也可以表示其它訊號?
Roy: 問得好,這涉及數學上的唯一性問題,我想不必在這裡討論,但你可以想像一下,這四組數對所確定正弦函式的組合方式是固定的,所以就不會組合出其它訊號了。
Ken: OK. 這樣說來,這四組數對訊號 F(t) 的另一種表達方式。
Roy: 你說到點子上了!實際上,這些數對的集合就是所謂的頻譜。請注意,這些數對能夠而且只能夠表示訊號 F(t),因此,一個訊號只有一個相應的頻譜!
Ken: 明白了。也就是說如果某東西可以用其它東西的集合來表示,這個集合就叫譜。而對於訊號而言,我們剛好找到了它與正(餘)弦波之間的關係,而正(餘)弦波又是由幅度和頻率來確定的,所以用 (幅度, 頻率) 的集合就可以表示這個訊號了。我們就稱這個集合為頻譜。
Roy: 就是這樣。那麼,我再考考你,我們中學裡學過,集合元素在集合中的排列位置是任意的,那麼頻譜中數對的排列位置重要嗎?
ken: 按理說應該不重要啊。試想想,假設我把訊號打亂成下列樣子
(A_3, /omega_3), / (A_1, /omega_1), / (A_0, /omega_0), / (A_2, /omega_2)
那麼,重新相加起來還是得到 F(t)

A_3/sin/omega_3t + A_1/sin/omega_1t + A_0/sin/omega_0t + A_2/sin/omega_2t = F(t)
Roy: 沒錯,看來的確如此。但如果放到座標系上,次序就不能隨意了。
Ken: 不太明白。
Roy: 或者我們先看看下面的頻譜圖,也許有助你理解問題。



這張圖的橫座標是頻率(也就是我們的/omega),而縱座標就是幅度(即我們的 A)。從圖中可見,陏便找一個 /omega, 總有一個 A 與它對應,因此,這張頻譜圖總可以描述為 (A, /omega) 的形式。但有一點要注意,現在 /omega 落在座標軸上,而座標本身是有數序的,因此,(A, /omega) 的在譜中出現的次序是不能隨意的。
Ken: 還是不太理解,難道你非要把它放到座標系裡嗎?我偏不要座標系,這是不是就可以忽略那個順序?
Roy: 你當然可以這樣做。也就是說只要給我正確的 (A, /omega) 我總可以給你正確的 F(t)。但如果大多數情況下,如果把譜放到座標系下,令到頻率由小到大或由大到小的排列,對於訊號的處理是很方便。
Ken: 能舉個例子嗎?
Roy: 先不要急。我們先討論一個比較有趣的問題。假如我們要為一張人面畫像上顏色,畫像的輪廓己描出。手上有若干種顏色筆,每種顏色筆不同的粗細。如果要你為畫像的不同部分上色,你會怎樣挑選畫筆?
Ken: 這還用說?對於面部這些比較粗糙的部分,用粗的顏色筆來上色;對於頭髮、皺紋等細微的特徵,用細的顏色筆來上色。
Roy: 對,這是小學問題拉。對於一個畫家,為了增加立體感,她可能會先為整張畫打個底色,然後用不用顏色的粗筆為頭像的不同部分上一層顏色,表達基本的輪廓。然後用中等粗細的筆進一步突出深些部分,最後用細筆加工如頭髮等精細的地方。這樣,畫面看起來才能明暗有致,立體感突出。
Ken: 是的,但這與我們討論的問題有什麼關係?
Roy: 道理是相通的。如果訊號本身很寬(就好比畫上粗糙的部分),如果你用一些很“窄”(嚴格上頻率很高)的波形來合成它,那可能要非常多的波形才能較好的模擬原來的訊號,有些時候甚至無法很好地還原原訊號呢。同理,如果訊號本身很窄,用一些很“寬”的波形來合成它也是很困難的。想像一下,許多很寬的波形的合成的結果總是一些地方不被能完全消去的,因此很難得到一個很窄的輸出。因此,不管原訊號如何,我們似乎應該同時使用“窄”波形和“寬”波形,有時甚至要考慮同時使用正弦和餘弦波形來合成訊號。
Ken: 這不難理解!波形的合成就像填色問題,低頻成分“填”出來的東東比較粗糙(寬),高頻成分“填”出來的東東比較細緻(窄)。
Roy: 定性上可以這樣理解。回到我的填色問題上,我們現在改用 photoshop 來處理填色問題,為每一種組細度的畫筆建立相應的著色層,這樣問題就很清楚了。我們模仿畫家的做法,先在底稿上建立一個底色層,加上底色。再建立一個粗筆層,在其上用粗筆大致描出輪廓。接著,再建立一個層,用細一點的筆進行填色。如此類推,不斷建立新的層,用更細的筆填色,直到填色完成為止。
Ken: 哈,問題很清楚,你是想說在不同著色層上用不同粗細的筆填色就好像把不同頻率的波形“加”起來一樣,不同頻率成份越多,那麼出來的效果就越逼真吧?但是你這個比喻是不是把幅度給忘了呀!
Roy: 幅值就好比著色時所用的力度或顏色的深淺,著色時越用力、時間越長當然顏色越深,反之亦然。如果你用粗筆對第一層著色時所加的顏色很深,那麼不管你最後用如果細緻的畫筆、用怎樣鮮豔的顏色都會埋沒在第一層頻色下面的,畫面最終只能顯示出一個黑壓壓的輪廓而矣。
Ken: 這樣說來,幅值就表示了每一個波形成分對原來的訊號的貢獻了?如果某個頻率的成分的幅值越大,它的貢獻就越多。也就是說,如果一個低頻的成分其幅值很大,而其它高頻成分的幅值相對較小,那麼,合成的結果大約就是原來波形的一個輪廓而矣。
Roy: 是的。現在我們不妨用一點數學來簡單檢證一下。假設有一個訊號,其形式如下
F(t) = 3/cos(3t) /sin(3t+/pi/3) + 2/cos(0.5t)
利用簡單的三角和差公式可以展開為
F(t) = /frac{3}{2}/sin(/pi/3) + 2/cos(0.5t) + /frac{3/cos(/pi/3)}{2}/sin(6t) + /frac{3/sin(/pi/3)}{2}/cos(6t)

這樣,訊號就被分解為幾個正弦和餘弦訊號的和。其中,第一項是個常數,可以看作頻率為零。第二項的頻率顯然遠小於第二和第三項的頻率。現在來考慮一下高低頻對原訊號的影響,如下圖所示





其中,藍色線表示原訊號。右上角的圖是去掉高頻成份後結果,即
F(t) = /frac{3}{2}/sin(/pi/3) + 2/cos(0.5t)

左下角的圖是隻保留零頻(常數)後的情況,即
F(t) = /frac{3}{2}/sin(/pi/3)

右下角的圖是去掉低頻後的情況,即
F(t) = /frac{3/cos(/pi/3)}{2}/sin(6t) + /frac{3/sin(/pi/3)}{2}/cos(6t)

從圖中你看出什麼來?
Ken: 哈哈,這張圖很形象地說明了我們剛才討論的問題。首先,高頻部分描述原訊號的精細結構(就好比細畫筆描出畫像的細緻部分一樣),右下角的部分正好顯示出原訊號中的彎曲起伏的狀況,由於沒有了低頻,所以整個訊號的大致輪廓被抹掉了。而右上角的圖恰恰相反,它把高頻成份去掉了,剩下的部分剛好是原訊號的輪廓起伏(就好像粗畫筆把描出影象的輪廓一樣)。至於左下角零頻圖嘛...我不是太理解它的意義!
Roy: 如果你細心一點,會發現這個零頻剛好是一條位於訊號中部的線,用物理的述語來講,它表示整個訊號的平均能量(嚴格上講它的平方才是能量)。你看不是嗎,它的上方與下方有的地方凸起,有的地方凹下,所以平均起來就是一條線。在我們的著色例子中,它就相當於畫家在繪畫著色時所打的底色,這個底色反映了整幅畫的基本色調,而且處處都是一樣的,與所用的顏色筆的粗細沒關聯,這不是很形像嗎?
Ken: 的確很形象。而且還可以找到如下類比,在上面談到的 photoshop 著色問題中,如果我們把粗筆的著色層隱藏掉,則會顯示出一些沒有輪廓的細緻線條;相反,如果把細筆的著色層隱藏起來,則會顯示出一幅只帶輪廓的影象。如果把所有著色層都遮蔽起來,則顯示只包含純色的底色層了。這就好比上面的幾張圖了。
Roy: 是的,過程就是這樣。現在,如果你要簡單地驗證一下上面所述的幅度對訊號的貢獻問題,你會怎樣做?
Ken: 這很簡單,我們可以先把上例子中的 F(t) 的高頻成份的幅值減小,把低頻成份的幅值增大,合成訊號中的細緻特徵應該會被減弱,而且低頻成份與高頻成份的幅度的比越大,細緻特徵越不起眼。
Roy: 沒錯。下圖是計算機繪圖的結果。


Ken: 我想我大致明白了。現在可以回到頻譜的順序問題的討論上了吧。
Roy: 實際上,上面所舉個例子就是所謂的濾波過程。從頻域的角度來看,有意地將某些頻率的成份去掉的過程就叫濾波。現在你不難發現,如果把頻譜放在座標系上,使得頻率落在橫座標上,這樣的有序結構是有利於我們觀察譜的結構,從而確定怎樣濾波等等。
Ken: 也就是說如果我們想保留訊號大致輪廓,只要有頻譜中靠後的部分(即高頻部分)去掉即可,是這個意思嗎?
Roy: 是的。但正如你所意料到的,實際情況要複雜些,下次我們要討論時域的濾波過程,從而進一步深化濾波的概念。
Ken: 好的。