基于Quartus II 的数字滤波器设计(FIR Compiler IP核)

基于Quartus II 的数字滤波器设计(FIR Compiler IP核)

摘要

  针对模拟滤波器设计困难,不灵活的问题,提出使用FPGA设计高性能数字滤波器方案,使用MATLAB中APP(FDATOOL)设计滤波器系数,Python设计仿真波形输入,Quartus完成RTL的硬件设计,经验证相较于模拟滤波而言,性能指标更高,设计更灵活。

引言

    随着时代的高速发展,数字电路的集成化越来越高,数字滤波器因其灵活性和低功耗,逐渐代替模拟滤波器,FPGA因为其并行和灵活的特点与数字滤波器相符合,所以使用FPGA进行数字滤波器的设计,在设计中使用FPGA自带的IP设计。

MATLAB设计滤波器

滤波系数

   MATLAB中自带工具FDATOOL可以帮助我们设计数字滤波器

图1 第一步定点数
这里我们选择定点数,字长(word length)要与FPGA中的输入字长一致。

图2 滤波器参数设置
带通滤波器的参如下:带通范围:2000-4000Hz;低频过渡带:1400-2000Hz;高频过渡带:4000-4600Hz;采样频率:16000Hz;采用等纹波滤波器设计;要求阻带衰减大于60dB;
图中2是带通滤波器,3是等波纹滤波器设计,4是滤波器的通带范围,5是滤波器的阻带与通带的衰减指标。

图3 导出系数

图4 参数导出到MATLAB的数组当中
将参数导出到MATLAB当中。
最后将导出的系数粘贴到TXT文档当中给FPGA的IP核使用
最后将导出的参数粘贴复制到TXT文档当中,以便后期FPGA使用,值得注意的是抽头系数的格式必须是上面这种用分行符隔开

波形数据

     除了滤波器的抽头系数之外我们还需要有测试的仿真波形输入,这里我们使用Python将生成波形数据存储到TXT文档当中。

1000HZ正弦波

//代码片
import numpy as np
import matplotlib.pyplot as plt

f=1000
fs = 16000
Ts = 1/fs
N = 1024

t = np.linspace(0,N-1,N)/fs

y = (2**16-1)*(np.sin(2*np.pi*t*f)+1)/2 

np.savetxt("./pass.txt",y.astype(np.uint32),delimiter = ' ',fmt="%x",newline = '\n')

plt.figure()
plt.plot(t,y)

plt.show()

  上面Python是生成的波形和相应的程序,上图为1000HZ的波形,当然使用MATLAB也是可以的。

Quartus II 程序设计

	在Qurtus II 中我们需要使用到两个模块,一是PLL模块因为采样频率是16KHZ,所以我们需要PLL分出一个16KHZ的频率;二就是FIR comliper IP 核例化的数字滤波器模块。

RTL设计

PLL例化
	PLL例化具体的不细说了,但是要强调一点,我们之前只是破解软件但是IP核是没有破解的,不影响我们使用但是仿真的时候需要IP核的破解权限,这个需要大家自行百度一下。PLL具体的例化就不说了,这种介绍FIR IP核。
FIR comliper

在这里插入图片描述
FIR IP核有两种,我们选择V13.1 版本。
参数设置
首先第一部分是Parameterize
在这里插入图片描述
滤波系数设计有两种方法,其一是这个IP核自带的设计方法,二是导入由FDATOOL导出的参数(之前从MATLAB中导出的TXT文档)。

在这里插入图片描述
图中有三个要注意到的地方,1是Bit Width要和在FPGA中设定Fixed中设定的一样;二是输入变量要选择有符号数的二进制输入,这也意味着输入变量也需要转化为有符号数;三input bit width 位宽也要和图中1的保持一致。

仿真图分析

仿真图
由图中可知通带2000-4000HZ带通滤波器滤除了1000HZ与2000HZ叠加波中的1000HZ频段保留了2000HZ频段。

总结

总的来说,基于FPGA的数字滤波器在设计过程中需要配合MATLAB使用,能达到预期的设计效果。
具体的工程代码//download.csdn.net/download/Joy__chen/12522835,如有需要请自取,有问题的话,也可以在讨论区留言,另外大家如果感觉本篇博客对自己有用的话,请大家点赞收藏,谢谢大家。

  • 19
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值