最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

2.15 插值濾波器設(shè)計-明德?lián)P至簡設(shè)計法原理與應(yīng)用

2022-12-31 07:21 作者:明德?lián)P易老師  | 我要投稿

本文的文檔編號:002700000026

需要看對應(yīng)的視頻,請點擊視頻編號:000600000419


1、本文檔講述FPGA產(chǎn)生兩路正弦波數(shù)據(jù),一路直接由DA輸出,一路經(jīng)過CIC處理之后輸出,然后傳到示波器進(jìn)行觀察,從而了解CIC濾波器的效果
2、801開發(fā)板使用

1項目背景

1.1多采樣率數(shù)字濾波器?

?多采樣率就是有多個采樣率的意思。前面所說的FIR,IIR濾波器都是只有一個采樣頻率,是固定不變的采樣率,然而有些情況下需要不同采樣頻率下的信號。 按照傳統(tǒng)的速率轉(zhuǎn)換理論,我們要實現(xiàn)采樣速率的轉(zhuǎn)換,可以這樣做,假如有一個有用的正弦波模擬信號,AD采樣速率是f1,現(xiàn)在我需要用到的是采樣頻率是f2的信號,傳統(tǒng)做法是將這個經(jīng)過f1采樣后的信號進(jìn)行DA轉(zhuǎn)換,再將轉(zhuǎn)換后的模擬信號進(jìn)行以f2采樣頻率的抽樣,得到采樣率為f2的數(shù)字信號,至此完成采樣頻率的轉(zhuǎn)換 但是這樣的做法不僅麻煩,而且處理不好的話會使信號受到損傷,所以這種思想就被淘汰了,現(xiàn)在我們用到的采樣率轉(zhuǎn)換的方法就是抽取與內(nèi)插的思想。

1.2抽取

? ? ? ?先來總體來解釋一下抽取的含義:前面不是說,一個有用的正弦波模擬信號經(jīng)采樣頻率為f1的抽樣信號抽樣后得到了數(shù)字信號,很明顯這個數(shù)字信號序列是在f1頻率下得到的,現(xiàn)在,假如我隔幾個點抽取一個信號,比如就是5吧,我隔5個點抽取一個信號,是不是就是相當(dāng)于我采用了1/5倍f1的采樣頻率對模擬信號進(jìn)行采樣了?所以,抽取的過程就是降低抽樣率的過程,但是我們知道,這是在時域的抽樣,時域的抽樣等于信號在頻域波形的周期延拓,周期就是采樣頻率,所以,為了避免在頻域發(fā)生頻譜混疊,抽樣定理也是我們要考慮的因素。

下面來具體來介紹

圖561

? ? ? 如上圖所示,假如上面就是某一有用信號經(jīng)采樣頻率f1抽樣得到的頻譜,假設(shè)這時候的采樣頻率為8Khz,可以通過數(shù)格子得到,從0到F1處有8個空格,每個空格代表1Khz,有些朋友可能會問,這不是在數(shù)字頻域嗎,單位不是π嗎,哪來的hz?是的,這里是數(shù)字頻域,采樣頻率F1處對應(yīng)的是2π,這里只是為了好解釋,我們用模擬頻率來對應(yīng)數(shù)字頻率。

圖562

上面是采樣頻率為8K的數(shù)字信號頻域圖,現(xiàn)在我要對這個數(shù)字信號進(jìn)行時域抽取,從而來降低信號的采樣率,我們知道,一旦我們對數(shù)字信號進(jìn)行時域抽取,那么采樣率下降,而采樣率就是數(shù)字信號頻域的波形周期,那么也就是周期下降,所以,我們對信號進(jìn)行抽取要有個度,要在滿足抽樣定理的條件下對信號進(jìn)行抽取,否則就會發(fā)生頻譜混疊。

上圖就是對信號進(jìn)行了1/5倍的F1采樣頻率抽取,可見,由于發(fā)生了頻譜混疊現(xiàn)象,因為1/5倍的F1是1600hz,而信號的頻帶是1000hz,不滿足抽樣定理,導(dǎo)致發(fā)生了頻譜混疊,所以,為了避免發(fā)生這種情況,除了要滿足抽樣定理之外,即抽樣倍數(shù)不能太高,我們還需要把信號的頻帶設(shè)置在F1/2以下,才能確保信號不發(fā)生頻譜混疊,因此,我們需要在抽取之前加一個低通濾波器,書上叫做抗混疊低通濾波器,用來限制信號的頻帶,然后再進(jìn)行抽取,這樣的話我們來算一下

低通濾波器的截止頻率就是1/2倍的經(jīng)抽取后的采樣速率,即fc = 1/2 *(F1/M) ,M是抽取倍數(shù)。而1/2*F1對應(yīng)的數(shù)域頻率是π,因此我們得出,

抗混疊低通濾波器的截止頻率是π/M


1.3內(nèi)插

抽取的過程是降低采樣率的過程,那么插值的過程當(dāng)然就是提高采樣率的過程。大體的思路可以這么理解,我們將經(jīng)f1抽樣下得到的數(shù)字信號的每兩個點之間進(jìn)行插值,插入的值是0,插值之后,信號在單位時間內(nèi)的采樣點數(shù)增多,當(dāng)然也就是采樣速率的提升,采樣速率提升后我們知道,那么信號的頻譜的周期就會增加

圖563

需要注意的一點就是,插值前后,我們只是在時域信號中間插入了D-1個零值,僅僅是改變了采樣率,并沒有改變信號的信息,因此,在頻域,信號頻譜的形狀是不會改變的,改變的僅僅是周期,如上圖,F(xiàn)1是插值之前信號的周期,插值之后,信號頻譜的形狀不變,周期成了F1*D,D是插值倍數(shù)。如果我們直接用F1*D倍的采樣率采信號,得到的頻譜會發(fā)現(xiàn),就不會有中間兩個波形,因此,這兩個波形是多余的,書上叫做是鏡像頻譜。既然是多余的,我們就可以將它用一個低通濾波器濾掉,這樣的低通濾波器,就叫做鏡像低通濾波器。這樣我們來計算一下鏡像低通濾波器的截止頻率

圖564

根據(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


2設(shè)計目標(biāo)

本次案例將使用到采樣率大于100M的雙通道的示波器。將示波器的兩個通道,分別與FPGA的DA通道1和DA通道2相連,觀察兩路DA的輸出。其連接示意如下圖所示。

圖565

本案例是FPGA內(nèi)部產(chǎn)生正弦信號,這個正弦信號一路輸出給DA通道A,另一路經(jīng)過插值濾波器后,輸出給DA通道B。

圖566

正弦信號產(chǎn)生電路產(chǎn)生頻率為62.5KHz的正弦信號,該正弦信號由8個點組成。

插值濾波器是4倍的插值,也就是說進(jìn)來是8個點的正弦波,輸出將是32個的正弦波。

仿真效果,上面的波形為插值前,下面的為插值后可以明顯看出下面的波形更為圓滑。

圖567

下面是示波器的顯示效果

圖568

上面黃色是通道1輸出的信號,下面藍(lán)色是通道2的輸出信號。

上板效果圖如下圖所示。


3設(shè)計實現(xiàn)

3.1頂層信號

新建目錄:D:mdy_bookcic_prj。在該目錄中,新建一個名為cic_prj.v的文件,并用GVIM打開,開始編寫代碼。

我們要實現(xiàn)的功能,概括起來就是FPGA產(chǎn)生控制AD9709,讓其中的通道A未濾波的正弦信號,讓通道B輸出濾波后的正弦信號。為了控制AD9709的工作模式,就要控制AD9709的MODE、SLEEP管腳;為了控制通道A,就需要控制AD9729的CLK1、WRT1、DB7~0P1管腳;為了控制通道B,就需要控制AD9729的CLK2、WRT2、DB7~0P2管腳。根據(jù)設(shè)計目標(biāo)的要求,整個工程需要以下信號:

1.使用clk連接到晶振,表示50M時鐘的輸入。

2.使用rst_n連接到按鍵,表示復(fù)位信號。

3.使用dac_mode信號連接到AD9709的MODE管腳,用來控制其工作模式。

4.使用dac_sleep信號連接到AD9709的SLEEP管腳,用來控制其睡眠模式。

5.使用dac_clka信號連接到AD9709的CLK1管腳,用來控制通道A的時鐘。

6.使用dac_wra信號連接到AD9709的WRT1管腳,用來控制通道A的寫使能。

7.使用8位信號dac_da連接到AD9709的DB7~0P1管腳,用來控制通道A的寫數(shù)據(jù)。

8.使用dac_clkb號連接到AD9709的CLK2腳,用來控制通道B時鐘。

9.使用dac_wrb號連接到AD9709的WRT2腳,用來控制通道B使能。

10.使用8位信號dac_db接到AD9709的DB7~0P2腳,用來控制通道B寫數(shù)據(jù)。

綜上所述,我們這個工程需要10個信號,時鐘clk,復(fù)位rst_n,dac_mode、dac_sleep、dac_clka、dac_wra、dac_da、dac_clkb、dac_wrb和dac_db信號,其中dac_da和dac_db是8位信號,其他都是1位信號。下面表格表示了硬件電路圖的連接關(guān)系。

將module的名稱定義為cic_prj,代碼如下:

其中clk、rst_n是1位的輸入信號,dac_da和dac_db是8位的輸出信號,dac_mode,dac_clka,dac_wra,dac_sleep,dac_clkb,dac_wrb是一位輸出信號。


3.2正弦信號設(shè)計

假設(shè)產(chǎn)生的正弦信號命名為sin_data信號。sin_data一共有8個值,是從一個正弦信號中,按(2*pi/8)的間隔采樣到的,可列出下表。

很自然地定義一個7位的選擇信號addr。我們只要控制好addr,就能方便得到sin_data。因此可以寫出下面代碼。

接下來是設(shè)計信號addr。

addr是用來控制選擇數(shù)據(jù)的地址,通過控制addr的增加值,就能產(chǎn)生所需要的正弦波。

本案例要求產(chǎn)生62.5KHz的正弦信號。該正弦信號的周期是16000ns。本工程的工作時鐘是20ns,也就是16000/20 = 800個時鐘輸出一個正弦信號,也就是800個時鐘將上表的8個值輸出一遍,即每100個時鐘輸出addr加1。

每100個時鐘輸出一個值,那意味著我們需要一個計數(shù)器cnt0,該計數(shù)器用來對這100進(jìn)行計數(shù)。計數(shù)器的加1條件是“1”,結(jié)束條件是“數(shù)到100個”。因此可寫出cnt0的代碼。

每100個時鐘后,addr就加1。說明這個addr也是一個計數(shù)器,該計數(shù)器的加1條件是“數(shù)到100個時鐘”,即end_cnt0,結(jié)束條件是“數(shù)到8個”。


3.3CIC濾波器設(shè)計

3.3.1新建FPGA工程

圖569

1.打開quartus,點擊File在File菜單中選擇New Project Wizard....。

圖570

2.彈出Introduction界面選擇Next。

圖571

3.設(shè)置工程目錄,工程名,頂層模塊名

工程目錄設(shè)置為:D:mdy_bookcic_prj

工程名:cic_prj

頂層模塊名:cic_prj

填寫完畢后,點擊next之后進(jìn)入下一界面。

圖572

4.工程類型界面,Project Type選擇Empty project,選擇空白工程。點Next進(jìn)入下一個界面。

圖573

5.在文件添加界面,不選擇任何文件。點擊Next,進(jìn)入下一個界面。

圖574

6.器件選擇界面。在Device family這一項之中選擇Cyclone IV E;在下部的Available device選擇EP4CE6F23C8。完成后直接點擊Finish。


3.3.2FPGA生成CIC IP核

圖575

建立工程后,在quartus中IP catalog這一界面中選擇DSP下一目錄中選擇Filter再選擇CIC。

圖576

點擊后進(jìn)入此界面給新生成的fir濾波器ip核選擇如下路徑:D:mdy_bookcic_prj,entity name填寫:my_cic。點擊OK后,進(jìn)入FIR濾波器設(shè)置界面。

圖577

按如下設(shè)置:

Filter Type:要選擇Interpolator,表示是插值濾波器。

Rate change factor:填上4,表示是4倍插值。

output Rounding Method:選擇Truncation,表示輸出的結(jié)果要截斷。

Output data width:選擇8。表示輸出結(jié)果要截斷為8位。

其他選項默認(rèn),點擊窗口右下角的Generate Hdl,會彈出下面的窗口。

圖578

注意選擇文件是Verilog文件,其他都不用勾選。點擊Generate,就會生成y_cic的verilog文件。

圖579

出現(xiàn)上面的提示,就是生成成功了。

點Finish關(guān)閉CIC濾波器生成窗口。

圖580

如果出現(xiàn)上面的提示,就是表示要手動將剛才生成的IP核加到本工程。

圖581

在Project菜單中選擇Add/Remove File to Project,彈出文件窗口。

圖582

點擊右上角的

,在彈出來的窗口中,雙擊選擇D:mdy_bookcic_prjmy_cicsynthesis目錄下的my_cic.qip文件(注意不要搞錯文件類型)。然后記得要點Add,才算正式加到工程。

圖583

點OK關(guān)閉本窗口。

IP核生成后彈出此對話框點擊yes將此IP核添加進(jìn)工程。


3.3.3例化CIC IP核

用GVIM打開D:mdy_bookcic_prjmy_cicsynthesismy_cic.v文件,該文件就是生成的CIC IP核文件。

圖584

my_fir模塊的各個信號的描述見下表。


特別注意的是,濾波器的輸入數(shù)據(jù)和輸出數(shù)據(jù)都是有符號數(shù)(補碼的形式,-128~127)。而我們知道,正弦信sin_data是無符號數(shù)(0~255)。所以要將sin_data變成有符號數(shù),再送給FIR進(jìn)行濾波。假設(shè)轉(zhuǎn)換后的信號為cic_din,該信號位寬為8位。


無符號數(shù)轉(zhuǎn)成有符號數(shù)的方法很簡單:cic_din = sin_data - 128。讀者有興趣可以驗證一下。

生成CIC IP核后,我們要對其進(jìn)行例化,才行使用上這個IP核,例化名起名u_my_cic,cic的輸出數(shù)據(jù)信號命名為cic_dout。

我們要控制CIC IP核的輸出,使每個數(shù)據(jù)都能等間隔輸出數(shù)據(jù)。由于CIC濾波器的輸入是100個時鐘一個數(shù)據(jù),CIC是4倍速率,因此輸出是25個時鐘一個數(shù)據(jù)。所以我們每25個時鐘給一個有效信號連到out_ready接口上。這時需要一個計數(shù)器cnt1來計時25個時鐘,該計數(shù)器加1條件是“1”,結(jié)束條件是“數(shù)到25個”。

有了這些信號后,就可以例化CIC IP核了。


3.4DA接口信號設(shè)計

接下來是設(shè)計信號dac_da。dac_da是直接輸出正弦信號,但由于DA的輸出電壓與dac_da是成反比例線性關(guān)系,所以dac_da都是按(255-sin_data)得到。那么可以寫出dac_da的代碼。

接下來是設(shè)計信號dac_sleep,AD是一直工作的,所以要讓dac_sleep一直為0。

dac_clka為了滿足tS的時間要求,可以讓dac_clka = ~clk。

dac_wra可以與dac_clka相同。

接下來是設(shè)計信號dac_db。dac_db是直接輸出濾波后的信號cic_dout。但要注意的是cic_dout是有符號數(shù)(范圍是-128~127),所以要轉(zhuǎn)有無符號數(shù)(0~255)。假設(shè)轉(zhuǎn)換后的信號為cic_dout2,則cic_dout2 = cic_dout + 128。另外,由于DA的通道2的輸出電壓與dac_db是成反比例線性關(guān)系,所以dac_db都是按(255-cic_dout2)得到。那么可以寫出dac_db的代碼。

dac_clkb為了滿足tS的時間要求,可以讓dac_clkb = ~clk。

dac_wrb可以與dac_clkb相同。


3.5信號定義

至此,模塊主體已經(jīng)完成。接下來是將module補充完整。

cnt0是用always產(chǎn)生的信號,因此類型為reg。cnt0計數(shù)的最大值為99,需要用7根線表示,即位寬是7位。add_cnt0和end_cnt0都是用assign方式設(shè)計的,因此類型為wire。并且其值是0或者1,1個線表示即可。因此代碼如下:

cnt1是用always產(chǎn)生的信號,因此類型為reg。cnt1計數(shù)的最大值為24,需要用5根線表示,即位寬是5位。add_cnt1和end_cnt1都是用assign方式設(shè)計的,因此類型為wire。并且其值是0或者1,1根線表示即可。因此代碼如下:

addr是用assign設(shè)計的,因此類型為wire。其值最大為7,一共有3根線,位寬為3;add_addr和end_addr都是用assign方式設(shè)計的,因此類型為wire。并且其值是0或者1,1根線表示即可。故而代碼如下

sin_data是用always設(shè)計的,因此類型為reg。其最大值為255,要有8根線表示,位寬為8,故而代碼如下

cic_din是用assign設(shè)計的,因此類型為wire。其位寬為8,故而代碼如下

cic_dout是例化模塊的輸出,非always設(shè)計的,因此類型為wire。其位寬為8,故而代碼如下

cic_dout2是用assign設(shè)計的,非always設(shè)計的,因此類型為wire。其位寬為8,故而代碼如下

dac_da是用always設(shè)計的,因此類型為reg。其位寬為8;dac_sleep是用assign設(shè)計的,因此類型為wire,位寬為1;dac_wra是用assign設(shè)計的,因此類型為wire,位寬為1;dac_clka是用assign設(shè)計的,因此類型為wire,位寬為1;dac_mode是用assign設(shè)計的,因此類型為wire,位寬為1。故而代碼如下

dac_db是用always設(shè)計的,因此類型為reg。其位寬為8;dac_wrb是用assign設(shè)計的,因此類型為wire,位寬為1;dac_clkb是用assign設(shè)計的,因此類型為wire,位寬為1。故而代碼如下。

在代碼的最后一行寫下endmodule

至此,整個代碼的設(shè)計工作已經(jīng)完成。下一步是新建工程和上板查看現(xiàn)象。


4綜合與上板

4.1添加文件到工程

圖585

1.前面已經(jīng)介紹了新建工程。現(xiàn)在打開quartus,在Project菜單中選擇Add/Remove File to Project,彈出文件窗口。

圖586

點擊右上角的

,在彈出來的窗口中,雙擊選擇D:mdy_bookcic_prj目錄下的cic_prj.v文件。然后記得要點Add,才算正式加到工程。

圖587

點OK關(guān)閉本窗口。


4.2綜合

圖588

在菜單欄中,選中Processing,然后選擇Start Compilation,開始對整個工程進(jìn)行編譯和綜合。

圖589

出現(xiàn)上面的界面,就說明編譯綜合成功。


4.3配置管腳

圖590

在菜單欄中,選中Assignments,然后選擇Pin Planner,就會彈出配置管腳的窗口。

圖591

在配置窗口中的location一列,可以填寫每個管腳所對應(yīng)的FPGA管腳號。

按上面配置好每個信號的管腳,其最終效果如下圖。

圖592

關(guān)閉Pin Planner,軟件自動會保存管腳配置信息。


4.4再次綜合

圖593

在菜單欄中,選中Processing,然后選擇Start Compilation,開始對整個工程進(jìn)行編譯和綜合。

圖594

出現(xiàn)上面的界面,就說明編譯綜合成功。


4.5連接開發(fā)板

圖595

連接示意如上圖所示。將電源接上開發(fā)板;USB BLASTER一端連接到JTAG插口,另一端連到PC的USB接口;將開發(fā)板上的P7接口和P11與示波器的兩個通道相連。最后再將電源打開。


4.6上板

圖596

在quartus的Task窗口中,右鍵Program Device選擇Open進(jìn)入燒錄界面。

圖597

在上面的界面中,默認(rèn)會選中文件output/cic_prj.sof,

在上面的界面中,Hardware Setup的旁邊會顯示:USB-Blaster。

圖598

點擊statr,在progress這一條顯示100%即表示成功,此時可以看FPGA輸出效果了。


2.15 插值濾波器設(shè)計-明德?lián)P至簡設(shè)計法原理與應(yīng)用的評論 (共 條)

分享到微博請遵守國家法律
无为县| 河池市| 吉木乃县| 三亚市| 黔西县| 从化市| 侯马市| 公主岭市| 肃南| 建始县| 辰溪县| 台前县| 赣州市| 东方市| 安吉县| 高要市| 台东市| 建湖县| 宁化县| 嫩江县| 伊金霍洛旗| 衡阳县| 景东| 巴青县| 辉南县| 固镇县| 通许县| 疏附县| 南充市| 夏河县| 麻城市| 陕西省| 剑河县| 九江市| 灵石县| 张家港市| 当涂县| 中宁县| 淄博市| 玛纳斯县| 平阴县|