FFT仿真教程(一)__Altera FFT
FFT仿真教程(一)__Altera FFT
去年自己做过一个FFT的项目,自己写了一个FFT,因最近朋友询问关于FFT的一些东西,为了能给相关开发的工程师带来一些参考,写下此教程,因涉密原因,此教程直接使用官方的IP进行仿真测试 。
1 FFT的原理
因原理部分公式误码,因此删除了该部分,关于傅里叶变换的原理在网络上能搜到
一大堆,也就不再详细解释。
2 FFT ip配置
新建工程及ip这个就不说了,想必大家都清楚,我们直接对ip核参数进行配置
2.1 参数设置如下
2.2 生成仿真模型
2.3 生成文件
3 FFT ip仿真
3.1 Matlab实现
Matlab文件包括fft_tb.m,fft_model.m两个文件,fft_model.m为函数实现文件,
fft_tb.m调用fft_model.m函数。
仿真步骤是:
1) 双击fft_tb.m,在代码编辑窗口Editor可以查看文件源码,
2) 点击RUN,运行fft_tb.m,在文件目录下生成了3个文件,分别为
fft_real_output_c_model.txt
fft_imag_output_c_model.txt
fft_exponent_out_c_model.txt
对应matlab源码中的
fidro = fopen('fft_real_output_c_model.txt','w');
fidio = fopen('fft_imag_output_c_model.txt','w');
fideo = fopen('fft_exponent_out_c_model.txt','w');
fprintf(fidro,'%d\n',real(y));
fprintf(fidio,'%d\n',imag(y));
fprintf(fideo,'%d\n',exp_out);
3.2 modelsim仿真
新建一个Project,因设置的是256点的,直接命名为fft256好了,当然名称可以随便取,你开心就好,但是Project Location需要放在FFT的生成目录,不然很多文件会找不到的,造成的一堆麻烦我可不负责哦,O(∩_∩)O~
添加下图的文件,
添加好以后进行Compile Out_of_Date,编译完成后仿真,会出现啥,一堆的错误,骚年,心急吃不了热豆腐,把该添加的库添加进去啊,
注意,我的modelsim已经编译过altera的仿真库,所以可以直接添加,没有编译过的自行百度如何编译altera库,以及注意编译后的库位置,再次进行仿真,提示
没关系,有错就找出问题嘛,大意就是1ps的仿真精度是小于一个选择的SystemC 或者 VHDL设计单元的精度的,怎么办,使用vsim –t 来修改啊,不会用???使用vsim -help来看看啊,
现在知道了吧,那就设置为 vsim –t 1ns好了,
提示没有指定仿真设计文件,那就将该添加的库文件添加后重新仿真下,添加好对应的波形后,就让我们愉快的restart –f然后run 一下吧,等待波形的出现^_^
为了按照有符号的形式显示,信号名右击选择Radix -- Decimal即可,当然你也可以这样看
是不是觉得modelsim很强大啊
我们将仿真结果与matlab输出的数据文件比较一下看看,会是什么结果呢,Bingo,回答正确,当然是结果一致了,神马,你的不一样,那你就查查你的哪一步出错了啊!!!
.
花费了两晚上的时间,总算写好了,希望能对从事这方面的同行有所帮助,如有不当的地方还请大家多包涵,不吝赐教,谢谢\(^o^)/~
参考资料推荐:
1、《傅立叶详细推导_看了绝对懂》
2、圈圈的《FFT结果的物理意义》,写的非常不错
By 卖红薯的小孩
2016/9/9 晚