FIR仿真教程__Altera FIR
乘着前面写了一个FFT的操作教程,那么趁热把自己做的FIR也顺便写个教程回顾一下,方便以后使用,因为上家公司使用的是Altera的器件,同样这次仿真也就使用Altera 的IP直接进行演示,后期有时间再弄弄Xilinx的。O(∩_∩)O~
1 FIR的原理
FIR滤波器广泛应用于数字信号处理中,主要功能就是选择性的留下有用信号,剔除不必要的信号滤除。FIR滤波器是全零点结构,系统永远稳定;并且具有线性相位的特征,在有效频率范围内所有信号相位上不失真。在无线通信收发机中的DDC/DUC模块,抽取和内插都需要加入滤波器以防止信号在频谱上混叠,最典型的是采用FIR滤波器实现半带滤波器。
FIR滤波处理如下式所示,其中x(n)为输入信号,h(n)为FIR滤波系数,y(n)为经过滤波后的信号;N表示FIR滤波器的抽头数,滤波器阶数为N-1。
由上式可得到FIR滤波器在FPGA中的实现结构,如图1所示,主要由延迟单元Z-1、乘法器和累加器组成。此结构为直接型FIR滤波器结构,也称横向结构(transverse)。
比较细致的FIR 滤波器原理当然大家可以自己搜索学习,以及怎么用在自己的实际项目中。
2 FIR ip配置
新建工程及ip这个就不说了,想必大家都清楚,我们直接对ip核参数进行配置
2.1 参数设置如下
因不涉及实际的项目使用,只是单纯的进行操作演示,所以所有参数均采用默认配置,实际使用中根据自己的项目进行相应的配置就好。
2.2 生成仿真模型
2.3 生成文件
当出现红色区域标志的信息是表示IP 配置完成,接下来可以进行仿真了。
3 FIR ip仿真
3.1 Matlab实现
Matlab文件包括fir_mlab.m,fir_model.m两个文件,fir_mlab.m为函数实现文件,
fft_model.m调用fir_mlab.m函数。
对于不熟悉matlab的可以通过下面的图区分,一般函数文件它上面都带个fx
仿真步骤是:
1) 双击fft_model.m,在代码编辑窗口Editor可以查看文件源码,
2) 点击RUN,运行fft_model.m,在文件目录一个txt文件,这就是通过matlab生成的FIR结果文件
fir_model_output.txt
对应matlab源码中的
% Write data out to file
file_name = ['fir_model_output'];
outfile1 = fopen([file_name, '.txt'],'w');
fprintf(outfile1, '%d\n', reshaped_output);
另外为了直观的查看滤波效果,我们在fft_model.m文件中添加如下代码,
效果图如图所示,我们最后可以与modelsim仿真的效果图进行对比查看一下
3.2 modelsim仿真
新建一个Project,直接命名为fir好了,但是Project Location需要放在fir的生成目录,不然很多文件会找不到的,造成的一堆麻烦我可不负责哦,O(∩_∩)O~
添加下图的文件,
添加好以后进行Compile Out_of_Date,编译完成后仿真,记得把该添加的库添加进去啊,
注意,我的modelsim已经编译过altera的仿真库,所以可以直接添加,没有编译过的自行百度如何编译altera库,以及注意编译后的库位置,再次进行仿真,提示
大意就是1ps的仿真精度是小于一个选择的SystemC 或者 VHDL设计单元的精度的, 在仿真的时候将default值修改为合适的值就可以
. 将对应的波形添加进行观察,仿真结果如下
我们将仿真结果与matlab输出的数据文件比较一下看看,可以通过波形数据和matlab输出的数据比较,当然也可以直接查看输出的数据文件
fir_model_output(matlab输出的数据文件)
fir_output(modelsim输出的数据文件)
测试数据结果一致,关于fir滤波器的仿真就简单的操作了一下,希望能对从事这方面的同行有所帮助,如有不当的地方还请大家多包涵,不吝赐教,谢谢\(^o^)/~
明天就中秋了,祝大家中秋节快乐!!!O(∩_∩)O哈哈~
By 卖红薯的小孩
2016/9/14 晚于杭州