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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

FIR濾波器代碼及仿真設計

CHANBAEK ? 來源:FPGA自學筆記分享 ? 作者:FPGA自學筆記分享 ? 2023-06-02 12:36 ? 次閱讀

上文 FPGA數字信號處理之濾波器2_使用dsp48e1的fir濾波器設計完成了結構設計:

圖片

根據這一結構,假定要設計一個滿速率的fir濾波器,濾波器系數為:[3,13,27,58,62,204,47,546,233,1465,3260,3260,1465,233,546,47,204,62,58,27,13,3],濾波器總共22個系數,對稱結構,所以有效系數11個。

以輸入數據為自加數為例,根據結構可以得到數據擺放格式如下,clk0時刻的計算公式為:(500+521)*c0+(501+520)*c1+......+(510+511)*c10;clk1時刻的計算公式為:(501+522)*c0+(502+521)*c1+......+(511+512)*c10;....

圖片

據此,設計fir代碼如下:

代碼設置三個參數,數據位寬、系數個數、系數增益,其中系數個數決定代碼中乘法器的個數及代碼的處理時延,系數增益是系數給數據帶來的增益,在數據輸出的時候要通過截位截掉。

// ============================================================
// File Name: cm_fir_top
// VERSION  : V1.0
// DATA     : 2023/3/4
// Author   : FPGA干貨分享
// ============================================================
// 功能:fir濾波器代碼
// coef = 
// delay : 4+C_COEF_NUM*2
// ============================================================




`timescale 1ns/100ps
module cm_fir_top #(
    parameter                           C_DATA_WIDTH     = 16    ,
    parameter                           C_COEF_NUM       = 11    , ///有效系數個數
    parameter                           C_COEF_CUT_NUM   = 12    ) ///四舍五入使用的0.5大小
(
    input  wire                         I_sys_clk                , /// 工作時鐘 
    input  wire                         I_rst_in                 , /// 復位 
    input  wire [C_DATA_WIDTH-1:0]      I_data_in                , /// 數據輸入
    output reg  [C_DATA_WIDTH-1:0]      O_data_out                 /// 數據輸出
);


// ============================================================
// 內部參數
// ============================================================
localparam  C_COEF_05 = 2**C_COEF_CUT_NUM ;


// ============================================================
// 變量
// ============================================================
reg     [C_DATA_WIDTH-1:0]      S_data_in[C_COEF_NUM*2-1:0] ;
wire    [17:0]                  S_coef[C_COEF_NUM-1:0]      ;
wire    [47:0]                  S_pcout[C_COEF_NUM-1:0]     ;
wire    [47:0]                  S_dsp_out[C_COEF_NUM-1:0]   ;

然后就是主代碼,使用assign給系數賦值,然后根據系數個數緩存輸入數據,用于fir濾波器的卷積操作。隨后例化第一個dsp,U0_cm_dsp48e1,該濾波器作為級聯濾波器組的開頭乘法器,沒有級聯輸入,但是使用C端口作為假四舍五入預加的輸入,隨后使用generate根據濾波器系數個數生成級聯dsp組,最后將最后一級濾波器的輸出進行截位,得到最終結果。

// ============================================================
// main code
// ============================================================
assign S_coef[0 ] =  18'd3     ;
assign S_coef[1 ] =  18'd13    ;
assign S_coef[2 ] = -18'd27   ;
assign S_coef[3 ] = -18'd58   ;
assign S_coef[4 ] =  18'd62    ;
assign S_coef[5 ] =  18'd204   ;
assign S_coef[6 ] = -18'd47   ;
assign S_coef[7 ] = -18'd546  ;
assign S_coef[8 ] = -18'd233  ;
assign S_coef[9 ] =  18'd1465  ;
assign S_coef[10] =  18'd3260  ;


always@(posedge I_sys_clk)
    S_data_in[0] <= I_data_in ;




genvar i;
generate for(i=1;i< C_COEF_NUM*2;i=i+1)
    begin
        always@(posedge I_sys_clk)
            S_data_in[i] <= S_data_in[i-1];
    end
endgenerate




cm_dsp48e1 #(
    .C_DATA_WITH_A      (C_DATA_WIDTH                   ),
    .C_DATA_WITH_B      (18                             ),
    .C_DATA_WITH_C      (32                             ),
    .C_DATA_WITH_D      (C_DATA_WIDTH                   )
)
U0_cm_dsp48e1(
    .I_CLK              (I_sys_clk                      ) , // clk
    .I_RST              (I_rst_in                       ) , // RST
    .I_A                (S_data_in[0]                   ) , // [29:0] 
    .I_B                (S_coef[0 ]                     ) , // [17:0] 
    .I_C                (C_COEF_05                      ) , // [47:0] 
    .I_D                (S_data_in[C_COEF_NUM*2-1]      ) , // [24:0] 
    .I_PCIN             (48'd0                          ) , // [47:0] 只能直連PCOUT
    .I_ALUMODE          (4'd0                           ) , // [3:0] 
    .I_INMODE           (5'b00101                       ) , // [4:0] 
    .I_OPMODE           (7'b0110101                     ) , // [6:0]  C + (A+D)*B
    .O_P                (                               ) , // [47:0]
    .O_PCOUT            (S_pcout[0]                     )   // [47:0] 只能直連PCIN
    );




genvar j;
generate for(j=1;j< C_COEF_NUM;j=j+1)
    begin


        cm_dsp48e1 #(
            .C_DATA_WITH_A      (C_DATA_WIDTH                   ),
            .C_DATA_WITH_B      (18                             ),
            .C_DATA_WITH_C      (32                             ),
            .C_DATA_WITH_D      (C_DATA_WIDTH                   )
        )
        U1_cm_dsp48e1(
            .I_CLK              (I_sys_clk                      ) , // clk
            .I_RST              (I_rst_in                       ) , // RST
            .I_A                (S_data_in[2*j]                 ) , // [29:0] 
            .I_B                (S_coef[j ]                     ) , // [17:0] 
            .I_C                (32'd0                          ) , // [47:0] 
            .I_D                (S_data_in[C_COEF_NUM*2-1]      ) , // [24:0] 
            .I_PCIN             (S_pcout[j-1]                   ) , // [47:0] 只能直連PCOUT
            .I_ALUMODE          (4'd0                           ) , // [3:0] 
            .I_INMODE           (5'b00101                       ) , // [4:0] 
            .I_OPMODE           (7'b0010101                     ) , // [6:0] PCin + (A+D)*B
            .O_P                (S_dsp_out[j]                   ) , // [47:0]
            .O_PCOUT            (S_pcout[j]                     )   // [47:0] 只能直連PCIN
            );


    end
endgenerate


always@(posedge I_sys_clk)
    O_data_out <= S_dsp_out[C_COEF_NUM-1][C_COEF_CUT_NUM+1+:C_DATA_WIDTH] ;




endmodule

仿真tb如下,可使用自加數或者單音作為輸入:

// ============================================================
// File Name: cm_fir_top
// VERSION  : V1.0
// DATA     : 2023/3/4
// Author   : FPGA干貨分享
// ============================================================
// 功能:fir濾波器代碼
// delay : 20clk
// ============================================================




`timescale 1ns/100ps
module tb_cm_fir_top ;
    parameter                           C_DATA_WIDTH     = 16    ;
    parameter                           C_COEF_NUM       = 11    ; ///有效系數個數
    parameter                           C_COEF_CUT_NUM   = 12    ; ///四舍五入使用的0.5大小


    reg                                 I_sys_clk                ; /// 工作時鐘 
    reg                                 I_rst_in                 ; /// 復位 
    reg         [C_DATA_WIDTH-1:0]      I_data_in                ; /// 數據輸入
    wire        [C_DATA_WIDTH-1:0]      O_data_out               ; /// 數據輸出,從start開始連續輸出,位寬按照最大能力輸出


    reg [31:0]      S_clk_cnt ;

initial
    begin
        I_sys_clk    = 'd1;
        I_rst_in     = 'd1;
        I_data_in    = 'd0;
        S_clk_cnt    = 'd0;

        #1000;
        I_rst_in     = 'd0;


    end

always #1 I_sys_clk = ~I_sys_clk;





always @(posedge I_sys_clk) 
    S_clk_cnt <= S_clk_cnt + 'd1;


/// 自加數
always @(posedge I_sys_clk)
    I_data_in <= I_data_in + 'd1;

///單音
// always @(posedge I_sys_clk)
    // I_data_in <= $sin(2*3.14*S_clk_cnt/512)*8192;


cm_fir_top #(
    .C_DATA_WIDTH               ( C_DATA_WIDTH          )  ,
    .C_COEF_NUM                 ( C_COEF_NUM            )  , ///有效系數個數
    .C_COEF_CUT_NUM             ( C_COEF_CUT_NUM        )  ) ///四舍五入使用的0.5大小
cm_fir_top(
    .I_sys_clk                  ( I_sys_clk             )  , /// 工作時鐘 
    .I_rst_in                   ( I_rst_in              )  , /// 復位 
    .I_data_in                  ( I_data_in             )  , /// 數據輸入
    .O_data_out                 ( O_data_out            )    /// 數據輸出,從start開始連續輸出,位寬按照最大能力輸出
);






endmodule

使用自加數仿真對數如下:

輸入輸出:

圖片

dsp輸入數據擺放:

圖片

python或者Excel計算的結果:

圖片

使用單音仿真結果如下:

圖片

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

    關注

    1629

    文章

    21736

    瀏覽量

    603431
  • 濾波器
    +關注

    關注

    161

    文章

    7817

    瀏覽量

    178139
  • FIR
    FIR
    +關注

    關注

    4

    文章

    146

    瀏覽量

    33174
  • 仿真設計
    +關注

    關注

    3

    文章

    95

    瀏覽量

    16813
  • 代碼
    +關注

    關注

    30

    文章

    4788

    瀏覽量

    68617
收藏 人收藏

    評論

    相關推薦

    基于FPGA的FIR濾波器設計與實現

    DSPBuilder設計了一個4階FIR濾波器,并用QuartusII進行硬件仿真,仿真結果表明設計FIR
    發表于 08-11 15:32

    fir濾波器的設計和實現

    使用iir濾波器相對fir濾波器可以在使用更小的階數的情況下實現更好的效果。實驗證明,可能20階的iir效果堪比500階左右的fir濾波器
    發表于 12-22 08:29

    FIR濾波器的軟件仿真與硬件實現

    FIR 數字濾波器由于具有諸多優點,因而在數字信號處理中得到了十分廣泛的應用。介紹了MATLAB 環境下FIR 數字濾波器的設計、仿真和基
    發表于 12-16 13:31 ?58次下載

    基于DSP的FIR數字濾波器設計與實現

    分析了FIR數字濾波器的基本原理,在MATLAB環境下利用窗函數設計FIR低通濾波器,實現了FIR低通
    發表于 12-18 15:53 ?101次下載

    什么是fir數字濾波器 什么叫FIR濾波器

    什么是fir數字濾波器 Part 1: Basics1.1 什么是FIR濾波器?FIR 濾波器
    發表于 01-16 09:42 ?1.7w次閱讀

    高效FIR濾波器的設計與仿真-基于FPGA

    高效FIR濾波器的設計與仿真-基于FPGA 摘要:該文在介紹有限沖激響應(FIR)數字濾波器理論及常見實現方法的基礎上,提出了一種基于FP
    發表于 01-16 09:56 ?1664次閱讀
    高效<b class='flag-5'>FIR</b><b class='flag-5'>濾波器</b>的設計與<b class='flag-5'>仿真</b>-基于FPGA

    基于MATLAB與FPGA的FIR濾波器設計與仿真

    數字濾波器是數字信號處理領域內的重要組成部分。FIR濾波器又以其嚴格的線性相位及穩定性高等特性被廣泛應用。本文結合MATLAB工具軟件介紹了FIR數字
    發表于 09-25 11:34 ?120次下載
    基于MATLAB與FPGA的<b class='flag-5'>FIR</b><b class='flag-5'>濾波器</b>設計與<b class='flag-5'>仿真</b>

    fir_濾波器sourc

    fir濾波器的有關資料 fir_濾波器sourc.rar
    發表于 12-14 14:12 ?24次下載

    基于MATLAB的FIR濾波器設計與濾波

    基于MATLAB的FIR濾波器設計與濾波
    發表于 12-14 22:08 ?64次下載

    詳解FIR濾波器和IIR濾波器的區別

    數字濾波器廣泛應用于硬件電路設計,一般分為FIR濾波器和IIR濾波器。那么FIR濾波器和IIR
    發表于 05-03 11:36 ?20次下載

    FIR濾波器的FPGA設計與實現

    ,結合MATLAB軟件提供的專用數字濾波器設計工具包FDATOOL,以及QuartusⅡ軟件提供的FIR核實現快速、便捷的設計FIR濾波器的幾個具體實驗,得出結論證實了熟練使用FDAT
    發表于 12-21 14:53 ?14次下載
    <b class='flag-5'>FIR</b><b class='flag-5'>濾波器</b>的FPGA設計與實現

    FPGA的FIR抽取濾波器設計詳細教程

    文介紹了FIR抽取濾波器的工作原理,重點闡述了用XC2V1000實現FIR抽取濾波器的方法,并給出了仿真波形和設計特點。
    發表于 04-19 11:34 ?2318次閱讀
    FPGA的<b class='flag-5'>FIR</b>抽取<b class='flag-5'>濾波器</b>設計詳細教程

    使用DSP設計和仿真FIR濾波器

    本文檔的主要內容詳細介紹的是使用DSP設計和仿真FIR濾波器包括了:dsp builder profile和基本設計流程和fir的設計過程及注意事項
    發表于 09-01 16:02 ?13次下載
    使用DSP設計和<b class='flag-5'>仿真</b><b class='flag-5'>FIR</b><b class='flag-5'>濾波器</b>

    FIR濾波器和IIR濾波器的區別與聯系

    1.根據沖激響應的不同,將數字濾波器分為有限沖激響應(FIR濾波器和無限沖激響應(IIR)濾波器。對于FIR
    的頭像 發表于 12-30 23:45 ?3888次閱讀

    IIR濾波器FIR濾波器的區別

    數字濾波器是數字信號處理中最常用的一種技術,可以對數字信號進行濾波、降噪、增強等處理,其中最常見的兩種數字濾波器是IIR濾波器FIR
    的頭像 發表于 06-03 10:21 ?1.9w次閱讀
    主站蜘蛛池模板: 欧美1819| 婷婷久月| 国产h视频在线观看网站免费| 亚洲毛片基地4455ww| 91操视频| 国产成人精品日本亚洲语音1| 一个色中文字幕| 68日本xxxxxxxxx18能看的| 性做久久久久久久免费看| 色丁香影院| 看免费黄色大片| 痴女在线播放免费视频| 午夜影院网页| 黄a大片| 男人午夜视频在线观看| 绝色村妇的泛滥春情| 五月婷婷六月综合| 欧美片欧美日韩国产综合片| 韩国a级床戏大尺度在线观看| 丁香花高清在线观看| 福利在线观看| 欧洲亚洲一区| 色偷偷狠狠色综合网| 免费爱爱网| 亚洲禁片| 福利久久| 天天看爽片| 老色视频| 国产成人午夜精品影院游乐网| 亚1州区2区3区4区产品乱码| bt天堂网在线资源www| 久久99精品国产麻豆宅宅| 亚洲国产福利精品一区二区| 天堂影| 午夜影院免费在线观看| 男女视频在线观看免费高清观看| 手机在线黄色网址| a毛片基地免费全部香蕉| 黄色成人免费网站| 天天摸日日摸| 天天干 夜夜操|