基于SoPC的FIR滤波器设计与实现
0 引言
数字滤波(idgital filter)是由数字乘法器、加法器和延时单元组成的一种计算方法。其功能是对输入离散信号的数字代码进行运算处理,以达到改变信号频谱的目的。数字滤波器根据频域特性可分为低通、高通、带通和带阻4个基本类型;根据时域特性可分为无限脉冲响应(infinite impulse response,IIR)滤波器和有限脉冲响应(finite impulse response,FIR)滤波器。FIR滤波器不存在稳定性和是否可实现的问题,容易做到线性相位,故在数据通信、图像处理等领域广泛应用。
目前,FIR滤波器的硬件实现有以下几种方式:一种是使用通用数字滤波器集成电路,这种电路使用简单,但是由于字长和阶数的规格较少,不易完全满足实际需要;虽然可采用多片扩展来满足要求,但会增加体积和功耗,因而在实际应用中受到限制。另一种是使用DSP芯片,DSP芯片有专用的数字信号处理函数可调用,实现FIR滤波器相对简单,但是由于程序顺序执行,速度受到限制。而且,就是同一公司不同系统的DSP芯片,其编程指令也会有所不同,开发周期较长。还有一种是使用可编程逻辑器件,如FPGA(field programmable gate array),即现场可编程门阵列,有着规整的内部逻辑块整列和丰富的连线资源,特别适合用于细粒度和高并行度结构的FIR滤波器实现,相对于串行运算主导的通用DSP芯片来说,并行性和可扩展性都更好。
本文介绍一种基于SoPC的FIR滤波器设计方案,设计流程如图l所示。该设计方法程序简单,调试方便,得到的FIR滤波器精确度高。
1 FIR滤波器原理
FIR数字滤波器是一种非递归系统,其冲激响应总是有限长的,其系统函数可以记为:,最基本的FIR滤波器可用下式表示是输入采样序列;h(m)是滤波器系数;N是滤波器的阶数;y(n)表示滤波器的输出序列。也可以用卷积来表示输出序列y(n)与x(n),h(n)的关系:
y(n)=x(n)*h(n)
图2显示了一个典型的直接T型3阶FIR滤波器,其输出序列y(n)满足下列等式:
在该FIR滤波器中,总共存在3个延时结,4个乘法单元,1个4输入的加法器。如果采用普通的数字信号处理器(DSP)来实现,只能用串行的方式顺序地执行延时、乘加操作,不可能在1个DSP处理器指令周期内完成,必须用多个指令周期来完成。但如果采用FPGA来实现,就可以采用并行结构,在1个时钟周期内得到1个FIR滤波器的输出。不难发现,图2的电路结构是一种流水线结构,这种结构在硬件系统中有利于并行高速运行。
2 FIR滤波器的实现
Altera提供的FIR Complier是结合Altera FPGA器件的FIR Filter Core,DSP Builder与FIR Compiler可以紧密结合起来。DSP Builder提供了FIR Core的应用环境和仿真验证环境。
2.1 建立模型文件
为了调用FIR IP Core,在Simulink环境中新建模型文件,放置Sigtlal Compiler模块和FIR模块。启动Simulink的方法:打开Matlab,在主命令窗口直接键入Simulink,按回车即可。然后打开Altera DSP Builder模块,在MegaCore FuncTIons调出fir_compiler_v7_0。
2.2 配置FIR滤波器核
双击模型中的FIR模块,在弹出来的选择窗口中有:关于这个核(about this core)、程序说明书(documentation)、显示元件(display symb01)、步骤1确定参数(Stepl:Parameterize)和步骤2生成(Step2:Generate)等4个不同的选项。点击stepl,便打开了FIR滤波器核的参数设置窗口,如图3所示。
由图3可见,滤波器的系数精度为32位,器件为CycloneⅢ,结构为并行滤波器,结构选择了1级流水线,滤波器由LC逻辑宏单元构成,系数数据存于FPGA的M9K模块中,1个输入通道,32位有符号并行输入,全精度数据输出。设定后会直接显示滤波器的频率响应(frequency res-ponse)或时域响应及系数值(timeresponse & coefficeient values)。由其频率响应图可以看出,此FIR滤波器为低通滤波器。如果不符合设计要求,则可以通过对Edit Coefficient Set选项,对滤波器进行重新配置。
2.3 生成VHDL语言
完成FIR滤波器核配置后,便可得到设计好的滤波器,加入输入/输出信号,形成如图4所示电路。点击SignalCompiler,再选择Anal-yze,选择Sigle step compilation中的Convert MDL to VHDL,就可以生成对应的VHDL语言。
在QuartusⅡ中打开编译后生成的fir.qpf工程文件,可以得到滤波器的VHDL语言,其部分代码如下:
编译成功后,可以将其转换成元件。
2.4 系统功能仿真
在Matlab中,建立M文件,运用前面设置好参数所生成的FIR滤波器,打开FIR滤波器时域响应与系数值(time response & coefficeient vahles)。得到该滤波器的时域响应
- 基于FPGA的语音录制与回放系统(09-18)
- 基于SOPC的智能电子血压计设计(06-19)
- 基于SoPC的FPGA在线测试方法 (10-09)
- 基于SOPC系统的虚拟示波器设计(01-12)
- 基于SOPC的人脸检测系统的设计(10-29)
- 基于SOPC的视频运动目标检测跟踪系统(10-22)