CIC插值滤波器的FPGA设计与实现
摘要:基于多速率信号处理原理,设计了用于下变频的CIC插值滤波器,由于CIC滤波器结构只用到加法器和延迟器,没有乘法器,很适合用FPGA来实现,所以本文分析了CIC滤波器的原理,性能及影响参数,借助MATLAB设计符合系统要求CIC滤波器,并利用Modelsim软件建模仿真,验证CIC滤波器性能是否达到要求。 (一)CIC滤波器基本原理 A.CIC滤波器的基本单元
CIC滤波器主要由积分滤波Integrator和梳状滤波Comb两个基本单元部分构成。
典型的CIC滤波器的结构,它由两个基本单元I(积分滤波器)和C(梳状滤波器)级联构成。本设计主要针对插值滤波器,所以插值滤波器的结构示意图如图1-1所示:
图 1-1 3级级联的CIC插值滤波器结构示意图
积分器和梳状滤波器之间是一个采样率转换器,对于CIC插值器而言,它完成在每一个样值后补上R-1个0值的工作,,对于CIC抽取器来说,它完成在实际的抽取工作,每R个样值中取样一个。
R(插值倍数),M(延迟因子,一般取1或者2)以及N(级联级数)是影响CIC滤波器的三个参数,它们的值需根据通带性能的需求而设定。
(二)CIC插值滤波器的设计流程
根据CIC滤波器的原理,本设计的流程如图2-1所示:
编写Matlab程序 原理 编写Verilog程序 Matlab仿真 比较和分析结果 Quartus和Modelsim仿真 参数、位宽、模块的设计
图2-1 CIC插值滤波器的设计流程图
(三)模型的建立和测试
A.位宽策略
对于数字滤波器,一个不得不考虑的问题是为防止溢出每一级所需的位宽。对于抽取器来说,CIC滤波器的输出增益为
N G?(R*M) (3-1)
所以,在全精度的情况下,最后一级输出的位宽为
Bout?Bin?Nlog2(R*M) (3-2)其中Bin表示输入数据的宽度,为了保证精度,每一个积分器和梳状滤波器的输入输出位宽都为Bout。 对于插值器而言,输出增益为
?2i?????,i?1,2,....N?Gi?? ?22N?1(R*M)i?N/R?????,i?N?1,N?2......2N???? (3-3)
因此,第i级为避免溢出所需要的位宽为
Wi?Bin?log2(Gi) (3-4)最后一级输出位宽为
Bout?Bin?Nlog2(R*M)?log2R (3-5)在实际当中,当差分延时M=1时,为保证稳定,所有积分器的位宽在理论值的基础上加一。
Bmax不仅是滤波器输出的最大可能的位数,也是每一级滤波器的最大可能位
数。但有时候,输出位宽需要根据实际需要引入四舍五入或截取的方法来减少位数。简单的做法是直接在输出端做四舍五入或者截取,更复杂点的方式是在每一级都做四舍五入或者进行截取。这自然需要研究一下因四舍五入或截取所引起的滤波器输出端误差,具体的方法就是通过单独研究每一级误差源(指每一级滤波器截取或四舍五入引起的误差)的均值和方差,利用统计特性研究滤波器输出端总的均值和方差。
表 3.1不同参数全精度下的输出位宽
输入位宽 8bit 8bit 12bit 16bit 16bit 16bit 级数N 4 4 3 4 4 4 插值比R 16 16 16 32 64 128 差分延时M 1 2 1 1 1 1 输出位宽 21bit 24bit 21bit 32bit 35bit 38bit 根据实际时的滤波器结构,可以认为误差源有2N+1个:2N个滤波器级因四舍五入或截取所产生的误差源和一个输出寄存器因四舍五入或截取所产生的误差源。
对于CIC滤波器的三个基本单元,都不涉及乘法器,而采样率变换器不使用
任何运算单元。
(四)CIC滤波器的matlab仿真
在matlab的程序里,分三部分即根据CIC插值滤波器的原理进行描述。 激励信号采样正弦信号,以及白噪声信号的测试模型。测试信号的点数,正弦信号的频率和采样率可以根据需要设定。 1.仿真结果
图4-1是CIC插值滤波器的频率响应曲线,其中正弦频率fs=200Hz,采样率Fs=800Hz。