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