凡亿教育-江江
凡事用心,一起进步
打开APP
公司名片
凡亿专栏 | 基于matlab FPGA verilog的FIR滤波器设计
基于matlab FPGA verilog的FIR滤波器设计

今天和大侠简单聊一聊基于matlab FPGA verilog的FIR滤波器设计,话不多说,上货。

7baa114abee76699c578bd69cd8820.jpg

本次设计实现8阶滤波器,9个系数,由于系数的对称性,h(0)=h(8),h1(1)=h(7),h(2)=h(6),h(3)=h(5),h(4)为中间单独一个系数。根据公式:

39f7694f004b146df85c9367bf9fe9.jpg


实现框图:

4adb48f16043a6b28a735ddf7fe204.jpg

0888f4d003ea7d85b25c0e0a533556.jpg


推导出当系数N为偶数时,例如N=4:y(n)=h(0)*{x(0) x(n-3)} h(1)*{x(n-1) x(n-2)}
当系数N为奇数时,例如N=5:
y(n)=h(0)*{x(0) x(n-1)} h(1)*{x(n-1) x(n-3)} h(2)*x(n-2)

1、用matlab生成和量化滤波器系数

791d3eb512718b7a8b9c8f82f5b261.jpg


设置参数后,点击“Design Filter”按钮,“file”—“export”,把滤波器系数导出到workspace,如下图:

1020bd4603f95d423c903c41dc7f99.jpg

执行命令:Num=Num’ ,把滤波器系数拷贝到文件COFFICIENT.dat中。
量化系数:在matlab中运行quantization.m

2、说明
用matlab程序sin_1MHz_gen.m生成正弦波波形表,改变变量f0 = 1.5e6可以生成不同频率的波形。把第一个周期的波形数据存入signal_1m.dat文件中,存入的数据个数为Fs/Fo的最小正整数之比的分子,比如Fs=25MHz,Fo=0.3MHz,Fs/Fo=250/3(Fs=25/24MHz),则存入文件signal_1m.dat的波形数据个数为开头的250个数据。相应的signal_gen0.v中的语句if(i0<50)相应的改为if(i0<250)。仿真时signal_1m.dat放在仿真目录下

3、滤波器的multisim仿真
运行matlab,用sin_1MHz_gen.m产生5MHz(f0 =5e6)正弦波信号,Fs/Fo=5,把数据hex_sin_data的前5个数据存入signal_1m.dat文件,相应的signal_gen0.v中的语句if(i0<50)相应的改为if(i0<5)。
仿真的波形如下图(fir滤波器的输入输出信号):

2de629a5cc746e8df10ea4bd47acfb.jpg


运行matlab,用sin_1MHz_gen.m产生1MHz(f0 =1e6)正弦波信号,Fs/Fo=25,把数据hex_sin_data的前5个数据存入signal_1m.dat文件,相应的signal_gen0.v中的语句if(i0<5)相应的改为if(i0<25)。
仿真的波形如下图(fir滤波器的输入输出信号):

1b06860b29a018e85c3f83d67e80dc.jpg

由此可见FIR对带外信号起到衰减的作用。

部分代码:

244d273bf30eb3cefe5d34a0848d2a.jpg

08c105d5801752be0718b7771bd045.jpg

4b5a3d80eab9e3c6b2113d8c41b74a.jpg

fc765ff9adf7a26ccb8a070b07bb36.jpg

e18d534dc12da9fc9a9e3bbe007d57.jpg


后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!

- THE END -


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论