作者:Kendall Castor-Perry 為什么要使用 FIR 濾波器呢?我們已經在 PSoC Creator 的濾波器工具中引入了優秀的無限脈沖響應(IIR)濾波器,而且花了很長時間向人們解釋為什么IIR 濾波器是一個很好的選擇。這種濾波器完成同等濾波工作所需的處理循環次數明顯更少。其實,FIR 和 IIR 各有優缺點,FIR 濾波器的脈沖響應有限,這正是我們在最近的項目中選擇FIR的原因所在。 現在重申濾波器類型縮寫可能有點老套,FIR 就是Finite Impulse Response (有限脈沖響應)的縮寫。不過,有些情況下我們確實需要脈沖響應的這種“有限”性。 如果濾波器的脈沖響應時長受到嚴格限制,那么其“存儲器”容量就有限。輸入信號發生變化的時間比“現在”要早,即“現在”減去脈沖響應持續時間,因此不會對最近的輸出采樣產生影響。如果輸入穩定為一個常量,那么輸出經過脈沖響應同等的持續時間后也會變成常量。換句話說,穩定時間是有限的,而且是確切已知的。 與此形成對比的是,IIR 濾波器的輸出至少在理論上受到過去很早階段輸入信號的影響。而且輸出會在輸入穩定后無限長的時間內持續變化。對于標準的量化數字信號來說,很難確切說明輸出到底什么時候才會停止變化。事實上,有時輸出永遠不會完全穩定下來,而是在所謂的“極限環”(limit cycle)模式中變動。這是我們今后要探討的優缺點權衡問題,現在繼續討論本文的主題。 近期,有同事希望利用濾波器有效抑制 50Hz 和 60Hz AC 線(加上二次諧波)對微小感應器信號的影響。此外,我們還需要嚴格限制濾波器的穩定時間。顯然,這一要求使得 IIR/FIR 之間的選擇結果必然落在 FIR 陣營。就我目前使用的 PSoC3 和 PSoC5 器件的數字濾波器模塊硬件而言,這兩種濾波器都適用。 為了充分滿足同時進入硬件的濾波器通道數量要求,濾波器必須非常“小”,而且不能采用會造成資源浪費的低效設計方法。我需要根據響應時間要求來設定每個濾波器的系數數量!我將在第二部分介紹具體的實施方法,不過為了便于理解,我們首先要考慮一下 FIR 濾波器的含義及其表示方法。 FIR 濾波器如何定義? FIR 濾波器完全由一組有序的值來定義,這些值按時間順序與輸入信號相乘(或加權)。當然,信號的延遲采樣很簡單,只需將值儲存在存儲器的某個位置然后再讀取即可。它不必是數字存儲器。FIR 濾波器的一種早期形式被稱為橫向濾波器,根本不會對信號進行數字化,而是直接將電壓存儲在小的電容器上,然后再進行讀取。今天大量用于圖像感應器的電荷耦合器件(此前一度用來創建采樣模擬電壓存儲器)串聯起來形成延遲線——就此而言,早期的 FIR 濾波器其實就是模擬器件。不過這里有些跑題了,我們要回到主題上來。 將這些加權延遲輸入信號加在一起,就能得到所需的輸出信號。如果此過程中的輸入信號是一個脈沖信號,僅在一個采樣時間內是非零值,那么濾波器輸出(即脈沖響應)的形式與系數序列相同。圖 1 給出了濾波器系數的一組實例(用 PSoC Creator 工具設計的 15-tap FIR)以及增益和脈沖響應情況。 ![]() 圖1:15-tap FIR 濾波器實例——系數、頻率和脈沖響應。 當然,許多方法都可以用來計算系數,得到所需的濾波特性。現在,濾波器設計工作跟烹飪差不多。其他人已經把原料備好,您只需將飯菜放進微波爐里就算完成任務了。此外,您也可自己做一些努力,用基本的原料和工具做成一些新花樣。如果您對美食的加工流程有更多認識,那么就會對美食產生更深刻的理解。對于電子設計,特別是濾波器設計來說道理也是如此。 讀者會意識到我其實在反復重復一個命題,即有時候需要卷起袖子來自己動手。這樣您就能創造出一些市場上沒有的獨特產品,或者及時發現信號問題所在。 好消息是,即使您不是濾波器專家或數學達人也能做得很好。我們繼續用烹飪來打比方,作為一個大廚,您可以用美拉德反應(Maillard reaction)來烹制可口佳肴,但不必了解它的化學原理。同樣,您也能運用一些代數知識設計出色的濾波器,盡管您可能并不完全了解其真正的含義。這就是我們下面要做的! 將 FIR 濾波器想象成多項式 設想一下,將代表 FIR 濾波器系數的值序列看成變量 z 的多項式。多項式是變量乘方的總和,每個變量乘方項都乘以某個系數。這就是之前的 FIR 濾波器定義。 在研究采樣信號和信號處理系統的過程中,我們大量使用變量 z 和它的倒數 z^-1。該變量沒有明確的物理含義,但與時間密切相關。z^-1 則與將信號延遲單次采樣周期的這種行為有關(數學上稱作運算符)。 在因果系統中,輸出只能被已經發生的事件影響,也就是延遲的輸入信號。結果就是在濾波器方程式中經常出現 z 的負次冪。我們通過與 z 的高次冪相乘可以使多項式看起來更加熟悉。您不必了解 z 變換的原理和方法,只需利用 z 和 z^-1 多項式完成實際工作即可。 圖 1 所示濾波器的多項式表現形式如下。為了簡化方程式,我降低了系數有效數字的位數。以下包括負次冪[1]和正次冪[2]兩種形式。 ![]() ![]() 這看起來并不復雜,只是用另一種方式來表達已知的濾波器而已。這種表示方法使我們能夠用一些強大的基礎代數工具進行分析,最終通過有用的屬性對多項式進行綜合。關鍵在于我們能夠對此類多項式進行因式分解,使其包含多個線性或二次方程獨立子項,并求得最終結果。這會不會喚起您當年代數課上的回憶呢? 為了將多項式進行因式分解,我們需要找到它的根。有一些變量的值可以使多項式的值為零。大多數數學工具都提供用于計算多項式根的函數。根可以是實數(線性項)也可以是一對復數,相乘后成為二次項。整體多項式等于所有二次項和線性項的積。 下面我們來找出示例濾波器的根和因數。我使用 Excel 根取得器(Excel root finder) 完成這項工作。 表1:等式中多項式的所有根[2] ![]() 共有 14 個根,因為是 14 級多項式(第 15 級是常數項,也就是 z 的零次方),其中 4 個是實數,其余為共軛復數。還記得求解二次方程的經典公式嗎?當平方根中的表達式為負時,就會形成根的虛數部分。正負號說明有兩個表達式,代表虛數不分彼此相反。 把所有項(z 的根)相乘,寫成因數形式。將復雜對結合為平方項,得出理想的實數系數,例如將共軛復數 x+jy 和 x-jy 相乘: ![]() 對表 1 中所有根或根對都采取這種算法(選擇實部相同的兩個根),我們得到等式 4: ![]() 為了確保正確,我再次對等式[4]做乘法(利用 Excel),圖 2 說明我們返回了相同的濾波器。 順便說一句,可直接對脈沖響應使用 Excel 的 FFT 函數來獲得響應結果。如果手頭沒有仿真器,還可以使用另一種方法來計算頻率響應。濾波器在脈沖響應中只有 15 個有用的時間點,我用額外的零值將它擴展到 1024 點,得到一個具有理想頻率間隔的平滑 FFT 圖。 不過您可能會感到不解,做了這么多我們到底學到了什么?其實,有用的東西在于,因數的積代表濾波器行為。濾波器包括一系列連接塊,每個塊都被因數賦予一個多項式,從而形成小的濾波器。通過對 FIR 濾波器的大多項式因式分解,我們能獲得一系列小濾波器(每個具有 2 個或 3 個tap加權),串聯起來就能獲得與原濾波器相同的濾波器行為。 現在,IIR 濾波器通常被設計為二級串聯形式(即二次方程)。人們很少關心 FIR 濾波器的等效因式分解情況。這是因為 FIR 濾波器的實施已經很簡單了,因此細究也沒什么優勢。不過,在對 FIR 設計軟件得出的系數集進行分析時,這仍是很棒的工具。 我的主要目的并非是用這些工具拆分別人的 FIR 濾波器,而是用來發現因數本身的行為。我們隨后就能分別操縱每個因數,進而實現我們所需的功能。如果我們從頭創建某些因數,每個因數都能完成有用的功能,再將其組合在一起成為多項式,那么多項式系數也就是能夠同時完成所有功能的 FIR 濾波器的系數。 ![]() 圖2:將等式[4]相乘所得多項式的響應情況 不妨考慮一下,我們的 FIR 濾波器在阻帶有三個空值(圖 1 和圖 2)。我們將多項式[4]進行因式分解后,有三個因數是常數項(即 z^0 的系數)。這并不是巧合。下次,我們要談談怎么驅動這一進程,讓因數滿足特定的阻帶行為。這將說明好的濾波器設計不止一個根!再見! P.S. 歡迎關注我的賽普拉斯博客:www.cypress.com/go/thefilterwizard,您也可通過博客向我發送電子郵件。 關于作者: Kendall Castor-Perry 是賽普拉斯半導體公司的首席架構設計師,從事面向全新 PSoC 平臺的混合信號系統分析和設計工作。Kendall 在模擬設計、濾波和信號處理等領域擁有數十年的豐富經驗,擅長多領域信號采集、信息提取以及其它信號處理工作。 |