MAAB設計FPGA實現(xiàn)聯(lián)合ISE和Modelsim仿真的FIR濾波器設計_第1頁
MAAB設計FPGA實現(xiàn)聯(lián)合ISE和Modelsim仿真的FIR濾波器設計_第2頁
MAAB設計FPGA實現(xiàn)聯(lián)合ISE和Modelsim仿真的FIR濾波器設計_第3頁
MAAB設計FPGA實現(xiàn)聯(lián)合ISE和Modelsim仿真的FIR濾波器設計_第4頁
MAAB設計FPGA實現(xiàn)聯(lián)合ISE和Modelsim仿真的FIR濾波器設計_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、MATLAB設計,F(xiàn)PGA實現(xiàn),聯(lián)合ISE和Modelsim仿真的FIR濾波器設計摘要:本文首先利用 MATLAB產(chǎn)生兩個頻率不一樣的正弦信號,并將這兩個正弦信號相加,得到一個混疊的波形;然后利用 MATLAB設計一個FIR低通濾波器,并由 Verilog實現(xiàn),聯(lián)合ISE和Modelsim仿真,實現(xiàn)濾除頻率較高的信號,并將濾波后的數(shù)據(jù)送到MATLAB中分析。本文首先介紹FIR濾波器的基本原理,然后從目前最流行的的設計方式入手,逐步介紹FIR濾波器的設計,其流程圖如圖1所示:圖1FIR濾波器的基本原理:數(shù)字濾波器是從分析信號中提取用戶需要的信息,濾去不需要的信號成分或者干擾成分。數(shù)字濾波器的數(shù)學

2、模型:線性時不變數(shù)字濾波器的數(shù)學模型在時域中可以用線性常系數(shù)差分方程給出:yndkgyn k 1MkPqgxn qq 0其等效的Z變換為:H(z)PqgZqq 0N dkgz kk 1當dk全為0時,Z域系統(tǒng)函數(shù)只有零點,數(shù)字濾波器的單位脈沖響應有限,通常這用濾波器被稱為有限沖激響應( FIR濾波器。它的輸出只與當前的輸入和過去的輸 入有關,跟過去白輸出無關。 FIR濾波器的一個重要特性是具有線性相位,即系統(tǒng)的相 異和頻率成正比,可達到無失真?zhèn)鬏?。F1H油波器憶以用方框圖的形式方便地善承.用方框圖法表示有以下幾個好處:可通上 初察法容易地寫用算法,通過調賽桁落得到不同算法的等效框圖L可以容耕地

3、確定硬件的需 求:此外,還可以從傳輸函數(shù)所生成的框圖直接得到多種等效表示其直接形式的方框圖如圖G3所示.X*)圖63 直接形式的F出濾波制利用轉置定理,可以將直接型轉化為其等效的轉置式F1R濾波器,其結構如圖&4表示, 轉置FTR的優(yōu)點在于不需要紿豆切提供額外的移位寄存器,而旦也沒有必要為達到高速處理 給索枳的加法瑞添加酬外的流水線“圖I轉置式的FIR就板器更加詳細的介紹FIR濾波器的理論算法知識,請參考別的先關書籍資料、二、FIR濾波器的設計及驗證:1)由MATLAB產(chǎn)生FIR濾波器的輸入數(shù)據(jù),并存放到 .txt文件中用MATLAB產(chǎn)生兩個頻率分別為:和2MHz的正弦信號,并將這兩個正弦信號

4、疊加,得到一個混疊的信號,并將這個混疊信號的波形數(shù)據(jù)存放到C盤根目錄下面的文件中。MATLAB實現(xiàn)代碼如下:clear all;fs = ; % 25M采樣率t = 0:1/fs:; % 共 * = 5000 個點fl = 500000;f2 = 2000000;signall = sin(2*pi*f1*t);%頻率為的正弦信號signal2 = sin(2*pi*f2*t);% 頻率為的正弦信%由于正、余弦波形的值在0,1之間,需要量化成16bit,先將數(shù)值放大y2 = fix(16384 + (2A14 - 1) * signall); % 量化到 15bity3 = fix(16384

5、 + (2A14 - 1) * signal2); % 量化到 15bity1 = y2 + y3; % 量化到 16bit%再將放大的浮點值量化,并寫道到存放在C盤的文本中fid = fopen(c:/, wt);fprintf(fid,%xn, y1); % 以16進制的格式將數(shù)據(jù)存放到.txt文件中。如果不用16進制,后面%讀數(shù)會出錯。fclose(fid);plot(y2, b);hold on;plot(y3, b);hold on;plot(y1, r);legend(正弦,2MHz正弦,兩者疊加);title(MATLAB產(chǎn)生的兩個正弦信號的疊加波形);信號波形圖如圖2所示:圖2

6、存放數(shù)據(jù)的文件路徑、名稱已經(jīng)文本的內容如圖3所示:r:U1 LhblaiTu1 ifffl EJcSf2 UTinC lanb cb3a 匕Maff j crca eaaa I9Ba f8e3 MT Edd部傕三區(qū)如河訐圖3用MATLAB回讀C盤根目錄下的文件,驗證存入的波形數(shù)據(jù)是否正確,MATLAB代碼如下:fid = fopen(c:/,r);for i = 1 : 5001;%一共有 5001 個數(shù)據(jù)num(i) = fscanf(fid, %x, 1);%從fid所指的文件中,以16進制的方式讀出一個數(shù)據(jù) end fclose(fid);figure(2);plot(num,b);le

7、gend(MATLAB從txt文件中讀出的原始疊加波形數(shù)據(jù));title(直接回讀MATLAB產(chǎn)生的兩個正弦信號的疊加波形);顯示的波形如圖4所示:圖4對比圖4和圖2中的疊加波形,可知以上操作的正確性。2) 用MATLAB設計FIR濾波器輸入信號是頻率別為和 2MHz的正弦信號的疊加,我們的任務是設計一個低通濾波器濾 除掉2MHz的干擾信號。因此,我們可以設計一個采樣率為25MHz的低通濾波器,其通帶帶寬為1MHz,阻帶寬度為2MHzo通帶內紋波抖動為 1dB,阻帶下降為80dB。在MATLAB的命令窗口輸入:fdatool命令并回車,打開 FDATool工具箱,用 MATLAB的FDAToo

8、l工具設計該濾波器,參數(shù)設置如圖5所示:設計好參數(shù)后,點擊 DesignFilter,可以在FDATool窗口的左上角看到濾波器的階數(shù)為63 階,點擊 File Generate M-file ,并將濾波器命名為mylowfilter 。-/ Ufil1,*T Uxi An.-iiJ.jrsi,s T*nlL Lvii.i.O4. Ed怯 t JTi2? 1 An 11 yai s I aj_gel. a Yi tn 二ndkx字0昌口啰aqULrrent Fltet InformaticnX B同0日瓦普8出蝎kJ。國田應xludfe RespOTse &),! Al討i uclj使一tur

9、eet-F 前m -IROiJct.B3Et 岫 bVocSizizciDskjrieii抑刑m端例曲曲的Wm心Slo埠Fl的二Filter M jlager.1012低通強波器采樣期率25MHzl Freouancy pgcrtlEMi-Il rjagntude ioe=licatmsH g 叩:mC 加MCH3AQ-3-3:Denstv Fidcir 回替寬1MHr對帝帝等7MH7阻帶衰減8DdB顓率耒樣中的等效/溺扣IDeaigning Filter Dons編寫如下代碼,濾除混疊信號中的高頻信號。Hd = mylowfilter; % 濾波器名稱output = filter(Hd,

10、y1); % 對疊加彳t號 y ,進行濾波處理 figure(3);plot(y2, k);hold on;plot(output, r);legend(原始信號,濾波后取出的信號);title(信號通過 MTALAB的低通濾波器后的波形);濾波后的波形如圖6所示:生成.coe文件,用于Xilinx的IPCore設計濾波器,FDATool窗 口點擊 File Export,保數(shù)組,這就是濾波器的系數(shù),如圖7所示:E xU-Fi1看 iRerMlerrkue交!(是保存力也篁耳就由:!mimTuni0 .Oaz:-EBRZBM,3E-Sa-E?iy二 I R二二丁F0. 小叩陽煙 JiWi.i.

11、r JU干*4 口Q 8L由4l 2nMmm411LUAQ. DCS工MlhlH&M,O.KLH4RTttMXMHI|i|0 WL1M6CI4i5 SM! - - -ompmiLife E.13 L feTcklsnEl K IijOWLK Tjv flLLd-:* U“1 Jj商分LI n產(chǎn)尸耳 ti陽皿國坦總士一 =?h OEM 中 V J器SSM 武 BIIIDaxs:9M w s M s r- 1- r. .tqn.LJ.taJbWi2UtiULMjW3&afl如HE闞gp值Ltn. wgj*Te雁事ft n才q1M4DHu33 ar:Mi4i 一“CMrf= CUldlllfti B

12、bs I*1A *3Z5,:,*式 - 4*ah ticb * i.QuutfDf *mi;eI5Ej f s d iE-E-rJfa ceuid Sua. nix 士. fihx* +i-27t + 工:口:Til = f-:nn t fItch- Erl 舒。.* IG事篁E巾=持默認設置,點擊Export即可,次數(shù)在MATLAB的workspace窗口多出一個 Num的1*64的圖7由于MATLAB生成的濾波器系數(shù)全是一些小數(shù),而FPGA只能處理整數(shù),因此我們必須將這些小數(shù)擴大一定的倍數(shù),使它們變成整數(shù)。在MATLAB的命令窗口輸入下面的一段代碼然后按Enter,即可將上面這些系數(shù)變?yōu)檎?/p>

13、數(shù),注意這里的*32767,表示將系數(shù)擴大32767倍,這里的擴大倍數(shù)只能選 24,目的是為 了后面濾波后的波形數(shù)據(jù)的高位截取(丟掉低位,即除以2AN)。返回ans=0,表示操作正確。coeff=round(Num/max(abs(Num)*32767);% abs()求絕對值,max()求最大值,round()四舍五入fid = fopen(e:/,wt); %將濾波器系數(shù)寫入文件件中fprintf(fid,%n,coeff);%將濾波器系數(shù)以16位浮點數(shù)的格式保存fclose(fid)程序運行的結果如圖8所示:圖8將文件的格式改為.coe格式,在文件的開口加上:radix = 10;coe

14、fdata =在每個數(shù)字前的空格處加一個逗號“,”,并在最后一個數(shù)字后面加上分號“ 如圖9所示:圖9這樣就產(chǎn)生了可供 FIR濾波器的IPCore可調用的.coe文件。3)用Verilog編程讀取MATLAB產(chǎn)生的波形數(shù)據(jù)通過Verilog 的$readmemh()函數(shù)即可讀出.txt文件中的數(shù)據(jù)(這里的數(shù)據(jù)是以16進制形 式存儲的),具體用法如下:a) reg15:0data_in0:2000; HMBlp %WlUMtnLLLiWUHn 1* CvU*.處11英:!H LU” lT:皿中血皿巾1口 . IlEKEKOBUEaD JLIUM1MIA|* da&jra*由 g dH心土 因3Kk

15、 : 3幅 Ma:Md E 而 aaa Rte fK:6H 3 薊 汗2: fRT 曜1方 33 L 皿 Wv 眼近溫匚?fff 通三己l &;董至k 供3 麗 |B 肅 MLhjq.immcmMi:事由w fsw口. H:W4I44V33LHl|LK* rS_lq0* *_貓I* r4p_Lq0oe文件導入濾波器的系數(shù)。b) 輸入信號的采樣頻率為 25MHz,這里必須和 MATLAB產(chǎn)生的波形數(shù)據(jù)的采樣頻率保 持一致。c) FIR濾波器的運行時鐘,這里我們選擇 250MHz,這里必須和仿真文件里給的時鐘 保持一致。d)輸入數(shù)據(jù)的類型,我們這里選擇了無符號數(shù),輸入數(shù)據(jù)位寬為16bit,因為mo

16、delsim不能讀出負數(shù)(要么用補碼,要么加偏移)。如圖11、圖12所示:口aunki 行呼 Fnq. Rsspansfl蚓FIR Compileram. i 伊 zftr _m 聲 ha r; 5Jfid ta Dwbv ! t 七中 LI-:JI其H MfeK - IWJCtfftl ifi3TgGf 位坪 J . 14l.l ei#歸的斤由守f -啪峙A r-sI 咐m(xù)w,2明*iilk(clk), fd(rfd), dy(rdy), in(data_in_reg), out(dout); xt 文件中 * clear all;fs = ; % 25M采樣率t = 0:1/fs:;% 共

17、 * = 5000 個點fl = 500000;f2 = 2000000;signall = sin(2*pi*f1*t); %頻率為的正弦信號signal2 = sin(2*pi*f2*t); %頻率為的正弦信號%y1 = signall + signal2; %兩個正弦信號疊加%x = linspace(0, , 2048); %在區(qū)間0, = 2*pi之間等間隔的取 1024個點%y1 = sin(x); %計算相應的余弦值%由于正、余弦波形的值在0,1之間,需要量化成16bit,先將數(shù)值放大 %y1 = y1 * 32768; % 32 * 1024 = 32768%y1 = y1 *

18、 16384; % 32 * 1024 = 32768%y1 = y1 + 32768;y2 = fix(16384 + (2A14 - 1) * signall);y3 = fix(16384 + (2A14 - 1) * signal2);y1 = y2 + y3;C 盤的文本中% 再將放大的浮點值量化,并寫道到存放在fid = fopen(c:/, wt);%fprintf(fid, %n, y1); % 在寫文件時量化為實數(shù)】,范圍是:-32768 - 32767fprintf(fid, %xn, y1); % 在寫文件時量化為實數(shù)】,范圍是:-32768 - 32767fclose(

19、fid);figure(1);plot(y2, b);hold on;plot(y3, b);hold on;plot(y1, r);legend(正弦,2MHz正弦,兩者疊加);title(MATLAB 產(chǎn)生的兩個正弦信號的疊加波形16bit 的定點實數(shù)【%,表示16bit 定點數(shù),16bit 的定點實數(shù)【%,表示16bit 定點數(shù),);f 表示f 表示%*MATLAB.txt 文件中的信號*fid = fopen(c:/,r);for i = 1 : 5001;%num(i) = fscanf(fid, %f, 1);%從 fid 所指的文件中,以實數(shù)的方式讀出一個數(shù)據(jù)num(i) = fscanf(fid, %x, 1);%從 fid 所指的文件中,以實數(shù)的方式讀出一個數(shù)據(jù)endfclose(fid);figure(2);plot(num,b);legend(MATLAB 從 txt 文件中讀出的原始疊加波形數(shù)據(jù));title(直接回讀MATLAB產(chǎn)生的兩個正弦信號的疊加波形);%*MATLAB設計FIR濾波器并對比濾波器前后

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論