基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation

这篇具有很好参考价值的文章主要介绍了基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于FPGA的FIR低通滤波器实现(附工程源码)



前言

本文为FPGA实现FIR滤波器仿真过程,附源代码。


提示:以下是本篇文章正文内容,下面案例可供参考

一、matlab设计FIR滤波器,生成正弦波

1.设计FIR滤波器

打开MATLAB在命令行窗口输入:
fadtool
回车后在滤波器设计界面设置滤波器参数如下
基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation,fpga开发,matlab,开发语言
之后点击如图标志,设置定点,在菜单栏"目标(R)"出选择生成对应滤波器系数.COE文件
基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation,fpga开发,matlab,开发语言

1.生成正弦波.coe

matlab代码如下

width=8;    %rom的位宽
depth=1024; %rom的深度
x=linspace(0,2*pi,depth);   %在一个周期内产生1024个采样点
y_sin=sin(x);    %生成余弦数据
y_sin=round(y_sin*(2^(width-1)-1))+2^(width-1)-1;   %将余弦数据全部转换为整数

fid=fopen('C:\Users\lys\Desktop\fir\sin.coe','w');   %创建.coe文件
fprintf(fid,'%d,\n',y_sin);   %向.coe文件中写入数据
fclose(fid);   %关闭.coe文件

二、vivado

1.fir滤波器IP核

设置参数如下:
基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation,fpga开发,matlab,开发语言
基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation,fpga开发,matlab,开发语言
基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation,fpga开发,matlab,开发语言

2.正弦波生成IP核

参数设置如下:
基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation,fpga开发,matlab,开发语言
基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation,fpga开发,matlab,开发语言
基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation,fpga开发,matlab,开发语言

3.时钟IP核设置

参数设置如下:
基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation,fpga开发,matlab,开发语言
基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation,fpga开发,matlab,开发语言

4.顶层文件/测试文件代码

`timescale 1ns / 1ps

module fir_top(
    input clk,
    input rst_n,
    input [1:0]rom_sel,
    output [7:0]douta,
    output [7:0]fir_out_data
    );

    wire clk_10m;
    wire clk_1;
    wire clk_2;
    wire clk_3;
   
//    clk_wiz_0 instance_name(
//        .clk_out1(clk_1),     // output clk_out1
//        .clk_out2(clk_2),
//        .clk_out3(clk_3),
//        .clk_out4(clk_10m),
//        .reset(rst_n), // input resetn
//        .locked(),       // output locked
//        .clk_in1(clk)
//    );      // input clk_in1
    
  clk_wiz_0 instance_name
   (
    // Clock out ports
    .clk_out1(clk_1),     // output clk_out1
    .clk_out2(clk_2),     // output clk_out2
    .clk_out3(clk_3),     // output clk_out3
    .clk_out4(clk_10m),     // output clk_out4
    // Status and control signals
    .resetn(rst_n), // input reset
    .locked(),       // output locked
   // Clock in ports
    .clk_in1(clk));      // input clk_in1
    
    wire clk_rom;
    assign clk_rom = (rom_sel == 0)?clk_1:((rom_sel == 1)?clk_2:clk_3);
    
    reg [9:0]addra;
    always@(posedge clk_rom or negedge rst_n)begin
        if(!rst_n)
            addra <= 'd0;
        else
            addra <= addra + 1'b1;
    end
    
      
    rom_fir rom_inst (
        .clka(clk_rom),    // input wire clka
        .ena(1'b1),      // input wire ena
        .addra(addra),  // input wire [9 : 0] addra
        .douta(douta)  // output wire [7 : 0] douta
    );

    wire [7:0]fir_in_data;
    assign fir_in_data = douta - 'd128;

    fir fir_inst (
        .aclk(clk),                              // input wire aclk
        .s_axis_data_tvalid(clk_10m),  // input wire s_axis_data_tvalid
        .s_axis_data_tready(),  // output wire s_axis_data_tready
        .s_axis_data_tdata(fir_in_data),    // input wire [7 : 0] s_axis_data_tdata
        .m_axis_data_tvalid(),  // output wire m_axis_data_tvalid
        .m_axis_data_tdata(fir_out_data)    // output wire [7 : 0] m_axis_data_tdata
    );

endmodule

`timescale 1ns / 1ps

module fir_top_tb;

    reg clk;
    reg rst_n;
    reg [1:0]rom_sel;
    wire [7:0]douta;
    wire [7:0]fir_out_data;
    
    fir_top fir_top_inst(
        .clk    (clk),
        .rst_n  (rst_n),
        .rom_sel(rom_sel),
        .douta  (douta),
        .fir_out_data(fir_out_data)
    );
    
    initial clk = 0;
    always#10 clk = ~clk;
    
    initial begin
        rst_n = 0;
        rom_sel = 0;
        #200;
        rst_n = 1'b1;
        #200000;
        rom_sel = 1;
        #200000;
        rom_sel = 2;
        #200000;
        $stop;
    end
    
endmodule

三.simulation

只为测试功能,未考虑滤波器性能,所以效果不佳,结果实现如下
基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation,fpga开发,matlab,开发语言

四.源代码

https://download.csdn.net/download/qq_42761380/88243346文章来源地址https://www.toymoban.com/news/detail-674743.html

到了这里,关于基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FIR滤波器的FPGA实现【IP核实现版】

    本文使用FPGA来实现FIR滤波器设计,设计中使用的DDS、乘法器与FIR滤波器均采用IP core进行实现,实现效果是将3MHz和4MHz的正弦信号混频后使用FIR低通滤波器滤除7MHz信号得到1MHz的信号。 首先用两个DDS核生成3MHz以及4MHz的正弦波信号。 注意:此处的dds的命名要和代码中对应,系统

    2024年02月04日
    浏览(37)
  • FIR内插滤波器的FPGA实现(一)-matlab实现

    FIR内插滤波器是一种基本的插值方法,主要有两个步骤: 1)在输入的每一个初始采样中间插入L个零点; 2)插零后的数据经过低通滤波器。 运行结果如图(时域、频域): 我们的目标是把采样频率提升五十倍。 得到的频域图: 可以看出内插零点在频域会实现频谱扩展,因此

    2024年02月03日
    浏览(37)
  • 基于FPGA的FIR数字滤波器设计(quartus和vivado程序都有)。

    基于FPGA的FIR数字滤波器设计(quartus和vivado程序都有)。 附: 1.配套quartus从MATLAB系数生成直到仿真成功说明文档。 2.配套仿真出波形(图1)的视频。      

    2024年02月10日
    浏览(37)
  • 解析使用FPGA逻辑实现FIR滤波器的几种架构

    有限脉冲响应(finite impulse response,FIR)数字滤波器         FIR滤波器的实质就是输入序列与系统脉冲响应的卷积,即:         其中,N为滤波器的阶数,也即抽头数;x(n)为第n个输入序列;h(n)为FIR滤波器的第n级抽头系数。         FIR滤波器基本结构如下:      

    2024年02月08日
    浏览(28)
  • 数字信号处理-10-并行FIR滤波器MATLAB与FPGA实现

    本文介绍了设计滤波器的FPGA实现步骤,并结合杜勇老师的书籍中的并行FIR滤波器部分进行一步步实现硬件设计,对书中的架构做了复现以及解读,并进行了仿真验证。 FIR滤波器的结构形式时,介绍了直接型、级联型、频率取样型和快速卷积型4种。在FPGA实现时,最常用的是最

    2023年04月09日
    浏览(35)
  • FPGA 的数字信号处理:Verilog 实现简单的 FIR 滤波器

    该项目介绍了如何使用 Verilog 实现具有预生成系数的简单 FIR 滤波器。 不起眼的 FIR 滤波器是 FPGA 数字信号处理中最基本的模块之一,因此了解如何将具有给定抽头数及其相应系数值的基本模块组合在一起非常重要。因此,在这个关于 FPGA 上 DSP 基础实用入门的教程中,将从一

    2024年02月09日
    浏览(36)
  • FIR滤波器简述及FPGA仿真验证

    数字滤波器的设计,本项目做的数字滤波器准确来说是FIR滤波器。 FIR滤波器(有限冲激响应滤波器),与另一种基本类型的数字滤波器——IIR滤波器(无限冲击响应滤波器)相对应,其实就是将所输入的信号都看成是离散的,用离散的冲击信号代替实际的信号。对于FIR滤波器

    2024年02月09日
    浏览(33)
  • FPGA 的 DSP:Verilog 中的简单 FIR 滤波器

    本项目介绍如何用 Verilog 实现一个带有预生成系数的简单 FIR 滤波器。 简陋的 FIR 滤波器是 FPGA 数字信号处理中最基本的构建模块之一,因此了解如何利用给定的抽头数和相应的系数值组装一个基本模块非常重要。因此,在这个关于在 FPGA 上入门 DSP 基础知识的实用方法迷你系

    2024年03月17日
    浏览(31)
  • 图像处理之理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器的matlab实现去噪

    一、前言 在一幅图像中, 低频部分对应图像变化缓慢的部分即图像大致外观和轮廓。高频部分对应图像变换剧烈的部分即图像细节(注意图像的噪声属于高频部分) 。 低通滤波器的功能是让低频率通过而滤掉或衰减高频,其作用是过滤掉包含在高频中的噪声。即 低通滤波的效

    2023年04月09日
    浏览(32)
  • python实现陷波滤波器、低通滤波器、高斯滤波器、巴特沃斯滤波器

    在一幅图像中,其低频成分对应者图像变化缓慢的部分,对应着图像大致的相貌和轮廓,而其高频成分则对应着图像变化剧烈的部分,对应着图像的细节(图像的噪声也属于高频成分)。 低频滤波器,顾名思义,就是过滤掉或者大幅度衰减图像的高频成分,让图像的低频成分

    2024年02月11日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包