国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
[博客大賽]零基礎(chǔ)學(xué)FPGA(三十) IIR數(shù)字濾波器的FPGA實(shí)現(xiàn)筆記

      然而暑假已經(jīng)過了快一半,想想也是挺快的,前一段時間學(xué)校安排實(shí)習(xí),在長沙待了一段時間,說是實(shí)習(xí),感覺卻是像是度假,住著酒店,100多號人,想想都覺的熱鬧。實(shí)習(xí)搞得是Java安卓,當(dāng)然我也沒學(xué)到什么,時間太少,一共才上了幾節(jié)課,說白了就是讓我們?nèi)ンw驗(yàn)一下生活~

     身邊的一些大神學(xué)霸們都去參加什么夏令營了,也不乏一些學(xué)霸被保送到名牌學(xué)校,專業(yè)第一就是好啊,朋友圈里也是各種秀,沒辦法啊,誰叫我當(dāng)時沒好好學(xué)呢,還老逃課,所以保研這條路感覺是走不通了,當(dāng)然也無所謂嘛,人各有命,誰說上了研究生就一定混的好呢~哈哈,只能這么來安慰自己了。既然讀不了研究生,那只剩下10月份的找工作了,所以留給我的時間好像也并不是很多了,也就差不多兩個多月的時間了,好好利用剩下的這半個暑假吧,如果有時間,會陸續(xù)更新關(guān)于各種數(shù)字濾波器以及通信原理中各種調(diào)制解調(diào)的FPGA實(shí)現(xiàn)方法的學(xué)習(xí)筆記,當(dāng)然在找工作之前都學(xué)完是不現(xiàn)實(shí)的,但是給自己定個目標(biāo),大四畢業(yè)之前吧,把這些東西盡量都做好筆記分享出來,最后也希望自己能拿到一個比較滿意的offer,路過的網(wǎng)友有什么推薦的公司沒,然而我目前還不怎么了解,有推薦的可以留言,謝謝了~

     這段時間在做的是IIR濾波器,與FIR濾波器最大的不同就是他的單位脈沖響應(yīng)是無限長的以及他的反饋結(jié)構(gòu),正是因?yàn)檫@兩點(diǎn),使得IIR濾波器就不能保證線性相位以及穩(wěn)定性問題。下面是就算是我做的一個IIR的筆記吧,最近也看了不少這方面的資料,算是做一個整理。

     一、關(guān)于IIR數(shù)字濾波器

     當(dāng)然關(guān)于IIR濾波器的知識,想必大家在教材上都已經(jīng)很熟了,這里我就簡單說一下自己的理解好了。

     正如前面說的,IIR數(shù)字濾波器,即無限長單位脈沖響應(yīng)數(shù)字濾波器。所謂無限長單位脈沖響應(yīng),也就是說,對于一個系統(tǒng),我們給其輸其激勵,在輸出端得到的一串序列hn是無限長的,又因?yàn)槲覀冇懻摰亩际且蚬到y(tǒng),即只考慮n大于零的部分,所以,hn可以表示為0<=  hn < 無窮大。

     前面還說了,IIR區(qū)別于FIR濾波器的還一個特點(diǎn)就是他的反饋結(jié)構(gòu),即IIR濾波器的輸出,不僅與輸入激勵有關(guān),還與當(dāng)前的輸出值也有關(guān),用差分方程來表示就是

根據(jù)這個差分方程可以看出:
       1、跟FIR濾波器的差分方程進(jìn)行對比的話會發(fā)現(xiàn),IIR濾波器的差分方程等式右邊的前半部分跟FIR濾波器的差分方程類似,都是對輸入信號進(jìn)行的卷積運(yùn)算,只不過FIR濾波器是將輸入信號與系統(tǒng)的單位脈沖響應(yīng)進(jìn)行卷積,而這里是輸入信號跟IIR濾波器的零點(diǎn)系數(shù)進(jìn)行卷積
        2、后半部分是IIR濾波器的極點(diǎn)部分,也可以看做是一個N階的FIR濾波器,運(yùn)算對象是系統(tǒng)的輸出信號的一部分與極點(diǎn)系數(shù)的一部分。
        3、因此,IIR濾波器的輸出就可以看成是 兩個FIR濾波器的運(yùn)算,即
ao即Y(n)的系數(shù)
      然而IIR濾波器的表示形式還有一種方式,就是我們常說的系統(tǒng)函數(shù),即對差分方程中的輸入輸出進(jìn)行Z變換,并通過移位運(yùn)算得到H(z),而它也就是系統(tǒng)單位脈沖響應(yīng)的Z變換
二、關(guān)于零極圖
      我們知道,系統(tǒng)函數(shù)的分子分母都是一個乘加多項(xiàng)式,既然這樣,分子分母就可以進(jìn)行因式分解,也就是我們書本上的系統(tǒng)的零極點(diǎn)表達(dá)式
     零極圖的作用可不小,既然我們?yōu)V波器的系統(tǒng)函數(shù)完全可以用零極點(diǎn)來表示,也就是說,我們?yōu)V波器的性質(zhì),也可以通過零極圖來分析,比如可以通過零極圖來看系統(tǒng)的單位脈沖響應(yīng)的形狀,系統(tǒng)的因果性與穩(wěn)定性之類的
    1、零極圖與單位脈沖響應(yīng)
      看上面這張圖,現(xiàn)在假如有個IIR數(shù)字濾波器,假設(shè)只有一個極點(diǎn),極點(diǎn)位置的不同會導(dǎo)致濾波器單位脈沖響應(yīng)形狀的不同,總結(jié)如下:
      1、極點(diǎn)在單位圓內(nèi)時,單位脈沖響應(yīng)的形狀呈下降收斂狀,極點(diǎn)在單位圓上時,單位脈沖響應(yīng)的形狀呈直線狀,極點(diǎn)在單位圓外時,單位脈沖響應(yīng)的形狀呈上升發(fā)散狀,且離單位圓越遠(yuǎn),放大倍數(shù)越大
      2、單位脈沖響應(yīng)的形狀主要是由濾波器的極點(diǎn)位置決定,零點(diǎn)位置主要是影響單位脈沖響應(yīng)的幅度特性和相位特性(上圖中雖然沒有畫出零點(diǎn),大家可以通過matlab仿真總結(jié)出這條結(jié)論)
2、零極圖與濾波器的因果性,穩(wěn)定性
     通過教材我們已經(jīng)知道了,我們所研究的都是因果系統(tǒng),而因果系統(tǒng)的收斂域不包括任何一個極點(diǎn)。為什么呢?因?yàn)闃O點(diǎn)是導(dǎo)致系統(tǒng)函數(shù)趨于無窮大的點(diǎn),一旦收斂域包含了極點(diǎn),那就會導(dǎo)致系統(tǒng)函數(shù)不收斂,因此,因果系統(tǒng)的收斂域必須大于離單位圓原點(diǎn)最遠(yuǎn)的那個極點(diǎn),也就是說,只要知道了一個因果系統(tǒng)的極點(diǎn)分布,那么他的收斂域也就已經(jīng)確定了。假如定義一個系統(tǒng)的極點(diǎn)分別為 : 1 ,-2,0.5,-3,那么這個系統(tǒng)的收斂域就是 z > 3.
     關(guān)于穩(wěn)定性問題,我們知道,只有當(dāng)系統(tǒng)函數(shù)的收斂域包含單位圓的時候,單位脈沖響應(yīng)絕對可和,這時候系統(tǒng)才是穩(wěn)定的,又由于之前說的因果性, 系統(tǒng)函數(shù)的收斂域不能包含任何一個極點(diǎn),因此我們知道,只有當(dāng)極點(diǎn)在單位圓內(nèi)的時候才符合要求,因此,極點(diǎn)在單位圓內(nèi)成了系統(tǒng)穩(wěn)定的必要條件。
三、關(guān)于IIR濾波器的設(shè)計方法
        其實(shí),我們書本上介紹的什么脈沖響應(yīng)不變法,雙線性變換法之類的設(shè)計方法,設(shè)計過程都太過于繁瑣,想必大家都深有體會,可能原理不是很難理解,但是真正讓我們?nèi)ナ謩尤ニ阋粋€題,還不知道要算到什么時候。但是matlab為我們提供好了設(shè)計函數(shù),我們甚至不需要知道那些變換方法,也可以設(shè)計出符合要求的濾波器。但是,書本上既然寫了,總有他寫這些東西的目的,可能我們實(shí)在不好理解他的運(yùn)算過程,但是也要大體上知道這回事,畢竟人家是當(dāng)時的科學(xué)巨匠的畢生心血,哪有那么好懂~是吧,我們只要是會用就不錯了,下面就簡單總結(jié)一下這幾種方法:
       IIR數(shù)字濾波器都是經(jīng)過低通模擬濾波器變換而來的,因?yàn)槟M濾波器的理論已經(jīng)很成熟了,而且有大量的數(shù)據(jù)供我們直接使用,比如巴特沃斯濾波器的設(shè)計過程,已經(jīng)給我提供好了求最小濾波器階數(shù)和零極點(diǎn)的公式,只要我們將濾波器指標(biāo)帶進(jìn)去計算就好了。
       至于這些公式怎么來的,說實(shí)話我也看不懂,只知道是一大片數(shù)學(xué)公式推導(dǎo)而來,很多朋友一看到這群數(shù)學(xué)公式肯定就迷糊了,甚至是失去了學(xué)習(xí)的興趣了,太過繁瑣的數(shù)學(xué)公式的推導(dǎo),使得我們的教材變得枯燥無味,我是過來人我深有體會,雖然這樣的教材很嚴(yán)謹(jǐn),但是卻抹殺了學(xué)生的積極性,并沒有取得好的教學(xué)目的,其實(shí)還是感覺那句老話說的對“高手在民間啊”,很多一些不出名的關(guān)于信號處理的書,卻硬是把信號處理這門課寫的生動有趣,讓人一讀便懂,甚至有種豁然開朗的感覺。再反觀我們使用的教材,雖然獲得了什么什么教學(xué)獎,然而感覺并沒有真正站在學(xué)生的角度在寫這本書,學(xué)生看到只是大片的數(shù)學(xué)公式,也就喪失了信心了。
       常用的模擬濾波器設(shè)計模型大概有這幾種,巴特沃斯濾波器,切比雪夫?yàn)V波器、和橢圓濾波器,這幾個濾波器都模擬低通濾波器,要想得到其他類型的濾波器,需要經(jīng)過變換,然而這幾種提供了詳細(xì)的設(shè)計資料,有了這些資料,我們就能通過變換將其變換為我們需要的其他類型的數(shù)字濾波器。
   例如,我想設(shè)計一個IIR帶通濾波器,根據(jù)需要
   1、   我需要先確定濾波器指標(biāo),主要包括通帶最大衰減,阻帶最小衰減,通帶截止頻率,阻帶截止頻率
   2、有了這4個模擬帶通濾波器的指標(biāo),我們可以用頻率變換公式將這4個指標(biāo)轉(zhuǎn)換為相應(yīng)模擬低通濾波器的指標(biāo)。
   3、有了低通濾波器的指標(biāo),就可以根據(jù)經(jīng)典濾波器的資料,設(shè)計成相應(yīng)的模擬低通濾波器。
   4、 對模擬低通濾波器進(jìn)行頻率變換,得到我們想要的模擬帶通濾波器
   5、最后可以通過脈沖響應(yīng)不變法或者雙線性變換法,得到我們需要的數(shù)字帶通濾波器
下面就總結(jié)一下這兩種變換方法
        脈沖響應(yīng)不變法
       上面說了,需要通過脈沖響應(yīng)不變法或者雙線性變換法將模擬帶通濾波器轉(zhuǎn)換為我們需要的數(shù)字帶通濾波器。既然是模擬濾波器,也就是說,是單位脈沖響應(yīng)ht的拉普拉斯變換,如果對模擬濾波器的系統(tǒng)函數(shù)進(jìn)行逆拉普拉斯變換就可以得到ht,有了ht,再通過抽樣不就可以轉(zhuǎn)化為hn了嘛,所以,脈沖響應(yīng)不變法可以總結(jié)如下:
       1、對模擬濾波器的系統(tǒng)函數(shù)進(jìn)行逆拉普拉斯變換得到時域上連續(xù)的系統(tǒng)的單位沖激響應(yīng)ht
       2、對ht進(jìn)行n點(diǎn)等間隔抽樣,得到時域上離散的系統(tǒng)的單位脈沖響應(yīng)hn
       3、對hn進(jìn)行Z變換,得到數(shù)字濾波器的系統(tǒng)函數(shù)H(Z)
       需要注意的是,在對時域上連續(xù)信號進(jìn)行等間隔抽樣的時候,我們知道,時域抽樣等同于頻域的周期延拓,如果不滿足一定的條件,就會導(dǎo)致信號的頻域混疊 ,而這個條件,就是我們采樣定理所給出的,即必須得保證模擬濾波器的帶寬是有限帶寬,并且采樣頻率fs > 2fmax.
      看下面這張圖我來解釋一下
        這里我來解釋一下采樣定理,假如有一個帶限模擬信號,他的時域和頻域波形如圖第一排所示,可以看到在頻域,他的帶寬為2Ωmax,即最大角頻率為Ωmax
        而Ωmax= 2πfmax,這里的fmax是模擬頻率,單位是hz,跟角頻率不同
        現(xiàn)在用一個頻率為fs的信號對原模擬信號在時域進(jìn)行等間隔抽樣,采樣信號在頻域的波形如圖第二排所示,角頻率Ωs = 2πfs,是一個周期為Ωs的周期信號
        圖上第三排是模擬信號經(jīng)采樣后的時域波形與頻域波形,時域波形很直觀,就是由連續(xù)信號變?yōu)榱穗x散信號,頻域波形變成了原模擬信號波形的周期延拓,周期為2π
       大家知道,在數(shù)字頻域,角頻率w = Ω / fs ,所以我們看到在Ωs的正下方對應(yīng)的是2π,數(shù)字頻域0到2π之間對應(yīng)的當(dāng)然就是π,而這里的π對應(yīng)的模擬頻率,當(dāng)然就是fs/2,而數(shù)字頻域的wmax 則對應(yīng) Ωmax / fs ,即 wmax = 2πfmax / fs
       所以,要想保證經(jīng)采樣后的信號的頻譜不發(fā)生頻率混疊,就必須要保證wmax < π
       因此推得 fs > 2fmax
       正是因?yàn)槿绱?,脈沖響應(yīng)不變法只能用來設(shè)計低通和帶通濾波器,不能設(shè)計高通和帶阻濾波器,因?yàn)楹髢烧咴跀?shù)字頻域π處均存在頻譜分量
       雙線性變換法
       雙線性變化法相對于脈沖響應(yīng)不變法適應(yīng)性更強(qiáng),不存在混疊失真的情況,但是計算過程也是相當(dāng)?shù)膹?fù)雜,具體過程其實(shí)書上都有寫,只不過就是太過繁瑣,讓人看得不爽。好在matlab為我們提供了設(shè)計好的函數(shù),matlab工具箱里的函數(shù) butter  ellip cheby1 cheby2 等函數(shù)都是基于雙線性變換法來設(shè)計的函數(shù),可以直接將跳過復(fù)雜的設(shè)計過程,由我們制定的濾波器指標(biāo)直接生成數(shù)字濾波器的零極點(diǎn)系數(shù)。
       既然這樣,我們之前還那么多廢話干什么?直接講matlab設(shè)計不就好了?其實(shí)并不是這樣,知識是一個體系,只有有了前面的知識做鋪墊,才能為以后的設(shè)計打下基礎(chǔ),要不然只會調(diào)用matlab函數(shù),不懂為什么這樣的,到后面就遇到瓶頸了.
      好了,在了解這些理論知識之后我們就可以來設(shè)計我們的濾波器,其實(shí)當(dāng)這些東西都掌握的差不多的時候,你會發(fā)現(xiàn)設(shè)計濾波器并不是很難
     和FIR濾波器一樣,我先把濾波器要求說明一下,然后再按照設(shè)計要求進(jìn)行設(shè)計
四、IIR濾波器的matlab設(shè)計與FPGA實(shí)現(xiàn)
       要求設(shè)計一個IIR低通數(shù)字濾波器,要求::
       1、 設(shè)計成切比雪夫II型濾波器
       2、截止頻率為500hz,阻帶最小衰減為60db,采樣頻率為2000hz,,濾波器階數(shù)為7
       3、合成信號為100,500,800hz的正弦信號的疊加
       4、要求分別采用直接II型結(jié)構(gòu)和級聯(lián)型結(jié)構(gòu)分別在FPGA上實(shí)現(xiàn),并通過modelsim仿真出濾波后的100HZ正弦波
       5、級聯(lián)結(jié)構(gòu)為了提高運(yùn)行速度采用流水線結(jié)構(gòu)設(shè)計
       6、通過matlab對modelsim輸出的數(shù)據(jù)進(jìn)行仿真,看是否符合要求
       前面說過了,matlab為我們提供了IIR濾波器設(shè)計的工具箱,我們可以直接調(diào)用函數(shù),就可以直接由濾波器指標(biāo)設(shè)計成數(shù)字濾波器
如上圖所示,我們直接調(diào)用cheby2型函數(shù),送人濾波器設(shè)計指標(biāo),直接就可以設(shè)計出符合要求的濾波器,可以說,就這么幾行代碼,一個濾波器就設(shè)計完成了。但是,我們不僅要設(shè)計出濾波器,還要實(shí)現(xiàn)它,并且是FPGA硬件實(shí)現(xiàn),光有這些數(shù)據(jù)是不行的,上面設(shè)計的濾波器輸出如下
        可以看到,這些數(shù)據(jù)是無法在FPGA上實(shí)現(xiàn)的,我們需要將他們量化,具體進(jìn)行多少bit的量化才可以設(shè)計出符合要求的濾波器,需要通過matlab仿真才知道。當(dāng)然,由上面的系數(shù)構(gòu)成的濾波器是理想濾波器,當(dāng)然他們的位數(shù)不僅僅是這幾位,是因?yàn)閙atlab顯示的原因,后面還有很多位數(shù)沒有顯示出來,要知道,我們是要將這些數(shù)據(jù)送到FPGA內(nèi)部的寄存器中進(jìn)行運(yùn)算的,不可能將所有位數(shù)都表示完整,只能表示個近似值,這就導(dǎo)致了有限字長效應(yīng),使得實(shí)際濾波器與理想濾波器還是有些差別的,因此,我們需要將這些系數(shù)進(jìn)行量化,將量化后的濾波器系數(shù)求出幅頻響應(yīng),與理想濾波器的幅頻響應(yīng)進(jìn)行對比,來確定量化位數(shù)
         上圖就是通過仿真來確定濾波器的量化位數(shù),函數(shù)QuantIIRDirectArith是用來計算實(shí)際情況下濾波器的單位脈沖響應(yīng)的,是人為編寫的函數(shù),其中的算法我們可以不去深究,只知道輸入量化后的濾波器系數(shù)和需要濾波器輸出的位數(shù),就可以計算出實(shí)際濾波器的輸出情況,與理想濾波器進(jìn)行對比,從而確定量化位數(shù),這里仿真出來,當(dāng)量化位數(shù)為16的時候,波形就幾乎與理想情況吻合
        對于系數(shù)的量化問題,這里也不能像FIR濾波器一樣直接進(jìn)行量化了,因?yàn)镮IR濾波器不僅存在乘加運(yùn)算,還存在除法運(yùn)算。前面說了,IIR濾波器的輸出,可以看做是兩個FIR濾波器相減之后再除以系數(shù)a(0),這里的系數(shù)a(0) 就是極點(diǎn)系數(shù)的第一項(xiàng),既然要除以這個系數(shù),只要保證這個系數(shù)是2的整數(shù)次冪,就可以通過向右移位的方式來進(jìn)行相除。例如,經(jīng)過處理和量化之后,極點(diǎn)系數(shù)的第一項(xiàng)為1024,那么就相當(dāng)于把兩個FIR濾波器的運(yùn)算結(jié)果右移10位就好了
這也可以算是一種算法了,大家可以帶一個數(shù)進(jìn)去試試,就知道這種算法的原理了,經(jīng)過這種方式的量化后,我們得到的濾波器系數(shù)就變?yōu)?/div>
 從這量化后的系數(shù)我們可以看出,零點(diǎn)部分完全就是一個FIR濾波器,極點(diǎn)部分還不太像,因?yàn)橄禂?shù)不對稱,這樣的話,我們有了濾波器的零極點(diǎn)系數(shù),剩下的就是FPGA實(shí)現(xiàn)了。
     對于FPGA的實(shí)現(xiàn)過程,零點(diǎn)部分完全和FIR濾波器的運(yùn)算過程相同,就是將輸入信號存入寄存器之后,對輸入信號進(jìn)行對稱系數(shù)累加,再分別與濾波器的零點(diǎn)系數(shù)進(jìn)行相乘,最后將結(jié)果相加輸出濾波器極點(diǎn)部分zero(n)
     極點(diǎn)部分跟零點(diǎn)部分類似,只有一點(diǎn)稍微需要注意,由于IIR濾波器存在反饋結(jié)構(gòu),濾波器的輸出也是極點(diǎn)部分的輸入。極點(diǎn)部分的累加相乘跟零點(diǎn)部分稍有不同,首先,極點(diǎn)部分不存在對稱結(jié)構(gòu),因此不需要將輸入信號進(jìn)行對稱相加,只需要直接與極點(diǎn)系數(shù)相乘。還有就是,極點(diǎn)系數(shù)的第一項(xiàng)不參與相乘,因?yàn)樗禽敵鯵(n) 的系數(shù),從第二項(xiàng)開始才進(jìn)行乘加運(yùn)算,例如pole_coe(1)*y(n-1) , pole_coe(2)*y(n-2)........
     前面說過,零點(diǎn)部分與極點(diǎn)部分進(jìn)行減法運(yùn)算,結(jié)果再除以Y(n)的系數(shù)之后,就是IIR濾波器的輸出
      在用FPGA實(shí)現(xiàn)IIR濾波器的時候要注意這幾點(diǎn),我總結(jié)如下
     1 、 首先要注意,不管是存儲數(shù)據(jù)的寄存器型變量還是線型變量都不要忘記定義成有符號型數(shù)據(jù)
     2、 要注意字長問題,兩個N位數(shù)據(jù)相加,至少需要N+1位寄存器存儲結(jié)果才能保證結(jié)果不溢出,兩個N位數(shù)據(jù)相乘,至少需要2N位寄存去存儲,大部分情況下,2N-1位就可以了
     3、最后的截尾處理,如果不能夠保證截取的位數(shù)能夠?qū)⑤敵龅臄?shù)據(jù)完整表示,可以考慮放棄精度,舍棄低位取高位。例如上面,假如我截取sum_div的0到15位不能夠表示IIR濾波器的輸出,也就是說有些IIR濾波器輸出的數(shù)據(jù)要大于2^15,因此,截尾的時候可以考慮截取1到16位作為結(jié)果,這樣做話相當(dāng)于降低了量化位數(shù),精度降低了,但可以保證輸出正確幅度的波形
下面是將疊加信號進(jìn)行濾波后的輸出情況
  
五、級聯(lián)結(jié)構(gòu)的IIR濾波器的FPGA實(shí)現(xiàn)
        其實(shí)在實(shí)際應(yīng)用中,應(yīng)用最廣泛的還是級聯(lián)型結(jié)構(gòu),因?yàn)檫@種結(jié)構(gòu)的系統(tǒng)函數(shù)除了一個系數(shù)之外完全是由零極點(diǎn)構(gòu)成,而且占用資源少,速度快。
        級聯(lián)結(jié)構(gòu)說白了就是幾個直接型結(jié)構(gòu)的IIR濾波器相乘罷了,有了直接型結(jié)構(gòu)的基礎(chǔ),再來設(shè)計級聯(lián)結(jié)構(gòu)就很簡單了。
        設(shè)計級聯(lián)結(jié)構(gòu)的關(guān)鍵一步就是如何將直接結(jié)構(gòu)的濾波器系數(shù)轉(zhuǎn)換為級聯(lián)結(jié)構(gòu)的系數(shù),其實(shí)這也是一個算法問題,說實(shí)話這個算法我也沒看明白,就是通過一系列的數(shù)學(xué)運(yùn)算,將直接型結(jié)構(gòu)轉(zhuǎn)化為了級聯(lián)結(jié)構(gòu)的系數(shù)
     可以看到,我們設(shè)計好直接型結(jié)構(gòu)濾波器之后,直接調(diào)用轉(zhuǎn)換函數(shù),就可以得到級聯(lián)結(jié)構(gòu)的濾波器系數(shù),其中b0為增益系數(shù),就是放在零點(diǎn)部分外面的那個系數(shù)。轉(zhuǎn)換函數(shù)是人為寫的,我也不太懂為什么是這樣轉(zhuǎn)換的,既然別人已經(jīng)做好了這種算法,我們實(shí)在看不懂的話就直接拿來用好了
     函數(shù)Qcoe是量化函數(shù),就是前面講過的,要將極點(diǎn)系數(shù)量化為2的整數(shù)次冪的量化函數(shù)。
     經(jīng)過這樣的處理之后,就會得到了四個直接型結(jié)構(gòu)的IIR濾波器,每階IIR濾波器的計算方法都跟前面直接型濾波器的計算方法相同,這里不做解釋。
     級聯(lián)型結(jié)構(gòu)在進(jìn)行FPGA實(shí)現(xiàn)的時候要注意每一階濾波器的輸出數(shù)據(jù)的位寬,即通過matlab仿真出每級濾波器輸出數(shù)據(jù)的最大值,算一下用多少位的寄存器才能表示這個數(shù)值,下面是合成信號依次通過各級濾波器,并計算每通過一級濾波器后的輸出位寬
     
     合成信號每通過一級濾波器,就相當(dāng)于對信號進(jìn)行了一次濾波,通過仿真可以看到,每通過一級濾波器,輸出的信號更加趨于圓滑
       級聯(lián)結(jié)構(gòu)的FPGA實(shí)現(xiàn)過程是比較費(fèi)勁的,因?yàn)橐O(shè)計多級濾波器,雖熱每級濾波器的代碼都是直接型濾波器,但其中的零極點(diǎn)系數(shù)的運(yùn)算還是需要我們自己修改,而且還有仿真好每級濾波器的輸出是否正常。但是沒辦法,因?yàn)镮IR濾波器幾乎沒有IP核可以調(diào)用,我們也只能手寫了
      在進(jìn)行零極點(diǎn)系數(shù)乘積運(yùn)算的過程中,我們一方面可以調(diào)用乘法器來進(jìn)行運(yùn)算,另一方面可以利用移位的方式進(jìn)行乘法運(yùn)算
      
       例如上圖,474可以分解成幾個2的整數(shù)次冪的形式的累加形式,因此,可以通過移位的方式實(shí)現(xiàn)乘法運(yùn)算
       采用級聯(lián)方式實(shí)現(xiàn)FPGA的過程要注意的是每級濾波器的輸出位數(shù),保證每級濾波器的輸出數(shù)據(jù)沒有溢出,其他地方都跟直接型類似
      至于采用流水線結(jié)構(gòu)實(shí)現(xiàn)級聯(lián)結(jié)構(gòu),就是在每級濾波器的輸出部分加一個寄存器,每來一個時鐘將數(shù)據(jù)輸出,這一點(diǎn)很簡單了,想必能看到這里的朋友對FPGA這點(diǎn)技巧還是很了解的。
     下面是modelsim仿真輸出的各級濾波器的波形,與matlab仿真結(jié)果相比幾乎相同,證明我們的結(jié)果是正確的
    
    最后想問大家一個問題,用同樣的方法,為什么我設(shè)計不成高通濾波器呢,也是通過matlab生成,用的低通的源代碼,只是將濾波器系數(shù)改一下,采用直接型結(jié)構(gòu),仿真出的波形一直不對,該注意的地方也都注意了,畢竟matlab函數(shù)工具箱采用的是雙線性變化法寫的,應(yīng)該可以設(shè)計成各種濾波器,但是就是調(diào)不出來,網(wǎng)上關(guān)于IIR高通濾波器的FPGA實(shí)現(xiàn)也幾乎沒有,發(fā)郵件給老師,老師也沒理我,希望各位大神給點(diǎn)意見吧。
    由于源碼文件較大,博客上傳不上,想要源碼的朋友請回復(fù)郵箱,或者加小墨QQ
    今天就到這里好了,謝謝大家支持!

    

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服