MATLAB+VIVADO设计FIR滤波器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

 

文章目录

  • 前言
  • 一、滤波器系数的生成
  • 二、FPGA的实现
    • 1.FIR滤波器IP核
    • 2.导入参数
  • 总结

 


前言

        数字信号处理中需要用到FIR滤波器进行一些滤波处理或加窗,XILINX 7系列的FPGA,在vivado下通常使用IP核生成可使用的滤波器,下面介绍配置方法。

一、滤波器系数的生成

首先在matlab的APP中找到filter designer或在命令行里输入: fdatool 

弹出界面如下:

MATLAB+VIVADO设计FIR滤波器_第1张图片

其中Fs为采样率,滤波器有效频率范围为Fs/2, 下面的值不能超出这个范围,另外注意Specify order的值,这里是数字滤波器阶数,阶数越高其复杂度越高滤波器带内越平滑,具体取值取多少应在工程中取舍,在类型中选择需要的滤波器类型,依次为低通、高通、带通、带阻,这里设计一个带通滤波器。

MATLAB+VIVADO设计FIR滤波器_第2张图片

选择带通后,在Frequency Specifications里,先确定采样率,这里选择50MSPS的采样率,设计一个中心频率为10MHz,带宽为5MHz的滤波器,设置通带阻带后点击Design Filter,通带与阻带设置如图:

MATLAB+VIVADO设计FIR滤波器_第3张图片

Analysis工具栏中,可以看频响以外的其他特性,读者可以自己尝试。

此时,我们打开File-Expore,进入如下画面:

MATLAB+VIVADO设计FIR滤波器_第4张图片

保持默认值点击Export。(注意,如果Workspace中已经存在Num变量请先备份删除,否则会报错)

滤波器参数会保存在工作区中的Num变量中

MATLAB+VIVADO设计FIR滤波器_第5张图片

MATLAB+VIVADO设计FIR滤波器_第6张图片

二、FPGA中的实现

1.FIR滤波器IP核

在IP Catalog中搜索FIR,找到FIR滤波器的IP核, 

MATLAB+VIVADO设计FIR滤波器_第7张图片

打开后的界面如下:

MATLAB+VIVADO设计FIR滤波器_第8张图片

这里有两种方法导入滤波器参数,在Select Source中,Vector对应手动输入滤波器参数,选择COE file即使用读取COE文件的方式初始化参数(文件内数值必须是整形)。

MATLAB+VIVADO设计FIR滤波器_第9张图片

滤波器的其他参数根据工程中的使用需要读者自己完成定义,需要定义的主要是通道数、时钟、采样率以及滤波器类型等,采样率需要与matlab中设置的严格一致。

2.导入参数

导入参数时,无论浮点型还是整形,FPGA都只接收量化后的参数,不接受浮点型运算,因此需要先将matlab中的参数量化后加入IP核中。

导入参数如前文所述有两种方法,首先讨论直接导入数据:

在命令行中输入:

coeff = round(Num/max(abs(Num))*(2^15));
fid=fopen('e:/fir_num.txt','wt');
fprintf(fid,'%16.0f,',coeff);
fclose(fid);

打开文件可以看到量化后的数据,复制粘贴到Coefficient Vector中即可,需要注意最后一个数后的逗号要去掉。

MATLAB+VIVADO设计FIR滤波器_第10张图片

MATLAB+VIVADO设计FIR滤波器_第11张图片

左图中可以看到我们设计的滤波器。

 

另一种方法是使用COE文件,matlab是可以直接生成的,但是必须要整型量化数据,因此直接生成会报错。

上一种做法结束后生成了一个.txt文件,我们修改这个文件,在开头加上下面这段:

radix=10;
Coefficient_Width = 14;
coefdata=

然后将文末的逗号改成分号(虽然不改也无所谓的样子),再将尾缀改为.coe,在IP核中将其导入:MATLAB+VIVADO设计FIR滤波器_第12张图片

至此,就完成了FIR滤波器的IP设计,这种方式更适合于商业代码与IP的备份。

 


总结

本文主要用于记录Matlab-VIVADO的FPGA FIR滤波器设计。

你可能感兴趣的:(fpga,matlab)