首页 > 代码库 > MATLAB设计不同结构的FIR或IIR滤波器

MATLAB设计不同结构的FIR或IIR滤波器

  网上很多教程都是使用MATLAB的FDATool工具设计滤波器,然后将系数导出,放到IP核中,由IP核根据数据速率核主处理时钟来决定滤波器的结构。这种设计方式很方便但是不灵活,有时会碰到这种情况:我们需要一个FIR滤波器,数据速率和主处理时钟速率都很高,甚至一样,且滤波器的阶数又很高,这个时候由IP自己来生成滤波器时,会生成全并行滤波器,会占用大量资源,甚至资源都不够用。此时我们希望能自己决定滤波器的结构,从而达到资源和效率相匹配的目的。高手可以自己动手用HDL语言来实现自己所需结构的滤波器,本文介绍一种用MATLAB提供的Filterbuilder工具来设计滤波器,并自动生成我们所需结构滤波器的HDL代码。

  1. 打开Filterbuilder工具

  打开Filterbuilder工具有两种方式,一种是在MATLAB的的应用程序中的信号处理和通信一栏下,如图所示:(我用的是MATLAB2016a版本,PS:点击图标右上方的星星图标,可以将工具添加到收藏夹,以后打开方便。)技术分享

第二种是在MATLAB的命令行窗口直接输入filterbuilder回车,选择lowpass,然后确定。

技术分享

  1.  设计一个低通FIR滤波器

  设计一个低通FIR滤波器,采样率245.76MHz,通带带宽3.2MHz,阻带5MHz,通带纹波0.1dB,阻带衰减80dB,窗函数为Kaiserwin。如图所示:

技术分享

   点击Apply后再点击右上角的View Filter Response就可以看到滤波器的幅频响应,点击信息按钮,能看到滤波器的阶数以及资源情况,如果全并行结构实现这个滤波器的化,需要687个乘法器,显然这是不合适的。技术分享技术分享

  1.   生成所需结构的HDL

  点击Data Types按钮,Arithmetic栏选择Fixed point,根据具体情况填入输入数据精度

技术分享

  点击Code generation标签,然后点击generate HDL,在弹出窗口根据自己熟悉的语言选择VHDL或Verilog。在Architecture处可以选择全并行、全串行、部分串行、级联串行以及分布式。这里选择部分串行,点击view details可以看到不同结构消耗不同数量的乘法器,根据自己系统要求可以自由选择。在下面还可以选择增加流水线寄存器。

技术分享

  点击global setting,将clock enable input port 名称改为ce。这为后续将HDL代码导入system generator的black box提供方便。

技术分享

  后面几项根据需要设置。设置完成后点击Generate,即可生成HDL代码。HDL代码可以当做一个模块直接添加到程序中,可以综合。

转载请注明出处,谢谢!

MATLAB设计不同结构的FIR或IIR滤波器