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

这篇具有很好参考价值的文章主要介绍了FIR滤波器的FPGA实现【IP核实现版】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文使用FPGA来实现FIR滤波器设计,设计中使用的DDS、乘法器与FIR滤波器均采用IP core进行实现,实现效果是将3MHz和4MHz的正弦信号混频后使用FIR低通滤波器滤除7MHz信号得到1MHz的信号。

DDS产生正弦信号

首先用两个DDS核生成3MHz以及4MHz的正弦波信号。

注意:此处的dds的命名要和代码中对应,系统时钟为50MHz。需要两个核,此处只例举dds1的实现,dds2的实现类似。

fpga低通滤波器设计ip核,数字信号处理,fpga开发,信号处理

选择正弦信号,取消相位选项。

fpga低通滤波器设计ip核,数字信号处理,fpga开发,信号处理

输出频率选择3MHz,另外一个核选择4MHz。

fpga低通滤波器设计ip核,数字信号处理,fpga开发,信号处理

乘法器混频

由于DDS输出的正弦是8bit信号,此处选择8。

fpga低通滤波器设计ip核,数字信号处理,fpga开发,信号处理

FIR滤波器

抽头系数的获取

其中的抽头系数使用filter solutions进行滤波器设计获取抽头系数。

在软件中根据自己的需求设置,最后点击箭头处的理想频率响应和综合滤波器生成频响图和抽头系数:

fpga低通滤波器设计ip核,数字信号处理,fpga开发,信号处理

幅频响应:

fpga低通滤波器设计ip核,数字信号处理,fpga开发,信号处理

抽头系数:

fpga低通滤波器设计ip核,数字信号处理,fpga开发,信号处理

抽头系数:

NUM = [-0.001304, -0.001178, -0.001023, -0.000514, 0.000759, 0.003221, 0.00724, 0.01305, 0.02067, 0.02991, 0.04031, 0.05121, 0.06181, 0.07124, 0.07866, 0.08342, 0.08506, 0.08342, 0.07866, 0.07124, 0.06181, 0.05121, 0.04031, 0.02991, 0.02067, 0.01305, 0.00724, 0.003221, 0.000759, -0.000514, -0.001023, -0.001178, -0.001304]

粘贴上抽头系数:

fpga低通滤波器设计ip核,数字信号处理,fpga开发,信号处理

FIR滤波器Verilog代码

例化前面生成的IP核。

module  dds_fir(
	input	wire	clk,			//系统时钟(此处为50MHz)
	
	output	wire	[7:0]	sin1,	//DDS正弦信号1(此处为3MHz)
	output	wire	[7:0]	sin2,	//DDS正弦信号2(此处为4MHz)
	output	wire	[15:0]	P,		//sin1*sin2得到的混频信号(此处为1MHz和7MHz)
	output	wire	[39:0]	P_OUT	//FIR滤波后得到的信号
	
);

dds1 dds1_inst (
  .aclk(clk),                              // input wire aclk
  .m_axis_data_tvalid(m_axis_data_tvalid),  // output wire m_axis_data_tvalid
  .m_axis_data_tdata(sin1)    // output wire [7 : 0] m_axis_data_tdata
);

dds2 dds2_inst (
  .aclk(clk),                              // input wire aclk
  .m_axis_data_tvalid(m_axis_data_tvalid),  // output wire m_axis_data_tvalid
  .m_axis_data_tdata(sin2)    // output wire [7 : 0] m_axis_data_tdata
);

mult mult_inst (
  .CLK(clk),  // input wire CLK
  .A(sin1),      // input wire [7 : 0] A
  .B(sin2),      // input wire [7 : 0] B
  .P(P)      // output wire [15 : 0] P
);

fir fir_inst (
  .aclk(clk),                              // input wire aclk
  .s_axis_data_tvalid(m_axis_data_tvalid),  // input wire s_axis_data_tvalid
  .s_axis_data_tready(s_axis_data_tready),  // output wire s_axis_data_tready
  .s_axis_data_tdata(P),    // input wire [15 : 0] s_axis_data_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid1),  // output wire m_axis_data_tvalid
  .m_axis_data_tdata(P_OUT)    // output wire [39 : 0] m_axis_data_tdata
  
);

endmodule

其中将两正弦信号相乘,实际上是利用积化和差公式得到两频率的相加。

fpga低通滤波器设计ip核,数字信号处理,fpga开发,信号处理

testbench代码

主要产生50MHz时钟即可。

module tb_dds_fir ();

reg	clk = 0;
	
wire	[7:0]	sin1;
wire	[7:0]	sin2;
wire	[15:0]	P;
wire	[39:0]	P_OUT;

always #10 clk <= ~ clk ;	//产生50MHz时钟

dds_fir	dds_fir_inst(
	.clk(clk),
	
	.sin1(sin1),
	.sin2(sin2),
    .P(P),	//混频信号
    .P_OUT(P_OUT)	//滤波信号
	
);

endmodule

仿真效果

可以看出,P信号中的7MHz成分信号被滤除,得到1MHz的P_OUT信号,实现了滤波功能。

fpga低通滤波器设计ip核,数字信号处理,fpga开发,信号处理

参考内容

基于FPGA的FIR滤波器,手把手带你实现文章来源地址https://www.toymoban.com/news/detail-767145.html

到了这里,关于FIR滤波器的FPGA实现【IP核实现版】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 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)
  • 用C语言实现一个FIR低通滤波器算法

    +v hezkz17进数字音频系统研究开发交流答疑    以下是一个基于C语言的FIR低通滤波器算法的实现: #include stdio.h #include stdlib.h #define N 5     // 滤波器长度 #define M 100   // 输入数据长度 double h[N] = {0.2, 0.3, 0.4, 0.1, 0.0};  // 滤波器系数 int main() {     double x[M], y[M];     // 生成输入信

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

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

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

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

    2024年03月17日
    浏览(31)
  • Xilinx FIR IP核设计滤波器

    使用matlab工具,根据具体需求设计出滤波器系数; 打开fir ip导入滤波器系数即可; 打开matlab使用fdatool工具,填入相应的参数生成系数; Fs=250; Fpass=50; Fstop=70; Apass=0.01; Astop=80; 将滤波器系数设置为定点数输出; 导出滤波器系数,生成coe文件; Select source:选择为coe文件

    2024年02月05日
    浏览(29)
  • Xilinx的FIR滤波器IP的设计与仿真

    平台:Vivado2021.1 芯片:xcku115-flva1517-2-i (active) 语言:VerilogHDL 参考文件:pg149.下载地址 FIR Compiler LogiCORE IP Product Guide • FIR Compiler (PG149) • 阅读器 • AMD 自适应计算文档门户 (xilinx.com) FIR滤波器 最近准备研究以下滤波器。还是从xilinx的官方IP出发,来学习以下这部分。 使用

    2024年01月21日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包