一、關(guān)于多采樣率數(shù)字濾波器
很明顯從字面意思上可以理解,多采樣率嘛,就是有多個采樣率唄。前面所說的FIR,IIR濾波器都是只有一個采樣頻率,是固定不變的采樣率,然而有些情況下需要不同采樣頻率下的信號,具體例子我也不解釋了,我們大學(xué)課本上多速率數(shù)字信號處理這一章也都舉了不少的例子。
按照傳統(tǒng)的速率轉(zhuǎn)換理論,我們要實現(xiàn)采樣速率的轉(zhuǎn)換,可以這樣做,假如有一個有用的正弦波模擬信號,AD采樣速率是f1,現(xiàn)在我需要用到的是采樣頻率是f2的信號,傳統(tǒng)做法是將這個經(jīng)過f1采樣后的信號進行DA轉(zhuǎn)換,再將轉(zhuǎn)換后的模擬信號進行以f2采樣頻率的抽樣,得到采樣率為f2的數(shù)字信號,至此完成采樣頻率的轉(zhuǎn)換
但是這樣的做法不僅麻煩,而且處理不好的話會使信號受到損傷,所以這種思想就被淘汰了,現(xiàn)在我們用到的采樣率轉(zhuǎn)換的方法就是抽取與內(nèi)插的思想。
二、抽取
先來總體來解釋一下抽取的含義:前面不是說,一個有用的正弦波模擬信號經(jīng)采樣頻率為f1的抽樣信號抽樣后得到了數(shù)字信號,很明顯這個數(shù)字信號序列是在f1頻率下得到的,現(xiàn)在,假如我隔幾個點抽取一個信號,比如就是5吧,我隔5個點抽取一個信號,是不是就是相當(dāng)于我采用了1/5倍f1的采樣頻率對模擬信號進行采樣了?所以,抽取的過程就是降低抽樣率的過程,但是我們知道,這是在時域的抽樣,時域的抽樣等于信號在頻域波形的周期延拓,周期就是采樣頻率,所以,為了避免在頻域發(fā)生頻譜混疊,抽樣定理也是我們要考慮的因素。
下面來具體來介紹
如上圖所示,假如上面就是某一有用信號經(jīng)采樣頻率f1抽樣得到的頻譜,假設(shè)這時候的采樣頻率為8Khz,可以通過數(shù)格子得到,從0到F1處有8個空格,每個空格代表1Khz,有些朋友可能會問,這不是在數(shù)字頻域嗎,單位不是π嗎,哪來的hz?是的,這里是數(shù)字頻域,采樣頻率F1處對應(yīng)的是2π,這里只是為了好解釋,我們用模擬頻率來對應(yīng)數(shù)字頻率。
上面是采樣頻率為8K的數(shù)字信號頻域圖,現(xiàn)在我要對這個數(shù)字信號進行時域抽取,從而來降低信號的采樣率,我們知道,一旦我們對數(shù)字信號進行時域抽取,那么采樣率下降,而采樣率就是數(shù)字信號頻域的波形周期,那么也就是周期下降,所以,我們對信號進行抽取要有個度,要在滿足抽樣定理的條件下對信號進行抽取,否則就會發(fā)生頻譜混疊。
上圖就是對信號進行了1/5倍的F1采樣頻率抽取,可見,由于發(fā)生了頻譜混疊現(xiàn)象,因為1/5倍的F1是1600hz,而信號的頻帶是1000hz,不滿足抽樣定理,導(dǎo)致發(fā)生了頻譜混疊,所以,為了避免發(fā)生這種情況,除了要滿足抽樣定理之外,即抽樣倍數(shù)不能太高,我們還需要把信號的頻帶設(shè)置在F1/2以下,才能確保信號不發(fā)生頻譜混疊,因此,我們需要在抽取之前加一個低通濾波器,書上叫做抗混疊低通濾波器,用來限制信號的頻帶,然后再進行抽取,這樣的話我們來算一下
低通濾波器的截止頻率就是1/2倍的經(jīng)抽取后的采樣速率,即fc = 1/2 * (F1/M) ,M是抽取倍數(shù)。而1/2*F1對應(yīng)的數(shù)域頻率是π,因此我們得出,
抗混疊低通濾波器的截止頻率是π/M
三、內(nèi)插
抽取的過程是降低采樣率的過程,那么插值的過程當(dāng)然就是提高采樣率的過程。大體的思路可以這么理解,我們將經(jīng)f1抽樣下得到的數(shù)字信號的每兩個點之間進行插值,插入的值是0,插值之后,信號在單位時間內(nèi)的采樣點數(shù)增多,當(dāng)然也就是采樣速率的提升,采樣速率提升后我們知道,那么信號的頻譜的周期就會增加。
需要注意的一點就是,插值前后,我們只是在時域信號中間插入了D-1個零值,僅僅是改變了采樣率,并沒有改變信號的信息,因此,在頻域,信號頻譜的形狀是不會改變的,改變的僅僅是周期,如上圖,F(xiàn)1是插值之前信號的周期,插值之后,信號頻譜的形狀不變,周期成了F1*D,D是插值倍數(shù)。如果我們直接用F1*D倍的采樣率采信號,得到的頻譜會發(fā)現(xiàn),就不會有中間兩個波形,因此,這兩個波形是多余的,書上叫做是鏡像頻譜。既然是多余的,我們就可以將它用一個低通濾波器濾掉,這樣的低通濾波器,就叫做鏡像低通濾波器。這樣我們來計算一下鏡像低通濾波器的截止頻率。
根據(jù)上面這張圖我們可以求出鏡像低通濾波器的截止頻率,可以看到,fc = 1/2 *F1,這里我們假設(shè),內(nèi)插之后的采樣頻率為F2 =F1*D,那么,fc =1/2*(F2/D),而1/2*F2對應(yīng)的是π,注意,這里是1/2*F2對應(yīng)π,不是1/2*F1了,因為這已經(jīng)是插值之后采樣率增加之后的頻譜了,所以我們得出:
鏡像低通濾波器的截止頻率為:π/D
四、 分數(shù)倍抽取與內(nèi)插
根據(jù)前面抽取與內(nèi)插的介紹我們知道了,內(nèi)插的過程是先進行內(nèi)插處理,再通過鏡像低通濾波器,抽取的過程就是先進行抗混疊低通濾波,再進行抽取,我們可以看出來,假如我們想進行分數(shù)倍抽取,比如我要進行3/5倍抽取,就可以先進行3倍內(nèi)插,再進行5倍抽取,這樣就可以實現(xiàn)分數(shù)倍抽取。
再來看一下,當(dāng)進行分數(shù)倍抽取與內(nèi)插的時候,鏡像低通濾波器和抗混疊低通濾波器是連在一起的,因此,我們可以將這兩個濾波器合二為一,截止頻率取兩個濾波器截止頻率的最小值就可以了
五、多速率濾波器的Matlab實現(xiàn)
這里我們假設(shè),要對一個頻率為100hz的正弦波模擬信號進行抽樣,抽樣頻率為900hz,現(xiàn)在我要對采樣信號進行5/3倍提升
根據(jù)我們前面分析的,進行分數(shù)倍的抽樣率轉(zhuǎn)換,先要進行內(nèi)插處理,內(nèi)插的過程就是在原有的時域信號之間,插入I- 1個零值點,采用matlab實現(xiàn)很簡單,首先我們可以計算插值完成之后信號的長度,然后將原來信號進行填充即可
插值完成之后,需要進行低通濾波,由前面的討論可以知道,根據(jù)低通濾波器的截止頻率計算公式,來計算濾波器截止頻率為π/I,然后調(diào)用函數(shù)生成FIR濾波器系數(shù)即可。
緊接著,需要進行的是抽取處理,抽取過程的算法跟內(nèi)插類似,可以先計算抽取之后的信號的長度,然后每個D個采樣點進行一次抽取
下面看一張圖,是我繪制了這個過程的整個流程
根據(jù)上面這張圖我們可以看到,最上面的是原始信號經(jīng)900hz頻率采樣后得到的信號時域波形,然后我對其進行了5倍內(nèi)插,也就是在每兩個采樣點之間插入了4個零值,之后通過了低通濾波器,去掉鏡像波形后的時域波形,可以看到,此時的采樣率已經(jīng)是原來的5倍,接著對其進行3倍抽取,即每隔兩個點抽取一個點作為新的采樣點,得到最下面的時域波形,整個過程原始信號沒有發(fā)生變化,變化的僅僅是采樣率。
六、關(guān)于CIC濾波器
說了這么多,終于進入正題了。前面的都是些基礎(chǔ)知識,只有先掌握了前面的內(nèi)容,才能理解下面的知識,包括下兩篇文章要講的FIR半帶濾波器和多相結(jié)構(gòu)的FIR半帶濾波器。
CIC濾波器呢,是積分梳狀濾波器的英文簡稱,先來看CIC濾波器的單位沖擊響應(yīng)
很明顯的一個特征就是,CIC濾波器的單位脈沖響應(yīng)只有0和1,再來想一下,既然單位脈沖響應(yīng)只有0和1,那么也就是意味著,我們在進行卷積運算的時候,就不需要乘法器,為什么呢?因為濾波器系數(shù)為1的話,相當(dāng)于將輸入信號乘了個1,所以就不需要乘法器,只需要加法器就可以完成卷積運算,正因為如此,CIC濾波器結(jié)構(gòu)簡單,非常適合工作在高采樣率條件下
但是這并不是我們常用的濾波器結(jié)構(gòu),既然是積分梳狀濾波器,總得體現(xiàn)一下積分、和梳狀這兩個特點吧,這名字不是白叫的,因此有如下變形
可以看到,上面的式子是CIC濾波器的系統(tǒng)函數(shù),對其進行變換之后可以得到兩個部分的乘積形式,即分子部分為一個梳狀FIR濾波器,剩余部分為一個積分器,至此,我們CIC濾波器的結(jié)構(gòu)才已經(jīng)成型。
根據(jù)變形后的CIC濾波器的系統(tǒng)函數(shù)可以知道,濾波器的極點為1,因此看上去濾波器是一個不穩(wěn)定的系統(tǒng),但是從整體角度來看,這個結(jié)構(gòu)是由一個FIR濾波器變形而來的,本身是一個因果穩(wěn)定的,因此,變形后的系統(tǒng)應(yīng)該也是一個因果穩(wěn)定的,因此我們考慮到零極點抵消的原因,致使變形后的系統(tǒng)仍是一個因果穩(wěn)定的系統(tǒng)。
從單級CIC濾波器的幅頻響應(yīng)考慮,由于其特殊的結(jié)構(gòu),導(dǎo)致單級CIC濾波器的衰減不足,可以見下圖
可見,單級CIC濾波器濾波器的衰減并不是很足,在階數(shù)比較大的情況下,CIC濾波器的衰減一般穩(wěn)定在13.6dB,要想加大衰減,就必須采用多級CIC濾波器級聯(lián)的形式,每增加一級濾波器,阻帶衰減增加13.6dB,但是為了增加阻帶衰減而采用級聯(lián)方式,也會導(dǎo)致一些弊端,為此,這方面的知識總結(jié)如下,具體理論不再解釋了,書上的推導(dǎo)過程比較復(fù)雜,大家還是自己看書為好。
總結(jié):
1、要同時滿足通帶容限跟阻帶容限的誤差的CIC濾波器實現(xiàn)起來比較困難,因為要想阻帶衰減大,就要增大濾波器級數(shù),但是會導(dǎo)致通帶容限增大。
2、如果要實現(xiàn)這樣的濾波器,只有當(dāng)有用信號的頻帶相對于采樣信號的速率很小時才能設(shè)計出符合要求的濾波器,這樣的話通帶衰減較大的情況下也對有用信號影響較小。
3、有用信號的頻帶相對于采樣信號的速率很小也就是意味著信號的采樣率很高,所以,CIC濾波器適合應(yīng)用在多速率信號處理的前端,作為抗混疊濾波器來用,或者是作為后端的抗混疊插值濾波器。
七、多級HogenauerCIC抽取濾波器的FPGA實現(xiàn)
HogenauerCIC抽取濾波器是一種特殊的結(jié)構(gòu),可以用來提高濾波器的運行速度,節(jié)省硬件資源等
前面已經(jīng)說過了,CIC濾波器的系統(tǒng)函數(shù)經(jīng)過變形之后,可以得到一個M階的梳狀濾波器和一個積分器相乘的形式,二者共同組成了抗混疊低通濾波器,在抽取的過程中,一般是信號先經(jīng)過抗混疊低通濾波器進行濾波,來避免頻譜混疊現(xiàn)象的發(fā)生,然后再進行抽取處理,但是我們可以利用Noble恒等式,先對信號進行抽取,再對其進行濾波,即
也就是說,在濾波器階數(shù)跟抽取倍數(shù)相同的情況下,如果先濾波后抽取,那么濾波器的長度是M,但是如果先抽取后濾波,那么濾波器的長度就會降低為1階,因此,采用Noble恒等式,先抽取后濾波,可以降低濾波器長度,從而達到節(jié)省硬件資源的目的。
前面說了,單級的CIC濾波器很難滿足需求,要達到一定的阻帶衰減,就必須通過級聯(lián)的方式
我們可以看到,如果是三級的CICI濾波器級聯(lián)的話,也就是有3個積分器和三個梳狀濾波器,這時候我們可以利用Noble恒等式進行移位變換,讓積分器放在一起,梳狀濾波器放在一起,這時候的梳狀濾波器是M階的,因為此時還沒有經(jīng)過抽取,所以我們可以再利用Noble恒等式,將抽取器放到梳狀濾波器之前,這樣的話,梳狀濾波器就會降為1階,長度為2,從而大大節(jié)省了硬件資源
現(xiàn)在我們假設(shè)抽取倍數(shù)是5,根據(jù)要求,這時我們的濾波器長度也應(yīng)該是5,采用3級CIC濾波器級聯(lián)的方式,用HogenauerCIC抽取濾波器結(jié)構(gòu)在FPGA上設(shè)計
1、三級積分器模塊
altera 的CIC濾波器的IP核手冊中給出了CIC濾波器中間運算數(shù)據(jù)字長的計算公式,這里我們假設(shè)我們的輸入數(shù)據(jù)是經(jīng)過10bit量化過的正弦波數(shù)字信號,那么CIC濾波器的中間運算字長為:
Wi = Win+N*log2(MD)
Win是輸入字長為10,N為濾波器長度5,M為抽取倍數(shù)5,D位級聯(lián)數(shù)3
因此算得CIC濾波器的中間字長為 Wi = 10 +5*log2(5*3) =30
知道了我們中間運算的字長就可以來設(shè)計我們的模塊了,首先是積分器
積分器的設(shè)計比較簡單,就是一個反饋回路,輸出結(jié)果跟輸入相加后延時一個時鐘單元后再與輸入相加
剩下兩級積分器也是一樣,第一級積分器的輸出要送到第二級積分器的輸入,代碼這里不再列出,都是跟第一級積分器類似
2、五倍抽取器
抽取器的實現(xiàn)很簡單,從積分器輸出的數(shù)據(jù),我們每隔5個數(shù)據(jù)抽取一個數(shù)據(jù)就好了
3、三級梳狀濾波器
我們知道,經(jīng)過抽取之后的梳狀濾波器階數(shù)降為1,長度為2的這樣一個FIR濾波器,由于他的頻譜很像一把梳子,因此得名為梳狀濾波器。根據(jù)前面的變形后的公式,我們很容易得出,1階梳狀濾波器的單位脈沖響應(yīng)為hn = 1 , -1,既然有了單位脈沖響應(yīng),我們做的就是一個簡單的卷積運算就好了,而且這里的系數(shù)只有1和-1不需要乘法器,做一下加減法就好了
我們可以看到,跟之前做FIR濾波器一樣,我們先把數(shù)據(jù)送到移位寄存器,因為1階FIR濾波器只有兩個系數(shù),因此只要兩個移位寄存器就夠了。然后我們把系數(shù)跟輸入的數(shù)據(jù)對應(yīng)相乘,因為系數(shù)是1,所以乘法器就省略了,只需要做些加減運算就好了。
經(jīng)過3級梳狀濾波器濾波后的信號就是我們需要的信號了
然后是關(guān)于濾波器輸出信號的數(shù)據(jù)截尾問題,我們可以通過matlab仿真,看一下輸出數(shù)據(jù)的最大數(shù)據(jù)可以用多少位表示來確定輸出數(shù)據(jù)位寬,如果不想做仿真的話,可以根據(jù)altera的CIC濾波器 的IP核手冊中給出了CIC濾波器輸出數(shù)據(jù)位寬計算公式來算:
即 Wo =Win +log2(N^D)
這里我算出來是17,因此,我們將梳狀濾波器的輸出值進行截低17位處理
仿真的過程我是采用 一個1khz和一個40khz的正弦波信號合成的,用采樣頻率為200Khz對其進行采樣,按照我們上面的設(shè)計,濾波器的截止頻率應(yīng)該是
fc= 1/2 * (200 / 5) = 20Khz
所以經(jīng)濾波器濾波后,40Khz的高頻信號將會被濾掉,下面是仿真結(jié)果
接著,我們將FPGA的輸出信號讀到matlab中進行仿真,繪出輸出信號的時域波形
從這張圖我們可以清楚的看到,上面的波形是濾波前的合成信號的波形,下面的是經(jīng)過濾波后的波形,很明顯,濾波前后,信號的頻率沒有發(fā)生改變,發(fā)生改變的是采樣率,可以數(shù)一下,下面波形兩點之間的距離,要比上面的信號寬4倍,也就是5倍抽取,仿真結(jié)果證明,我們的設(shè)計是正確的。
原文標題:CIC濾波器的FPGA實現(xiàn)
文章出處:【微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1630文章
21794瀏覽量
605131 -
matlab
+關(guān)注
關(guān)注
185文章
2980瀏覽量
230800 -
數(shù)字濾波器
+關(guān)注
關(guān)注
4文章
270瀏覽量
47062
原文標題:CIC濾波器的FPGA實現(xiàn)
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論