提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
数字信号处理中需要用到FIR滤波器进行一些滤波处理或加窗,XILINX 7系列的FPGA,在vivado下通常使用IP核生成可使用的滤波器,下面介绍配置方法。
首先在matlab的APP中找到filter designer或在命令行里输入: fdatool
弹出界面如下:
其中Fs为采样率,滤波器有效频率范围为Fs/2, 下面的值不能超出这个范围,另外注意Specify order的值,这里是数字滤波器阶数,阶数越高其复杂度越高滤波器带内越平滑,具体取值取多少应在工程中取舍,在类型中选择需要的滤波器类型,依次为低通、高通、带通、带阻,这里设计一个带通滤波器。
选择带通后,在Frequency Specifications里,先确定采样率,这里选择50MSPS的采样率,设计一个中心频率为10MHz,带宽为5MHz的滤波器,设置通带阻带后点击Design Filter,通带与阻带设置如图:
Analysis工具栏中,可以看频响以外的其他特性,读者可以自己尝试。
此时,我们打开File-Expore,进入如下画面:
保持默认值点击Export。(注意,如果Workspace中已经存在Num变量请先备份删除,否则会报错)
滤波器参数会保存在工作区中的Num变量中
在IP Catalog中搜索FIR,找到FIR滤波器的IP核,
打开后的界面如下:
这里有两种方法导入滤波器参数,在Select Source中,Vector对应手动输入滤波器参数,选择COE file即使用读取COE文件的方式初始化参数(文件内数值必须是整形)。
滤波器的其他参数根据工程中的使用需要读者自己完成定义,需要定义的主要是通道数、时钟、采样率以及滤波器类型等,采样率需要与matlab中设置的严格一致。
导入参数时,无论浮点型还是整形,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中即可,需要注意最后一个数后的逗号要去掉。
左图中可以看到我们设计的滤波器。
另一种方法是使用COE文件,matlab是可以直接生成的,但是必须要整型量化数据,因此直接生成会报错。
上一种做法结束后生成了一个.txt文件,我们修改这个文件,在开头加上下面这段:
radix=10;
Coefficient_Width = 14;
coefdata=
然后将文末的逗号改成分号(虽然不改也无所谓的样子),再将尾缀改为.coe,在IP核中将其导入:
至此,就完成了FIR滤波器的IP设计,这种方式更适合于商业代码与IP的备份。
本文主要用于记录Matlab-VIVADO的FPGA FIR滤波器设计。