日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于Quartues ii和Modelsim的FIR滤波器仿真

發布時間:2024/1/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Quartues ii和Modelsim的FIR滤波器仿真 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于Quartues ii和Modelsim的FIR濾波器仿真

  • 基于Quartues ii和Modelsim的FIR濾波器仿真
    • 設計需求
    • 設計思路
    • 設計過程
      • MATLAB生成測試數據
      • 利用filterdesigner工具設計FIR濾波器
      • 在Quartues ii中編寫FIR濾波器模塊

基于Quartues ii和Modelsim的FIR濾波器仿真

設計需求

本設計需要實現基于FPGA的FIR低通濾波,采樣頻率5MHz,截止頻率100kHz,利用Matlab設計FIR濾波器系數,并生成測試數據保存至txt文件。在Quartues ii中編寫FIR濾波器模塊,聯合Modelsim進行功能仿真,觀察濾波效果。

設計思路

本設計分為兩個部分,一個是MATLAB中測試數據的產生和FIR濾波器的設計及驗證;另一部分是Quartues ii中基于Verilog的FIR濾波器模塊及testbench編寫。

設計過程

MATLAB生成測試數據

用MATLAB產生5kHz和800kHz的混頻信號,代碼如下:

Fs = 5000000; %采樣頻率決定了兩個正弦波點之間的間隔 N = 8192; %采樣點數 N1 = 0 : 1/Fs : N/Fs-1/Fs; %以頻率Fs采8192個點的數據 s = sin(5000*2*pi*N1) + sin(800000*2*pi*N1)+3;figure(1); plot(N1,s)

得到的波形如圖1所示

圖1. 混頻信號波形 將波形數據進行量化,并轉換為十六進制保存到mem.txt中,作為原始數據導入到Modelsim中對所寫的FIR濾波器模塊進行測試。MATLAB代碼如下: fidc = fopen('E:\fault_detection_code\FIR_test1\mem.txt','wt'); %將結果寫入mem.txt文件,便于modesim使用 for x = 1 : Nfprintf(fidc,'%x\n',round((s(x)/10)*4096)); end fclose(fidc);

利用filterdesigner工具設計FIR濾波器

在MATLAB中用filterdesigner命令調出濾波器設計工具,界面如圖2

圖2. 濾波器設計工具
選擇低通FIR濾波器,選擇Hamming窗,設定階數10階,采樣頻率5MHz,截止頻率100kHz,點擊設計濾波器可以看到濾波器的幅頻特性曲線。選擇文件->導出,將濾波器系數導出到工作區。設計完成后生成的MATLAB代碼,如下:

function Hd = test_filter_kaiser %TEST_FILTER_KAISER 返回離散時間濾波器對象。% MATLAB Code % Generated by MATLAB(R) 9.9 and Signal Processing Toolbox 8.5. % Generated on: 16-Sep-2022 11:01:37% FIR Window Lowpass filter designed using the FIR1 function.% All frequency values are in kHz. Fs = 5000; % Sampling FrequencyN = 10; % Order Fc = 100; % Cutoff Frequency flag = 'scale'; % Sampling Flag Beta = 0.5; % Window Parameter% Create the window vector for the design algorithm. win = kaiser(N+1, Beta);% Calculate the coefficients using the FIR1 function. b = fir1(N, Fc/(Fs/2), 'low', win, flag); Hd = dfilt.dffir(b);% [EOF]

調用生成的濾波器函數對前文生成的混頻信號進行濾波,

H=test_filter1; d=filter(H,s);figure(2); plot(N1,d)

得到結果如圖3所示,對比圖1和圖3,可以看到高頻成分衰減了很多。

圖3. 濾波后的波形
將設計的FIR濾波器抽頭系數導出來。如下:
導出的FIR濾波器抽頭系數為
0.0138133379804440 ,
0.0296928583924488 ,
0.0717059583915281 ,
0.124585240157610 ,
0.167915751691329 ,
0.184573706773281 ,
0.167915751691329 ,
0.124585240157610 ,
0.0717059583915281 ,
0.0296928583924488 ,
0.0138133379804440,
對其進行量化處理,乘以2^10后取整,得到抽頭系數
14,30,73,128,172,189,172,128,73,30,14

在Quartues ii中編寫FIR濾波器模塊

代碼如下:

module FIR_test1(input CLK,input RSTn,input [11:0]FIR_IN,output reg [23:0]FIR_OUT );reg[11:0] delay_pipeline1; reg[11:0] delay_pipeline2; reg[11:0] delay_pipeline3; reg[11:0] delay_pipeline4; reg[11:0] delay_pipeline5; reg[11:0] delay_pipeline6; reg[11:0] delay_pipeline7; reg[11:0] delay_pipeline8; reg[11:0] delay_pipeline9; reg[11:0] delay_pipeline10; reg[11:0] delay_pipeline11;wire[7:0] coeff1 = 8'd14; //抽頭系數 wire[7:0] coeff2 = 8'd30; wire[7:0] coeff3 = 8'd73; wire[7:0] coeff4 = 8'd128; wire[8:0] coeff5 = 9'd172; wire[7:0] coeff6 = 8'd189; wire[7:0] coeff7 = 8'd172; wire[7:0] coeff8 = 8'd128; wire[7:0] coeff9 = 8'd73; wire[7:0] coeff10 = 8'd30; wire[7:0] coeff11 = 8'd14;reg signed [23:0] multi_data1 ;//乘積結果 reg signed [23:0] multi_data2 ; reg signed [23:0] multi_data3 ; reg signed [23:0] multi_data4 ; reg signed [23:0] multi_data5 ; reg signed [23:0] multi_data6 ; reg signed [23:0] multi_data7 ; reg signed [23:0] multi_data8 ; reg signed [23:0] multi_data9 ; reg signed [23:0] multi_data10 ; reg signed [23:0] multi_data11 ;//每到來一個時鐘信號,讀入一個數據,更新一次delay_pipeline。 always@(posedge CLK or negedge RSTn) if(!RSTn) begindelay_pipeline1 <= 12'b0 ;delay_pipeline2 <= 12'b0 ;delay_pipeline3 <= 12'b0 ;delay_pipeline4 <= 12'b0 ;delay_pipeline5 <= 12'b0 ;delay_pipeline6 <= 12'b0 ;delay_pipeline7 <= 12'b0 ;delay_pipeline8 <= 12'b0 ;delay_pipeline9 <= 12'b0 ;delay_pipeline10<= 12'b0 ;delay_pipeline11<= 12'b0 ; end else begindelay_pipeline1 <= FIR_IN;delay_pipeline2 <= delay_pipeline1 ;delay_pipeline3 <= delay_pipeline2 ;delay_pipeline4 <= delay_pipeline3 ;delay_pipeline5 <= delay_pipeline4 ;delay_pipeline6 <= delay_pipeline5 ;delay_pipeline7 <= delay_pipeline6 ;delay_pipeline8 <= delay_pipeline7 ;delay_pipeline9 <= delay_pipeline8 ;delay_pipeline10 <= delay_pipeline9 ;delay_pipeline11 <= delay_pipeline10 ; end//將輸入經過延時的信號和濾波器系數相乘,每到來一個時鐘便將一個新的乘積結果更新到multi_data中。這里直接使用“*”,編譯后Quartues ii會自動調用乘法器IP核 always@(posedge CLK or negedge RSTn) beginif(!RSTn)multi_data1 <= 23'b0 ;elsemulti_data1 <= delay_pipeline1*coeff1 ; endalways@(posedge CLK or negedge RSTn) beginif(!RSTn)multi_data2 <= 23'b0 ;elsemulti_data2 <= delay_pipeline2*coeff2 ; endalways@(posedge CLK or negedge RSTn) beginif(!RSTn)multi_data3 <= 23'b0 ;elsemulti_data3 <= delay_pipeline3*coeff3 ; endalways@(posedge CLK or negedge RSTn) beginif(!RSTn)multi_data4 <= 23'b0 ;elsemulti_data4 <= delay_pipeline4*coeff4 ; endalways@(posedge CLK or negedge RSTn) beginif(!RSTn)multi_data5 <= 23'b0 ;elsemulti_data5 <= delay_pipeline5*coeff5 ; endalways@(posedge CLK or negedge RSTn) beginif(!RSTn)multi_data6 <= 23'b0 ;elsemulti_data6 <= delay_pipeline6*coeff6 ; endalways@(posedge CLK or negedge RSTn) beginif(!RSTn)multi_data7 <= 23'b0 ;elsemulti_data7 <= delay_pipeline7*coeff7 ; endalways@(posedge CLK or negedge RSTn) beginif(!RSTn)multi_data8 <= 23'b0 ;elsemulti_data8 <= delay_pipeline8*coeff8 ; endalways@(posedge CLK or negedge RSTn) beginif(!RSTn)multi_data9 <= 23'b0 ;elsemulti_data9 <= delay_pipeline9*coeff9 ; endalways@(posedge CLK or negedge RSTn) beginif(!RSTn)multi_data10 <= 23'b0 ;elsemulti_data10 <= delay_pipeline10*coeff10 ; endalways@(posedge CLK or negedge RSTn) beginif(!RSTn)multi_data11 <= 23'b0 ;elsemulti_data11 <= delay_pipeline11*coeff11 ; end//將乘積累加,累加的結果就是濾波后的信號。 always@(posedge CLK or negedge RSTn) beginif(!RSTn)FIR_OUT <= 23'b0 ;elseFIR_OUT <= (multi_data1 + multi_data2 + multi_data3 + multi_data4 +multi_data5 + multi_data6 + multi_data7 + multi_data8 + multi_data9 + multi_data10 + multi_data11)>>10 ; endendmodule

接下來編寫testbench,代碼如下:

`timescale 1 ns/ 1 ps module FIR_test1_tb(); // constants // general purpose registers //reg eachvec; // test vector input registers reg CLK; reg [11:0] FIR_IN; reg RSTn; reg [11:0] mem[1:8192];//用來存放讀入的8192個數據// wires wire [23:0] FIR_OUT; reg [13:0] i;// assign statements (if any) FIR_test1 i1 ( // port map - connection between master ports and signals/registers .CLK(CLK),.FIR_IN(FIR_IN),.FIR_OUT(FIR_OUT),.RSTn(RSTn) ); initial begin // code that executes only once // insert code here --> begin $readmemh("E:/fault_detection_code/FIR_test1/mem.txt",mem);//讀入3.1中產生的波形數據文件mem.txt,文件路徑注意不要搞錯RSTn = 0;CLK = 0;#50 RSTn = 1;#1000000 $stop;// --> end $display("Running testbench"); end always #100 CLK=~CLK;always@(posedge CLK or negedge RSTn) //每次時鐘到達,給FIR_IN一個輸入數據 beginif(!RSTn) FIR_IN <= 12'b0 ;elseFIR_IN <= mem2[i]; endalways@(posedge CLK or negedge RSTn) beginif(!RSTn)i <= 12'd0;elsei <= i + 1'd1; end//always // optional sensitivity list // @(event1 or event2 or .... eventn) //begin // code executes for every event on sensitivity list // insert code here --> begin //@eachvec; // --> end //end endmodule

FIR濾波器模塊和testbench編譯完成后,進行RTL仿真,可以得到濾波后的波形,如圖4所示,

圖4. RTL仿真結果

總結

以上是生活随笔為你收集整理的基于Quartues ii和Modelsim的FIR滤波器仿真的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品第100页 | 国产超碰 | 国产精品国产三级国产播12软件 | 米奇久久 | 久久中文字幕在线观看 | av中出| 日韩视频免费观看 | 成人av手机在线 | jjzzjjzz欧美69巨大 | 河北彩花av在线播放 | 天天综合av | 中文字幕有码在线 | 亚洲人在线观看视频 | 日韩高清精品免费观看 | 精品国产露脸精彩对白 | 亚洲成色www久久网站 | 香蕉色综合 | 欧美日韩生活片 | 麻豆国产av超爽剧情系列 | 日韩色道| aa毛片视频 | 国产aⅴ片 | 亚洲一区二区三区欧美 | 色综合久久88色综合天天6 | 国语对白真实视频播放 | 白丝动漫美女 | a级片免费在线观看 | 伊人22 | 91麻豆视频 | 四虎影视免费永久观看在线 | aaa级片| 中文人妻熟女乱又乱精品 | 欧美成综合 | 色无极在线| 免费在线观看毛片视频 | 懂色av一区二区夜夜嗨 | 精品无码人妻一区二区三区 | 日本55丰满熟妇厨房伦 | 久久久久伊人 | 色戒电影未测减除版 | 色黄啪啪网 | 亚洲国产精品久久久久久久 | 亚洲男女| 人妻一区二区三区免费 | 久久中文在线 | 少妇视频在线播放 | av在线一区二区 | 制服丝袜亚洲色图 | 1000部做爰免费视频 | 一本之道高清无码视频 | 国产伦精品一区二区三区视频孕妇 | 少妇3p视频| 欧美精品免费在线 | 亚洲国产精品第一页 | 久热青草 | 中文字幕av亚洲精品一部二部 | 国产视频一级 | 吊视频一区二区三区 | 欧美性猛交xx乱大交 | www.xxx.日本 | 偷偷操不一样 | 亚洲熟妇色自偷自拍另类 | 久久精选视频 | 午夜精品国产精品大乳美女 | 久久久精品久久 | 一级片在线观看免费 | 美女喷液视频 | 成人h在线 | 日韩xx视频| 国产成人91精品 | 亚洲天堂区 | 四虎网站最新网址 | 午夜视频国产 | 免费中文字幕 | 在线理论视频 | av中文在线天堂 | 一级免费片| 91性高潮久久久久久久 | 免费在线播放毛片 | 波多野结衣在线免费视频 | 温柔女教师在线观看 | 视频在线观看免费大片 | 成人在线观看一区二区 | 中文一区二区在线观看 | 91在线一区 | 色婷婷一区 | 樱花草涩涩www在线播放 | 粉嫩av一区二区夜夜嗨 | 香蕉视频ap | 欧美裸体女人 | 91看片视频 | 色亚洲色图 | 99精品视频在线播放免费 | 东方av在线播放 | 成人毛片软件 | 日韩不卡一二区 | 一级女人毛片 | 大地资源影视在线播放观看高清视频 | 午夜在线播放视频 |