在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于現場可編程門陣列(fpga)技術fir數字濾波器的設計

e9Zb_gh_8734352 ? 來源:未知 ? 作者:李倩 ? 2018-08-08 15:55 ? 次閱讀

在數字化技術在各個領域得到廣泛運用的今天,數字濾波器是數字系統中信號處理關鍵的一環。數字濾波在圖像處理、語音識別和模式識別等數字信號處理中占有重要地位。數字濾波器和模擬濾波器相比具有更高的精度、信噪比,以及不可比擬的可靠性。由于在性能、成本、靈活性和功耗等方面的優勢,基于fpga的信號處理器已廣泛應用于各種信號處理領域。

本文主要介紹了基于現場可編程門陣列(fpga)技術fir數字濾波器的設計,設計一個濾波器,其采樣率 fs=1MHz,通帶截止頻率 fpass=50KHz,歸一化表示fpass=0.1,阻帶起始頻率 fstop=200 KHz,歸一化表示為fstop=0.4,阻帶衰減 80dB。

設計實現

1. 打開 MATLAB 軟件,在命令行窗口輸入 fdatool 并回車,打開濾波器設計與分析工具窗口

2. 在 fda 工具中配置你需要的濾波器參數

圖片中頻率參數(frequency specifications)采用的歸一化表示方法,如果使用實際頻率表示,在 Units 框內選擇“KHz”;

在 Fs 內填寫 1000,即數字采樣頻率為1000KHz (1MHz);在 Fpass 內填寫 50,即通帶截止頻率為 50KHz;在 Fstop內填寫 200,即阻帶起始頻率為 200KHz,Astop 填 80,即為阻帶衰減 80dB。

點擊 Design Filter 后可以查看頻率及相位的響應曲線

3.在“Filter Designer & Analysis Tool”界面中,打開 File—>Export…出現下圖

4.點擊“Export” 將系數導出到 MATLAB 工作區間

將 coefficients 系數保存到 txt 文件中,在 MATLAB 命令窗口輸入:

>> fid=fopen('F:Fpga_ProjectFIR_Filtercoef.txt','w');

% txt 文件路徑根據實際情況修改

>> fprintf(fid,'%d,',Num); % 打印到 txt 文件中的相鄰系數由逗號隔開

>> fclose(fid);

這樣我們就得到了一組濾波器系數,存在上圖路徑下的 coef.txt 文件中。

打開 quartus prime 17.0 軟件,新建工程:

5.工程名字:FIR_Fliter

6.選擇對應的 FPGA 型號,10M08SCM153C8G

7.根據自己的情況選擇 EDA 工具,這里我們選擇 synplify pro 和 Modelsim-Altera

完成新建工程,進入開發界面;

8.在開發界面選擇 tools—>IP Catalog,并在 IP Library 中找到 FIR II 的選項,雙加 FIR II 打開 QSYS 工具

9.填寫 IP 實例的名字,點擊 OK

10.在 Filter Specification 選項中配置參數如下圖

11.在 Coefficient Settings 選項中配置參數如下圖

Coefficient width 可以自行配置,一般值越高濾波效果也好,同時實現濾波器消耗的資源也越多

12.在 Coefficients 選項中需要將 Matlab 中導出的濾波系數導入

點擊 Import from file 按鈕,選擇之前從 Matlab 導出的 coef.txt 文件,點擊 import 導入;

軟件會將導入的系數按照上圖中設定的系數位寬調整到合適的值,并分別繪制響應曲線,原始數據 VS 修正數據

13.在 Input/Output Opetion 選項中配置參數

如下圖,其中 Input width 根據采樣數據的實際位寬填寫,這里為 11 位有符號數

14.以上各項參數配置完成后,點擊 Generate HDL..,彈出生成頁面,點擊 Generate,等待完成

通過以上操作完成了 IP 核的生成,點擊 Finish 結束。

15.將 IP 核中的 qip 和 sip 文件添加到工程文件列表中

16.對工程進行綜合,通過

17.將我們準備好的測試文件 FIR_filter_tb.v 和 DDS.v 拷貝至工程目錄文件夾下

在 Quartus prime 17.0 軟件中選擇

Assignment —>settings.. —>EDA tool settings —>Simulation —>Test Benches 添加仿真文件

18.點擊 Tools —>RUN Simulation Tool —>RTL Simulation

Quartus prime 17.0 支持一鍵式仿真,直接啟動仿真軟件 Modelsim-Altera,并顯示仿真波形數據(模擬形式顯示)

data1 信號為 24KHz 正弦波,量化位寬為 10bit

data2 信號為 240KHz 正弦波,量化位寬為 10bit

data_in 信號為 data1 和 data2 的疊加信號,量化位寬為 11bit

data_out 信號為 data_in 信號經過 FIR 數字濾波后的輸出,量化位寬為 28bit

附件一:FIR_filter_tb.v

// --------------------------------------------------------------------

// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<

// --------------------------------------------------------------------

// Module: FIR_filter_tb

//

// Author: Step

//

// Description: FIR_filter_tb

//

// Web: www.stepfpga.com

//

// --------------------------------------------------------------------

// Code Revision History :

// --------------------------------------------------------------------

// Version: |Mod. Date: |Changes Made:

// V1.1 |2016/10/30 |Initial ver

// --------------------------------------------------------------------

`timescale 1ps/1ps

module FIR_filter_tb;

parameter PERIOD = 20;

reg clk, rst_n;

wire signed [26:0] data_out;

initial begin

clk = 0;

rst_n = 0;

#100;

rst_n = 1;

#6000;

$stop;

end

always #10 clk = ~clk;

wire signed[9:0] data1;

DDS dds_24k

(

.clk_in(clk), //clock in

.rst_n_in(rst_n), //reset, active low

.dds_en_in(1), //dds work enable

.f_increment(24'h60000), //frequency increment

.p_increment(0), //phase increment

.dac_data_out(data1) //data out

);

wire signed[9:0] data2;

DDS dds_240k

(

.clk_in(clk), //clock in

.rst_n_in(rst_n), //reset, active low

.dds_en_in(1), //dds work enable

.f_increment(24'h3c0000), //frequency increment

.p_increment(0), //phase increment

.dac_data_out(data2) //data out

);

wire signed[10:0] data_in = data1 + data2;

FIR_Filter u0 (

.ast_sink_data (data_in), // avalon_streaming_sink.data

.ast_sink_valid (1), // .valid

.ast_sink_error (0), // .error

.ast_source_data (data_out), // avalon_streaming_source.data

.ast_source_valid (), // .valid

.ast_source_error (), // .error

.clk (clk), // clk.clk

.reset_n (rst_n) // rst.reset_n

);

endmodule

附件二:DDS.v

// --------------------------------------------------------------------

// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<

// --------------------------------------------------------------------

// Module: DDS

//

// Author: Step

//

// Description: DDS

//

// Web: www.stepfpga.com

//

// --------------------------------------------------------------------

// Code Revision History :

// --------------------------------------------------------------------

// Version: |Mod. Date: |Changes Made:

// V1.1 |2016/10/30 |Initial ver

// --------------------------------------------------------------------

module DDS

(

input clk_in, //clock in

input rst_n_in, //reset, active low

input dds_en_in, //dds work enable

input [23:0] f_increment, //frequency increment

input [23:0] p_increment, //phase increment

output dac_clk_out, //clock out

output [9:0] dac_data_out //data out

);

reg [23:0] phase_accumulator;

wire [23:0] phase;

//wire [9:0] dac_data_out;

assign dac_clk_out = clk_in;

//next_phase = phase_accumulator + f_increment;

always @(posedge clk_in or negedge rst_n_in)

begin

if(!rst_n_in) phase_accumulator <= 23'b0;

else if(dds_en_in) phase_accumulator <= phase_accumulator + f_increment;

end

assign phase = phase_accumulator + p_increment; // phase is the high 8 bits

lookup_table lookup_table_uut

(

.phase(phase[23:16]),

.dac_data_out(dac_data_out)

);

endmodule

/**************************************************

module: lookup_table

**************************************************/

module lookup_table

(

input [7:0] phase,

output reg [9:0] dac_data_out

);

wire [5:0] address = phase[5:0];

wire [1:0] sel = phase[7:6];

wire [9:0] sine;

always@(sel or sine)

case (sel)

2'b00 : dac_data_out = {1'b0, sine[9:1]};

2'b01 : dac_data_out = {1'b0, sine[9:1]};

2'b10 : dac_data_out = {1'b1, 9'h1ff-sine[9:1]};

2'b11 : dac_data_out = {1'b1, 9'h1ff-sine[9:1]};

endcase

sine_table sine_table_uut

(

.sel(sel),

.address(address),

.sine(sine)

);

endmodule

/**************************************************

module: sine_table

**************************************************/

module sine_table

(

input [1:0] sel,

input [5:0] address,

output reg [9:0] sine

);

reg [5:0] table_addr;

always @(sel or address)

case (sel)

2'b00: table_addr = address;

2'b01: table_addr = 6'h3f - address;

2'b10: table_addr = address;

2'b11: table_addr = 6'h3f - address;

endcase

always @(table_addr)

case(table_addr)

6'h0: sine=10'h000;

6'h1: sine=10'h019;

6'h2: sine=10'h032;

6'h3: sine=10'h04B;

6'h4: sine=10'h064;

6'h5: sine=10'h07D;

6'h6: sine=10'h096;

6'h7: sine=10'h0AF;

6'h8: sine=10'h0C4;

6'h9: sine=10'h0E0;

6'ha: sine=10'h0F9;

6'hb: sine=10'h111;

6'hc: sine=10'h128;

6'hd: sine=10'h141;

6'he: sine=10'h159;

6'hf: sine=10'h170;

6'h10: sine=10'h187;

6'h11: sine=10'h19F;

6'h12: sine=10'h1B5;

6'h13: sine=10'h1CC;

6'h14: sine=10'h1E2;

6'h15: sine=10'h1F8;

6'h16: sine=10'h20E;

6'h17: sine=10'h223;

6'h18: sine=10'h238;

6'h19: sine=10'h24D;

6'h1a: sine=10'h261;

6'h1b: sine=10'h275;

6'h1c: sine=10'h289;

6'h1d: sine=10'h29C;

6'h1e: sine=10'h2AF;

6'h1f: sine=10'h2C1;

6'h20: sine=10'h2D3;

6'h21: sine=10'h2E5;

6'h22: sine=10'h2F6;

6'h23: sine=10'h307;

6'h24: sine=10'h317;

6'h25: sine=10'h326;

6'h26: sine=10'h336;

6'h27: sine=10'h344;

6'h28: sine=10'h353;

6'h29: sine=10'h360;

6'h2a: sine=10'h36D;

6'h2b: sine=10'h37A;

6'h2c: sine=10'h386;

6'h2d: sine=10'h392;

6'h2e: sine=10'h39C;

6'h2f: sine=10'h3A7;

6'h30: sine=10'h3B1;

6'h31: sine=10'h3BA;

6'h32: sine=10'h3C3;

6'h33: sine=10'h3CB;

6'h34: sine=10'h3D3;

6'h35: sine=10'h3DA;

6'h36: sine=10'h3E0;

6'h37: sine=10'h3E6;

6'h38: sine=10'h3EB;

6'h39: sine=10'h3F0;

6'h3a: sine=10'h3F3;

6'h3b: sine=10'h3F7;

6'h3c: sine=10'h3FA;

6'h3d: sine=10'h3FC;

6'h3e: sine=10'h3FE;

6'h3f: sine=10'h3FF;

endcase

endmodule

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1630

    文章

    21802

    瀏覽量

    606413
  • 濾波器
    +關注

    關注

    161

    文章

    7876

    瀏覽量

    179066
  • 信號處理器
    +關注

    關注

    1

    文章

    254

    瀏覽量

    25365

原文標題:【FPGA信號處理一】5分鐘學會FIR 濾波器設計

文章出處:【微信號:gh_873435264fd4,微信公眾號:FPGA技術聯盟】歡迎添加關注!文章轉載請注明出處。

收藏 1人收藏

    評論

    相關推薦

    使用FPGA構建的數字濾波器設計方案

    本文簡要介紹了FIR數字濾波器的結構特點和基本原理,提出基于FPGA和DSP Builder的FIR數字濾波器的基本設計流程和實現方案。##
    發表于 07-24 15:30 ?8907次閱讀
    使用<b class='flag-5'>FPGA</b>構建的<b class='flag-5'>數字濾波器</b>設計方案

    基于FPGAFIR數字濾波器的優化設計

    基于FPGAFIR數字濾波器的優化設計
    發表于 08-17 23:55

    現場可編程門陣列有哪些應用?

    現場可編程門陣列(FPGA)是一種可編程邏輯器件,由成千上萬個完全相同的可編程邏輯單元組成,周圍
    發表于 08-06 08:27

    基于IP核的FIR低通濾波器該怎么設計?

    Programmable Gate Array,現場可編程門陣列)基于查找表的結構和全硬件并行執行的特性,如何用FPGA 來實現高速FIR
    發表于 09-05 07:21

    如何優化FIR數字濾波器

    相頻特性。而現場可編程門陣列(Field Programmable Gate Array,FPGA)可并行執行的特點決定它更加廣泛地應用于實時數字
    發表于 10-16 07:02

    FPGA設計的四階IIR數字濾波器

    FPGA設計的四階IIR數字濾波器 常用的數字濾波器FIR數字濾波器和IIR數字濾波器?
    發表于 01-16 18:15 ?1470次閱讀
    用<b class='flag-5'>FPGA</b>設計的四階IIR<b class='flag-5'>數字濾波器</b>

    基于FPGA流水線分布式算法的FIR濾波器的實現

    摘要: 提出了一種采用現場可編門陣列器件(FPGA)并利用窗函數法實現線性FIR數字濾波器
    發表于 06-20 14:05 ?1337次閱讀
    基于<b class='flag-5'>FPGA</b>流水線分布式算法的<b class='flag-5'>FIR</b><b class='flag-5'>濾波器</b>的實現

    用CPLD實現FIR數字濾波器的設計

    ?摘 要:介紹了一種利用ALTERA公司的復雜可編程邏輯器件(CPLD)快速卷積法實現數字濾波器的設計??? 關鍵詞:CPLD 數字濾波器 信號處理
    發表于 06-20 14:23 ?1107次閱讀
    用CPLD實現<b class='flag-5'>FIR</b><b class='flag-5'>數字濾波器</b>的設計

    基于LabVIEW的FIR數字濾波器設計

    基于LabVIEW的FIR數字濾波器設計 介紹一種基于LabVIEW快速有效地設計常規FIR數字濾波器的方法,并給出了設計實例。因可以隨時對比設計要求調整參數
    發表于 10-16 09:24 ?6027次閱讀
    基于LabVIEW的<b class='flag-5'>FIR</b><b class='flag-5'>數字濾波器</b>設計

    基于MATLAB及FPGAFIR低通濾波器的設計

    充分利用有限沖擊響應數字濾波器(Finite Impulse Response digital filter ,FIR)系數的對稱特性,借助于MATLAB語言和現場可編程
    發表于 08-05 14:23 ?82次下載
    基于MATLAB及<b class='flag-5'>FPGA</b>的<b class='flag-5'>FIR</b>低通<b class='flag-5'>濾波器</b>的設計

    基于FPGAFIR數字濾波器的優化設計

    目前數字濾波器的硬件實現方法通常采用專用DSP芯片或FPGA,本文從FIR濾波器的系數考慮,采用CSD編碼,對FIR
    發表于 08-16 10:54 ?3881次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>FIR</b><b class='flag-5'>數字濾波器</b>的優化設計

    基于Matlab/Simulink的FIR數字濾波器的設計與實現

    基于Matlab/Simulink的FIR數字濾波器的設計與實現。
    發表于 01-15 15:16 ?39次下載

    基于LabVIEW的FIR數字濾波器設計

    基于LabVIEW的FIR數字濾波器設計。
    發表于 01-20 16:30 ?54次下載

    如何使用FPGA實現IIR數字濾波器的設計

    數字濾波器、DSP器件或可編程邏輯器件(如FPGA)實現。因為,用FPGA實現數字濾波器具有實時性強、靈活性高、處理速度快以及小批量生產成本
    發表于 08-06 18:50 ?3次下載
    如何使用<b class='flag-5'>FPGA</b>實現IIR<b class='flag-5'>數字濾波器</b>的設計

    FIR數字濾波器設計

    數字濾波器的輸入輸出均為數字信號,信號通過數字濾波器后,可以改變頻率成分的相對比例或濾除某些頻率成分。數字濾波器可以分為IIR數字濾波器
    的頭像 發表于 04-05 09:47 ?5761次閱讀
    主站蜘蛛池模板: 国产亚洲一区二区三区在线 | 永久免费在线观看 | 高h办公室| 好男人社区在线观看www | 欧美婷婷 | 美女被免费视频网站九色 | 美女扒开内裤无遮挡禁18 | 六月天色婷婷 | 1024成人| 男女在线免费视频 | 久久精品美女久久 | 黄 色 成 年人在线 黄a大片 | 亚洲成a人片在线观看www | 国产一区二区高清在线 | 国产女人视频免费观看 | 亚洲资源在线视频 | 亚洲午夜精品一区二区 | 美女张开腿让男生桶出水 | 丁香婷婷久久大综合 | 大尺度免费高清在线观看视频 | 伊人98| 成人a毛片在线看免费全部播放 | 国模私拍视频在线 | 亚洲成人在线免费观看 | 第四色激情网 | 人人玩人人弄人人曰 | 欧美另类xx| 欧美一级在线观看视频 | 国产图片区 | 成人www视频 | 黄色福利网 | 亚洲视频在线不卡 | 在线播放黄色 | 亚洲成人77777 | 亚洲 自拍 欧美 综合 | 香港三级理论在线影院 | 亚洲大成色www永久网 | 国产三级在线观看免费 | 免费观看视频高清www | 天天曰天天操 | 午夜精品福利在线观看 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品