Xilinx中FIR滤波器IP的讲解与使用

项目简述

上一篇论文中,我们已经讲解了DDS的IP与混频的实现。本篇论文我们将接着上篇文章接着做,在混频之后的信号进行滤波处理。数字滤波器主要有FIR、IIR两种滤波器,但在FPGA中几乎看不到使用IIR滤波器,因为IIR滤波器存在的有限字长效应经反馈后会使得系统不稳定。当然IIR滤波器也有优点,相比同样的频率响应,IIR滤波器的阶数要远小于FIR滤波器。其中因为FIR滤波器的稳定性得到了广泛使用,所以我们主要讲解FIR滤波器。在后面的文章中,我们会手写滤波器代码,并且学习现在信号处理中最重要的内容——自适应信号处理。我们按照循序渐进的步骤,先讲解FIR滤波器IP的使用。

FIR IP的定制及讲解

我们定制FIR滤波器的IP核,必须知道响应的FIR系数的相关信息。这里给同学们提供两种方法:一是使用MATLAB,MATLAB中由专门的库供我们设计‘满足我们要求的函数;二是使用小软件Filter Solutions(随工程一起放入群中,需要的进群自取),使用该工具可以更加方便的设计出来滤波器。由于第二种简单,我们这里以第二种为例。

我们上一篇文章的混频是8MHz与5MHz的相乘,所以我们这篇文章的目的是设计一个低通滤波器滤除13MHz的成分。FIR的设计方法在数字信号处理中有两种方法,最常用的就是窗函数法。这里我们将使用汉明窗进行进一步的设计。整个小软件进行如下的配置:
在这里插入图片描述
1、设计滤波器的阶数,我们这里选择了64阶
2、设置低通滤波器的通带频率是8MHz
3、设置采样频率是100MHz
4、使用FIR滤波器
5、点击Frequency Resp观察幅频与相频响应,如下图:
在这里插入图片描述
点击Synthesize Filter,再点击其中的vec,如下图:
在这里插入图片描述
点击Copy Num/Den复制出相应的系数填入FIR IP的定制界面。
在这里插入图片描述
进入Xilinx的FIR IP订制界面,我们可以发现上述界面,其中对我们需要特别关注的配置具体说明一下:
1、我们这里选择系数向量,是指我们直接再IP的定制界面输入相应的滤波器系数。
2、我们将滤波器的系数输入到2中,注意这里可以是小数。
3、这里我们选择典型的单倍速率滤波器就可以。
在这里插入图片描述
这里我们选择FIR滤波器的抽样频率与参考频率都是100MHz,也就是说整个滤波器是全流水线结构。
在这里插入图片描述shu
1、这里选择滤波器系数整数部分的量化位宽。
2、在这里输入滤波器系数小数部分量化的位宽
3、这里对我们输入数据进行描述,我们这里使用有符号数、整数、位宽为16位、全精度类型,设置如3,4,5所示。
IP定制界面其余选择默认即可,想具体了解其中配置所代表的意义,可以查阅一下技术手册。
配置完成之后,我们查看一下滤波器的幅频响应与输入输出数据的位数关系,如下:
在这里插入图片描述
在这里插入图片描述

Block Design的设计

我们紧接着上一章我们设计的混频的工程继续设计该项目的block design,如下图:
在这里插入图片描述
上面便是这次实验的block design,我们除了测试模块没有写一句代码。上面的功能主要是把5MHz与8MHz的正弦波进行混频,然后再进行低通滤波,将其中3MHz分量的正弦波滤除出来。

测试模块的代码

我们为了验证我们工程的正确性,对我们搭建的block design进行书写测试模块的代码,如下:

`timescale 1ns / 1ps
// *********************************************************************************
// Project Name : OSXXXX
// Author       : zhangningning
// Email        : [email protected]
// Website      : 
// Module Name  : tb.v
// Create Time  : 2020-04-04 15:35:56
// Editor       : sublime text3, tab size (4)
// CopyRight(c) : All Rights Reserved
//
// *********************************************************************************
// Modification History:
// Date             By              Version                 Change Description
// -----------------------------------------------------------------------
// XXXX       zhangningning          1.0                        Original
//  
// *********************************************************************************

module tb;

wire        [15:0]      P                   ;
reg                     aclk                ;
wire        [39:0]      M_AXIS_DATA_tdata   ;
wire                    M_AXIS_DATA_tvalid  ;

initial begin
    aclk            =               1'b0;
end
always  #5      aclk            =           ~aclk;

system_wrapper system_wrapper_inst(
    .M_AXIS_DATA_tdata                  (M_AXIS_DATA_tdata                  ),
    .M_AXIS_DATA_tvalid                 (M_AXIS_DATA_tvalid                 ),
    .aclk                               (aclk                               )
);
endmodule

仿真测试结果

我们将上面的实验进行Modelsim仿真,仿真的测试结果如下:
在这里插入图片描述
从上面的图形中可以看出,我们从上面的波形可以看出来我们成功将13MHz的正弦波滤除掉,只剩下3MHz的正弦波分量。

总结

创作不易,认为文章有帮助的同学们可以关注、点赞、转发支持。(txt文件、图片文件在群中)对文章有什么看法或者需要更近一步交流的同学,可以加入下面的群:
在这里插入图片描述

发布了55 篇原创文章 · 获赞 38 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/zhangningning1996/article/details/105308963
今日推荐