在現代電子系統中,到處都可以看到數字信號處理( DSP )的應用,從MP3播放器、數碼相機到手機。DSP設計人員的工具箱的支柱之一是有限脈沖響應( FIR )濾波器。FIR濾波器越長(有大量的抽頭),濾波器的響應越好。然而這里有折衷的情況,由于大量的抽頭增加了對邏輯的需求、增加了計算的復雜性,增加了功耗,以及可能引起飽和/溢出。
多相技術可以用于實現濾波器,擁有與傳統FIR濾波器可比的結果,而且使用了較少的邏輯、需要較少的計算資源、更低的功耗,并減少了可能的飽和/溢出。可用如今新型的小規模、中檔的FPGA,如LatticeECP3 來實現這些濾波器。
基本概念
進入DSP世界可能會有些令人生畏,因此,讓我們首先介紹一些簡單的概念。對于數字系統,如音頻,視頻和無線領域,形成信號的結果是與采樣率相關的。舉例來說,以48 kHz(即每秒48000個樣本)對專業音頻信號進行采樣。相比之下,消費者的CD播放機則使用44.1 kHz的采樣率。
多速率系統
多速率系統使用多個采樣速率。在某些情況下,運行于某個速率的系統的一部分需要一個原來以另外某個速率采樣的信號(轉換專業音頻到消費者的CD音頻就是一個例子)。在這種情況下,原始信號的速率必須根據需要增加或減少。
或者針對特定的用途,也可能以比實際需要更高的速率對原來的數據進行了采樣。因此,降低采樣率,然后運行所得到的數據就可以大幅度降低數據吞吐量的要求,降低對存儲器的要求,提高處理效率并降低功耗。
向下采樣和抽取
讓我們首先考慮降低采樣率的問題。假設我們有一個信號,原來以我們稱之為fHz的某一頻率進行采樣,如如圖1所示。
圖1 用f Hz采樣率對原始信號采樣
現在假設我們要降低采樣率至原來頻率的1/4。達到此目的一個方法來就是簡單地扔掉每四個原始采樣中的三個,如圖2所示。
圖2 用1/4 f Hz采樣率得到新的信號
在數字信號處理中, “混疊現象”是指采樣時造成不同的連續信號彼此難以區分的情況,它們互相“混疊”。 混疊現象也稱為失真,或贗品,即源于采樣重構的信號不同于原來的連續信號。
如果我們丟棄了如上文所討論的一些樣本,由此得到的信號會含有混疊現象的贗品。作為一個簡單的例子,考慮一個音頻信號,可能含有人耳聽不見的高頻分量的樂曲。如果我們以過低的速率對這個信號采樣(當我們丟棄一些樣本時,實際上是我們正在做的事情),然后用數字模擬轉換器重構這個樂曲,我們可以聽到欠采樣高頻分量的低頻混疊。
為了避免這種情況,常見的做法是在丟棄不想要的樣本之前,用低通濾波器去除不要的高頻,如圖3所示。
圖3 在丟棄任何樣本前對這個信號進行濾波
一般而言, “向下采樣”只是指丟棄樣本的處理而不執行濾波的操作。相比之下, “抽取”指的是降低采樣率的整個過程,即執行濾波操作,然后丟棄樣本。實際上, “向下采樣” 、“下變頻”和“抽取”往往交替使用。
“抽取因子”是指輸入采樣率與輸出采樣率之比。通常用字母M來表示。在上面的例子中,輸入速率是輸出速率的4倍,所以M=4。
向上采樣和內插
現在考慮的情況是,我們希望提高采樣率。這樣做的原因是為了使系統的另一部分與信號運行在更高的采樣速率。假設我們從一個信號開始,即原來以我們稱為fHz的某個頻率進行采樣的信號,如圖4所示。
圖4 采樣率為f Hz的原始信號
現在假設我們要增加采樣率為原來頻率的4倍。我們開始在原始樣本之間插入零值樣本,以提高采樣率,如圖5所示。
圖5 用零值樣本對原始信號進行擴充
但現在有一個問題,因為新的零值樣品添加了不要的頻譜分量至信號。為了解決此問題,我們對這個新的信號進行了濾波,除去了不想要的分量,產生了更合適的采樣值,如圖6所示。
圖6采樣率為4倍 fHz的最終信號
從技術上講, “ 向上采樣 ”只是指插入零值樣本的過程。相比之下, “內插”指的是增加采樣率的整個過程,即插入零值樣本,然后進行濾波操作1。實際上, “向上采樣 ”、“向上轉換”和“內插”往往交替使用。
“內插因子”指的是輸出采樣率對輸入采樣率的比例。這通常用字母L來表示。在上面的例子中,輸出速率4倍于輸入速率,因此,L = 4 。這個過程的圖形說明參見圖7。
圖7 插入零值樣本后對這個信號進行濾波
重采樣
前面的討論中,應該指出的是,抽取和內插因子可以假設為只有整數值。也就是說,我們只可以抽取或內插整數因子,而不是分數因子。例如,如果進行抽取,我們只能丟棄整數的樣本(2個中的1個、3個中的1個、3個中的2個、3個4個中的3個,等等)。
假設我們要修改信號的采樣率,以便在兩個子系統之間進行接口。如果子系統的采樣率的比率是一個整數值,那么我們只需要執行抽取或內插。但是,如果采樣率的比率是一個分數值,那么我們需要進行抽取和內插的組合,這樣的過程稱之為重采樣。
例如,如果用2.5因子進行重采樣,首先我們用插值因子為5 ,然后用抽取因子2產生輸出對輸入采樣率為5/2 = 2.5的采樣率,如圖8所示。
圖8 重采樣(L= 5、M= 2 )
在實踐中,如圖8所示的內插和抽取濾波器將組合在一起。術語“重采樣因子”是指輸出采樣率和輸入采樣率之間的比例。不考慮涉及的頻率,這可以表示為內插和抽取因子L/M之間的比例,在上面的例子中就是5/2 = 2.5。
作為另一個例子,考慮重采樣專業音頻信號的過程,采樣率為48千赫,對于消費者的音頻設備,需要的采樣率為44.1千赫。在這種情況下,重采樣因子等于輸出速率對輸入速率之比: 44.1 kHz /48 kHz = 0.91875 。
看看另一種方法,采樣速率必須由48,000Hz改變到44100Hz,這意味著輸入輸出比為44100/48,000 = = 441 / 480 = 147 / 160。由于在147和160中沒有公共的因子,我們只好就此止步,這意味著我們需要的內插因子為147 ,然后抽取因子為160,如圖9所示。
圖9 對商業音頻重采樣(L= 147、M= 160 )
再次說明,重采樣因子可表示為內插和抽取因子L/M之間的比例,就是147/160 =0.91875 。毫不意外,這正是我們得到的與輸入和輸出采樣率的比例完全相同的值,因為所需的內插和抽取因子源于這些比率。
介紹FIR濾波器
有兩種基本類型的數字濾波器:有限脈沖響應( FIR )和無限脈沖響應( IIR)。
IIR濾波器使用反饋,而且往往是模仿傳統的模擬濾波器的響應。反饋的用途意味著他們的脈沖響應是遞歸的,并延伸到無限的時段。雖然可以用比FIR濾波器更少的計算來實施IIR濾波器,IIR濾波器可能有穩定性的問題,他們可能與用FIR濾波器完成的性能不匹配。
相比之下, FIR濾波器沒有反饋,這意味著它的脈沖響應在一個有限的時間范圍之內。 FIR濾波器擁有優于IIR濾波器的幾個優點,其中包括一個事實,即在整個頻譜范圍,他們有完全恒定的群時延,在所有頻率范圍內,不論濾波器的大小,他們是完全穩定的。
通用FIR濾波器的圖形表示如圖10所示。在這種情況下,輸入樣本xn通過一系列的緩沖寄存器(這些都標記為z-1,對應延時單元的Z變換)。
圖10 經典FIR濾波器的通用表示
濾波器的工作原理是用一系列的常數(稱為抽頭系數)乘以一系列最新的n個數據采樣,并對所得到的數組的單元進行求和。通過改變系數和濾波器抽頭數目的加權(值),FIR濾波器實際上可實現幾乎任何所需的頻率響應特性。
問題是FIR濾波器可能需要大量的抽頭(有時數百個),以實現其預定的目標。每一個抽頭需要消耗邏輯資源的乘法器累加器( Mac )單元。另外在每個時鐘,每個抽頭執行消耗功率2的乘法和加操作。
用多相FIR濾波器進行抽取
多相濾波器的基本概念是把FIR濾波器分割成若干較小的單元,然后組合這些單元的結果。首先,讓我們考慮一個基于常規8抽頭FIR濾波器的抽取子系統的符號表示,如圖11所示(為了使用這些例子,我們假設抽取因子為M = 4 )。
圖11 基于傳統的8抽頭FIR濾波器的抽取器的符號表示
現在讓我們假設主時鐘正在以某一頻率fHz運行。像往常一樣,在濾波操作之后任何不要的樣本將被丟棄,但這樣做是低效率的,因為這意味著是以完全的時鐘頻率在進行濾波。用另一種方式來看這種操作,即在每個時鐘時刻,每個抽頭級執行乘法和加運算。
相比多相實現的情況,我們可以將原來的8抽頭FIR濾波器分為四個2抽頭子濾波器,如圖12所示。
圖12 基于4 × 2抽頭多相濾波器的抽取器的符號表示
假設同樣的主時鐘以f Hz的頻率運行,我們可以想象輸入數據流被送入一個旋轉開關(當然,這可用標準的邏輯技術來實現)。第一個數據值送入第一個子濾波器;第二個數據值送入第二個子濾波器;第三個數據值送入第三個子濾波器;第四個數據值送入第四個子濾波器。然后,我們進行“循環”操作,以便第五個數據值送入第一個子濾波器;第六個數據值送入第二個子濾波器;等等。
使用子濾波器減少了可能的飽和/溢出(發生任何飽和/溢出通常只需要在最后的函數求和時進行處理)。另外,使用子濾波器具有一個直接有效的優點,因為在執行濾波操作之前,我們有效地“抽取”了數據。這也意味著,我們的四個子濾波器中的每個都能有效地以F ÷ 4Hz的頻率運行,如圖13所示。
圖13 4 × 2抽頭多相濾波器的運行情況
除了任何寄存器和一般用途的邏輯,常規8抽頭FIR濾波器中的每個抽頭包含一個乘法器和一個加法器,當然為我們提供了總共8個乘法器和8個加法器。濾波器之后需要一些額外的邏輯,以便丟棄任何不想要的樣本。
同樣,在我們最初的4 × 2抽頭多相實現中的每一個抽頭含有一個乘法器和一個加法器,再次為我們提供了總共8個乘法器和8個加法器。在多相實現中,需要實現“旋轉開關”送入濾波器的邏輯數量大約相當于在常規8抽頭FIR濾波器中丟棄不要的樣本所需的邏輯。
當然,多相實現還需要一些額外的邏輯和一個加法器累加來自四個子濾波器的結果。因此,最終的結果是,最初的多相實現需要比傳統的8抽頭FIR濾波器更多一點的邏輯。
然而,對于傳統的8位FIR濾波器,在每個時鐘都要執行8次乘和8次加。相比最初的多相實現的情況,在任何主時鐘時刻,只有一個子濾波器是工作的。由于在這個例子中每個子濾波器含有兩個抽頭,這意味著這個功能的濾波器部分在每個時鐘只進行兩次乘法和兩次加法。
當然,從四個子濾波器收集結果的求和功能還必須在每個主時鐘進行加(在每4時鐘周期開始時,這個累加器清零;它從四個子濾波器收集結果; 在每4時鐘周期結束時,它產生一個新的值)。
這意味著,最初的多相實現的每個子濾波器有效地以常規8抽頭FIR濾波器1/ 4的頻率運行。反過來,這意味著最初多相實現只在每個主時鐘進行兩次乘法和三次加法(包括加法器的加操作),從而大大節省了功耗。
此外,在最初的多相實現中,由于四個子濾波器的每個只用了1/4的時間,這意味著在任何特定時間,我們實際上只需要其中的一個,這使我們更加完善了實現方法,如圖14所示。
圖14 更完善的基于多相濾波器的抽取器實現方案
在這種情況下,我們采用了單一的2抽頭子濾波器,每個抽頭含有乘法器和加法器。在每個主時鐘,我們選擇合適的系數對。每一個抽頭需要額外的寄存器和用于維護的邏輯,但與減少的乘法器和加法器相比,與我們的最初多相實現相比,這是微不足道的。
當然,在我們原來的多相實現中,我們仍然要在每個主時鐘時刻執行兩次乘法和三次加法,。這些抽取實現例子的總結如表1所示。
表1抽取實現實例的總結
利用多相FIR濾波器進行內插
現在讓我們來考慮內插的情況。首先讓我們先考慮一個基于常規8抽頭FIR濾波器的內插子系統的符號表示,如圖15所示。
圖15傳統的基于8抽頭FIR濾波器的內插器的符號表示
針對這些例子的用途,我們假設內插因子為L = 4,主時鐘頻率為FHz。正如先前所討論的,向上采樣(插入零值樣本的過程)發生在濾波操作之前。
現在讓我們來考慮一個最初的多相實現,我們原來的8抽頭FIR濾波器被分成四個2 抽頭子濾波器,如圖16所示。
圖16 基于4 × 2抽頭多相濾波器的內插器的符號表示
在這種情況下,相同的輸入數據流面向所有的四個子濾波器,在子濾波器輸出之間輪流產生主輸出數據流。最終的結果是,多相實現含有如同我們的常規8抽頭FIR濾波器相同數量的乘法器和加法器。然而,因為在內插之前進行了濾波,子濾波器只需要以1 / 4的主時鐘頻率運行,從而大大節省了功耗(這里主時鐘用于子濾波器輸出之間的采樣)。
此外,多相實現不需要向上采樣(零值插入)的邏輯。當然,我們可以用完全運行于主時鐘頻率和復用系數的單個2抽頭子濾波器取代原來的多相濾波器實現。
內插實現的這些例子的總結見表2 。
表2內插實現實例的總結
總結
DSP設計人員的工具箱的支柱之一是有限脈沖響應( FIR )濾波器。FIR濾波器越長(有大量的抽頭),濾波器的響應越好。但是更多的抽頭增加了邏輯要求、增加了計算的復雜性,增加了功耗,以及有更大可能的飽和/溢出。
多相技術3可用于實現濾波器,提供可比較的結果,而使用較少的邏輯,需要更少的計算資源、消耗更低的功率,并減少了可能的飽和/溢出。
所有這一切都意味著,多相基于濾波器的抽取器、內插器和重采樣功能是非常適合用更小的中檔FPGA來實現,如Lattice半導體公司的擁有SERDES功能的LatticeECP3系列,它具有高性能的sysDSP模塊。它的特點是有dual-slice結構,具有級聯/鏈接DSP slice和模塊的功能,增強的DSP指令集使LatticeECP3系列能夠引人注目地用于范圍廣泛的數字信號處理的應用,包括那些需要傳統的FIR和基于多相的濾波功能。
歡迎轉載,本文來自電子發燒友網(http://www.nxhydt.com/)
評論
查看更多