FPGACIC滤波器设计_第1页
FPGACIC滤波器设计_第2页
FPGACIC滤波器设计_第3页
FPGACIC滤波器设计_第4页
FPGACIC滤波器设计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于FPGA的CIC数字滤波器的设计摘要:级联积分梳状(Cascade Integrator Comb,CIC)滤波器是数字系统中实现大采样率变化的多速率滤波器,已经证明是在高速抽取和插值系统中非常有效的单元,在数字下变频(DDC)和数字上变频(DUC)系统中有广泛的应用。它不包含乘法器,只是由加法器,减法器和寄存器组成,而且需要的加法器的数目也减少了许多,因此CIC滤波器比FIR和IIR滤波器更节省资源,并且实现简单而高速。本文主要讨论了CIC滤波器的基本原理和基于FPGA的仿真实现方法,具体是采用Verilog HDL语言编程,将滤波器分为积分器模块和梳状器模块2个部分,对每个模块进行具体

2、的功能分析和设计实现,最后通过Modelsim仿真对滤波器的性能进行分析,验证了设计的正确性。关键词:CIC滤波器;抽取;FPGA;Verilog HDLthe Design of Cascade Integrator Comb Filter Based on FPGAAbstract: CIC (Cascade Integrator Comb, CIC) filter is a digital system to achieve large changes in multi-rate sampling rate filter, which has been proven to be a ve

3、ry effective unit in the high-speed extraction and interpolation system. It is widely used in the digital down conversion (DDC ) and digital up conversion (DUC) systems. It does not contain the multiplier, but just composes by adders, subtractors and registers, and the number of needing adders is re

4、duced a lot. So it takes fewer resources than FIR filter and IIR filter. And the speed of CIC filter is very high and it is also very convenient to realize. This article discusses the basic principles of CIC filter and the simulation way based on FPGA. The modules were described with Verilog HDL. Fi

5、rstly, the filter was divided into two parts which were integration module and the comb module. Then the function of each module were analyzed and designed. Finally the performance of the filter was analyzed under ModelSim and the correctness of the design was verified.Keywords:CIC filter; Decimatio

6、n; FPGA; Verilog HDL1. 引言:数字滤波是数字信号分析中最重要的组成部分之一,数字滤波与模拟滤波相比,具有精度和稳定性高,系统函数容易改变,灵活性高,不存在阻抗匹配问题,便于大规模集成,可实现多维滤波等优点。级联积分梳状(Cascade integrator comb,CIC)滤波器,是由Hogenauer引入的一种非常有效的高分解速率的数字滤波器结构,已经证明是在高速抽取和插值系统中非常有效的单元。它具有较好的抗混叠和抗镜像性能;它不包含乘法器,只是由加法器,减法器和寄存器组成,而且需要的加法器的数目也减少了许多,因此CIC滤波器比FIR和IIR滤波器更节省资源,并且实现

7、简单而高速;无需存储滤波器的系数,结构规则易于拓展,无需外部控制,抽取倍数可变,对提高实时性和简化硬件有重要意义。CIC滤波器的应用范围非常的广泛:由于其具有较好的抗混叠和抗镜像性能,可以实现任意采样率的转换,因此被用在软件无线电接收机中;用于正交多速率调制系统中,但又不仅仅是局限在调制器中,只要CIC滤波器之前或之后有FIR滤波器,对CIC滤波器的通带衰减进行补偿以后,都能够以很小的代价换取最大的硬件资源节省1;在全数字接收机中的应用,CIC滤波器与HB滤波器共同实现了数字抽取滤波器,从输入的宽带高数据流的数字信号中提取所需的窄带信号,并在低通滤波器的作用下,下变频为数字基带信号2;在ADC

8、中频信号处理模块中的应用,用CIC滤波器来匹配噪声抑制滤波器,并对采样后的数据再进行下采样,以降低噪声和后端硬件成本3;在无线通信中的应用,如:蜂窝式无限电通信;CIC滤波器由于其结构的独有特性,已经成为了许多新型高性能器件的核心部件。因此研究它具有很重要的实用意义。本文是要设计一个基于现场可编程门阵列(FPGA),用Verilog HDL语言编程实现的级联积分梳状(Cascade integrator comb,CIC)数字滤波器。主要内容包括:架构设计、接口逻辑设计、FSM设计、编码实现、功能仿真等。2. 设计平台介绍:系统设计需要使用Verilog HDL(Hardware Descri

9、ptions Language)、ModelSim 6.0、FPGA(Field Programmable Gates Array)现场可编程门阵列。2.1 Verilog HDL简介:Verilog HDL是一种硬件描述语言(HDL: Hardware Description Language),用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。以文本形式来描述数字系统硬件的结构和行为的语言,用它表示逻辑电路图、逻辑表达式以及数字逻辑系统所完成的逻辑功能

10、。2.2 Modelsim简介:Modelsim仿真工具是Model公司开发的。它支持Verilog VHDL以及他们的混合仿真,它可以将整个程序分步执行,使设计者直接看到他的程序下一步要执行的语句,而且在程序执行的任何步骤任何时刻都可以查看任意变量的当前值,可以在Dataflow窗口查看某一单元或模块的输入输出的连续变化等。ModelSim是业界最优秀的HDL语言仿真器 。它提供最友好的调试环境,是唯一的单内核支持VHDL和Verilog混合仿真的仿真器。全面支持VHDL和Verilog语言的IEEE 标准,支持C/C+功能调用和调试。2.3 FPGA简介:现场可编程门阵列FPGA(Fiel

11、d Programmable Gates Array)是近10年加入到用户可编程技术行列中的器件。现场可编程阵列在器件的选择和内部的互联上提供了更大的自由度。FPGA的结构类似于掩膜可编程门阵列(MPGA),由逻辑功能块排列成阵列组成,并由可编程的内部连线连接这些逻辑功能块来实现不同的设计4。FPGA是由掩膜可编程门阵列和可编程逻辑器件两者特性结合演变而来的,所以FPGA既具有门阵列的高密度和通用性,又具有可编程逻辑器件的用户可编程特性。对于ASIC设计,采用FPGA在实现小型化,集成化和高可靠性的同时,还减少了风险,降低了成本,缩短了周期。2.3.1 FPGA基本原理:FPGA就结构上而言,

12、主要由三个部分主成:可编程逻辑块CLB(Configurable Logic Blocks),可编程输入/输出模块IOB(Input/Output Block),可编程互连资源PIR(Programmable Interconnect Resource)等三种可编程电路。图1所示为FPGA平面结构示意图5。CLB是实现逻辑功能的基本单元,它们通常规则地排列成一个阵列,散步于整个芯片中;IOB主要完成芯片上的逻辑与外部引脚接口,它们通常排列在芯片的四周;PIR包括各种长度的连线线段和一些可编程连接开关,它们将各个CLB之间或CLB与IOB之间以及IOB之间连接起来,构成特定功能的电路。其中,CL

13、B主要由逻辑函数发生器,触发器,数据选择器等电路组成,逻辑函数发生器主要由查找表LUT(Look Up Table)构成;IOB主要由输入触发器,输入缓存器图1. FPGA的平面结构示意图Fig.1 The schematic diagram of FPGA和输出触发/锁存器,输出缓存器组成,每个IOB控制一个引脚,它们可配置为输入,输出或双向I/O功能;PIR由许多金属线段构成,这些金属线段带有可编程开关,通过自动布线实现各种电路的连接。2.3.2 FPGA系统设计流程:FPGA系统设计流程包括硬件和软件设计流程。首先确定系统功能,并对关键部分予以仿真。在确定系统功能并划分功能块之后,根据不

14、同的结构和算法,确定不同的资源消耗。由上述过程可以确定系统设计需要消耗的门数,存储器的大小。根据系统设计要求,对系统时序和时钟率进行考察和估计,可以确定所需器件的速度级别。根据系统外部接口的要求,确定接口时序和芯片引脚资源消耗情况。在上述过程完成以后,考虑系统功能和性能的可扩展性,确定器件型号。型号确定之后,需要确定配置方式,因为不同型号的器件,其配置方式是有很大差异的。硬件设计和软件设计可以同时进行。系统设计在经过设计,改进,查错,再设计,再改进,再查错的螺旋型过程后,即可完成系统所有的设计,进入产品生产6。如图2所示为FPGA系统设计流程:系统功能定义和逻辑功能划分设计模块的初步规划逻辑模

15、块的划分以及模块接口的定义器件选型设计时序的初步规划模块A设计模块合并,仿真与测试器件定型,调试,生产模块C设计模块B设计图2. FPGA设计流程Fig.2 The design process of FPGA3. CIC滤波器的基本原理:3.1 多速率信号处理原理:所谓多速率信号处理是指改变信号的采样率,实质上是对采样后的离散序列重采样的过程,包括抽取和内插两种情况。使采样率降低的采样率转换称为抽取;使采样率升高的采样率转换称为内插。3.1.1 整数倍抽取:整数M倍抽取是指原始抽样序列x(n)每隔(M-1)个取一个,形成一个新序列XM(n),XM(n)=x(Mn),正整数M为抽取因子。M倍抽

16、取器符号如图3所示,设序列x(n)的频谱为x(ejw),求得序列XM(n)的傅里叶变换,表明抽取后序列XM(n)的频谱为原序列x(n)的频谱经频移和M倍展宽后的M个频谱的叠加和。根据Nyquist采样定理,若序列x(n)的采样率为fs,则模拟信号的最高频率(无模糊带宽)fHfs2,否则x(n)的频谱会发生混叠。当以M倍抽取率对x(n)进行抽取后得到的抽取序列XM(n)之取样率为fsM,其无模糊带宽为fs(2M),所以当x(n)中含有大于fs(2M)的分量时,XM(n)的频谱必然产生混叠,无法从XM(n)中恢复x(n)中频率小于fs(2M)的低频信号分量。如果先用一个数字滤波器(归一化带宽B=M

17、)对X(ejw)进行滤波得到V(ejw),该信号只含有小于M频率分量,再对V(ejw)进行M倍抽取,就可以避免频谱混叠。一个完整的M倍抽取器结构如图4所示: M图3. M倍抽取器符号Fig.3The symbol of M times extractor M图4. M倍抽取器结构Fig.4The structure of M times extractor3.1.2 整数倍内插:整倍数内插是指在原始抽样序列的相邻两抽样点之间插入(L-1)个零值,设原始抽样序列为x(n),则内插后的序列为 内插器符号如图5所示。设序列x(n)的频谱为x(ejw),求得序列XL(n)的傅里叶变换XL(ejw)=X

18、(ejwL),表明内插后序列xL(n)的频谱为原序列x(n)的频谱经L倍压缩得到的。因此,xL(ejw)中不仅含有x(ejw)的基带分量(wM,而且还含有其高频分量(wL)。对内插后的信号进行低通滤波,就可以从内插信号频谱中恢复出原始基带谱,使内插序列中的(L-1)个零值都变为x(n)的准确值,所以经过内插提高信号时域分辨率。完整的L倍内插器结构如图6所示: L 图5. L倍内插器符号Fig.5 The symbol of L times interpolator L图6. L倍内插器结构Fig.6 The structure of M times interpolator3.2 单级CIC滤

19、波器:CIC滤波器是由积分器(Integrator)和梳状(Comb)滤波器两部分级联而成的,根据其结构的不同,可分别实现抽取(Decimation)功能和插值(Interpolation)功能。如图7和图8所示:MZ-1Z-DM图7. 单级CIC抽取滤波器结构图Fig.7 The structure of single-stage CIC decimation filter LZ-DLZ-1图8. 单级CIC插值滤波器结构图Fig.8 The structure of single-stage CIC interpolation filter积分部分的积分器是单极点的IIR滤波器,并且反馈系

20、数为1,状态方程如下: (1)积分器也可看成是累加器,根据Z变换,积分器的传输函数为: (2)梳状器是一个对称的FIR滤波器,其状态方程表示为: (3)式中,D是设计参数,称为微分延迟,其传输函数为: (4)则单级CIC滤波器的传递函数为: (5)其传递函数的频率响应为: (6)CIC滤波器的幅频特性如图9所示,其中0,2/DM为其主瓣,其他的区间成为旁瓣:图9. CIC滤波器的幅频特性Fig.5 The frequency-amplitude characteristic of CIC filter由图中可以看出,随着频率的增大,旁瓣电平不断减小,当DM1时,第一旁瓣的电平为2DM/3,它与

21、主瓣电平的差值为: (7)可见单级CIC滤波器的旁瓣电平较大,阻带衰减较差。为降低旁瓣电平,可以采用多级CIC滤波器级联的办法来实现。假设有N级级联,则阻带衰减为单级衰减的N倍,即13.36*N(DB)。3.3 多级CIC滤波器:多级CIC滤波器的传递函数为7: (8)其中,N为CIC滤波器的级数,D为梳状部分延迟因子,M为抽取因子。滤波器的频率响应为: (9)令w1表示通带截止频率,w2表示阻带截止频率,在抽取后,对有用信号产生混叠的阻带带宽为w1,则有。则N级CIC滤波器的阻带衰减为: (10)定义带宽比例因子b为信号带宽与抽取后输出采样率的比值,即b=w1DM/2,则: (11)N级CI

22、C滤波器的通带波纹为: (12)由(11)式可知,滤波器的阻带衰减随着N的增加而增加。所以多级CIC滤波器的阻带衰减远远优于单级CIC滤波器。一般来说阻带衰减达到70dB左右就能基本满足实际要就。并且由(12)式可知,随着N的增大,通带波纹也会增大,所以CIC滤波器的级数是有限的。多级CIC滤波器的性能由3个参数N,D,M决定。级数N可以用来控制阻带衰减,N越大阻带衰减越大,通带内的混叠就越小,但是由于N级CIC滤波器的带内容差是单级时的N倍,增大阻带衰减的同时会增大带内容差,所以N不可太大,一般不超过5级。延迟因子D决定零点的位置,D的增大可以有效的减少通带内的混叠,但是D太大会导致通带内主

23、瓣衰减过大,所以一般D取1或2,抽取因子M决定了抽取后信号的采样频率,它同延迟因子一起决定了主瓣和旁瓣的宽度。通常情况下,根据工程要求来确定抽取因子M,然后对通带带宽,通带衰减,和混叠特性进行折衷考虑来确定延迟因子D和滤波器的级数N。4. 详细设计:首先构造一个3级的CIC抽取滤波器,只需把3级积分器的输出和3级梳状器的输入串联起来,就构成了3级的CIC滤波器。图10为3级CIC抽取滤波器的结构图,而内插滤波器的级联方式与抽取器相反。为了能够更加直观的观察多级CIC滤波器的幅频特性,特在MATLAB中对3级的CIC抽取滤波器的幅频特性进行了绘制(抽取因子M为16,梳状部分延迟D为2),并且与单

24、级的CIC滤波器进行比较,所得到的图形为图11。MX(n)-1-1-1-1-1-1图10. 3级CIC抽取滤波器的结构图Fig.10 The structure of three stages CIC decimation filter图11. CIC滤波器幅频特性图Fig.11 The frequency-amplitude characteristic of CIC filter从图11中可以看出:CIC滤波器是低通滤波器,3级CIC滤波器比单级的CIC滤波器的性能更好,主瓣电平比旁瓣电平高大概40dB,说明阻带衰减比较快;而单级的CIC滤波器的旁瓣只比主瓣低13.36dB,阻带衰减很差。

25、因此多级CIC滤波器的性能比单级的要好,MATLAB幅频特性程序见附录1。多级CIC滤波器结构简单,而且可以很方便地实现速率变换,在滤波器的两个部分之间,速率发生了变化。对于CIC的抽取滤波器而言,在最后一级积分器的输出端,采样速率由变为/M。在设计CIC滤波器的过程中应注意的问题就是防止积分器的数据发生溢出,可以采取以下两个方法,并且不会影响滤波的正确性:(1) 所采用的数据编码具有如下特点:当从高端溢出时返回到低端,从低端溢出时返回到高端,其实质是对数据求模;(2) 寄存器所存数值的大小大于,等于整个滤波器最后输出地数值范围。第一个条件采用二进制补码形式实现(在Modelsim中会自动将负

26、数用二进制补码表示)。下面分析如何实现第二个条件:为了得到CIC滤波器的幅频响应,将带入系统的传递函数,即式(8),为了表示方便把表示成的形式,其中称为相对于的归一化频率,将它带入(8)式可得N级CIC滤波器的幅频响应: (13)从式(13)可知,N级CIC滤波器级联的最大幅度增益为: (14)由于DM的值很大,N级CIC滤波器级联的的值也很大,所以在设计过程中为了防止溢出,必须相应的扩大数据的位数,以减少误差。如果为输入数据的位数,那么最大内部位宽为: (15)其中为最大动态范围的增长。为防止数据溢出,最大限度的节省FPGA的硬件资源,应该把积分器的积分部分和梳状的寄存器位宽扩展到Bout位

27、8。设计的时候从CIC滤波器的功能要求出发,将该滤波器分为三个部分:积分部分:实现了三个积分器;抽取部分:实现了下采样功能;梳状部分:实现了三个梳状器,再分析各个模块所实现的功能,并对这三个模块进行详细的设计。4.1 前端设计:首先对CIC滤波器的各个参数进行设定:滤波器的输入数据为8位,级数N为3,梳状部分的延迟D为2,抽取因子为16 ,并且由(15)式可计算出它的最大内部位宽为23。根据精度要求,输出可以取小于23,本设计中取23位。然后从CIC滤波器的功能要求出发,将该滤波器的输入信号设为以下几个:reset, clk, x_in, 其中reset是复位信号(防止程序运行过程中产生随机数

28、),clk是输入的时钟信号,x_in是所输入的8位的数据。输出信号为:y_out,它表示所输出的23位的数据。则端口列表为:input reset; input clk; input 7:0 x_in; output 22:0 y_out; 寄存器型的变量可以理解为实际电路中的寄存器,它具有记忆特性,是一种存储元件,在输入信号消失后它可以保持原有的数值不变。寄存器型变量一般使用关键字reg进行定义,并且在定义时可以加入位宽,位宽为1的变量也称为标量,位宽大于1的变量称为矢量。由于在Verilog HDL中默认的变量类型是wire型,所以如果某个变量的类型需要为寄存器型,则必须在程序中加以定义,

29、而且值得注意的是,任何在always块内被赋值的变量都必须是寄存器型9。在本设计中,需定义如下变量:reg derived_clk; reg3:0 counter; reg22:0 IntReg01:0,IntReg11:0,IntReg21:0,IntReg3; reg22:0 ComReg02:0,ComReg12:0,ComReg22:0,ComReg3; 4.2 积分器模块设计:三级的CIC滤波器前面的积分部分是由三个一级的积分器级联而成,是一类IIR滤波器,但是它没有前馈,而只有回馈部分。分别用寄存器:IntReg01:0,IntReg11:0,IntReg21:0来表示第一,第二,

30、第三个一级积分器,积分器的输出放在寄存器IntReg3中。积分器实现的关键是如何实现输入信号的延时,本设计是通过将输入信号放在寄存器中,经过一个单位的延时以后再调用这个寄存器中的值,从而实现延时的,积分器模块的实现如下:/积分器实现模块always (posedge clk) /时钟上升沿有效 begin: INTEGRATOR/复位时所有的寄存器输出为0 if(!reset) begin IntReg00 =0; IntReg01 =0; IntReg10 =0; IntReg11 =0; IntReg20 =0; IntReg21 =0; IntReg3 =0; end else begi

31、n IntReg007:0 = x_in; /将输入信号赋值给IntReg0的低八位 IntReg01 = IntReg00; /*将IntReg00赋值给IntReg01相当于延时*/ IntReg10 = IntReg01 + IntReg00; IntReg11 = IntReg10; IntReg20 = IntReg11 + IntReg10; IntReg21 = IntReg20; IntReg3 = IntReg21 + IntReg20;end end4.3 抽取器模块设计:改变系统的抽样频率有两种方法:其中减少抽样率的过程成为信号的“抽取”,也称为“抽样率压缩”;增加抽样率

32、的过程称为信号的“插值”,亦称为“抽样率扩张”。抽取器的主要作用是转换抽样率,使系统工作在多抽样率状态。本设计中所要用到的是抽样压缩,其定义如下:当信号的抽样数据量太大时,可以在每A个抽样中取一个,或者说每隔A-1个抽样取出一个,以便减小数据量,A是整数,称为抽取因子,这样的抽取称为整数倍抽取10。本设计中抽取器的实现主要是通过一个计数器来实现的,因为抽取因子为16,所以定义了一个4位的计数器reg 3:0 counter,其具体的实现模块如下: /计数器always (posedge clk)beginif(!reset)counter =10) /生成下采样后的时钟 derived_clk

33、 = 1; else derived_clk = 0; counter = counter + 1; endend4.4 梳状器模块设计:梳状滤波器的积分器是一类FIR滤波器,由于这种滤波器每个抽头系数非“0”,即“1”,因此仅需延时器和加法器就可以实现。它是由三个单级的微分器级联而成的,分别用ComReg02:0,ComReg12:0,ComReg22:0来表示依次第一,第二,第三个一级的微分器,梳状器的输出放在寄存器ComReg3中。实现它的关键也是延时部分的实现,但是跟积分器不同的是,梳状器的延时是两个时间单位,因此要将信号连续赋值给两个寄存器来实现延时。其具体的实现模块如下:/梳状器实

34、现模块 always (posedge derived_clk)begin:COMB if(!reset) begin ComReg00 = 0; ComReg01 = 0; ComReg02 = 0; ComReg10 = 0; ComReg11 = 0; ComReg12 = 0; ComReg20 = 0; ComReg21 = 0; ComReg22 = 0; ComReg3 = 0;end else begin ComReg00 = IntReg3; ComReg01 = ComReg00; ComReg02 = ComReg01; /延时两个时间单位 ComReg10 = ComR

35、eg00 - ComReg02; ComReg11 = ComReg10; ComReg12 = ComReg11; ComReg20 = ComReg10 - ComReg12; ComReg21 = ComReg20; ComReg22 = ComReg21; ComReg3 = ComReg20 - ComReg22; end end将上述三个模块综合起来,就形成了一个完整的Verilog HDL的CIC滤波器的程序见附录2。5. 在Modelsim环境下的功能仿真:验证是保证设计在功能上的正确性的一个过程,要对所设计的程序进行仿真验证就要编写一个Testbench文本,即测试平台。简单

36、来说,在仿真的时候Testbench用来产生测试激励给待验证设计(DUV),或者称为待测设计(DUT),同时检查DUV的输出是否与预期的一致,达到验证设计功能的目的。图12为基于Testbench的仿真流程:激励(stimlus)实例化DUT(Design Under Test)自动比较测试结果的正确性使用波形工具比较仿真波形在终端上显示仿真的值,或者存成文件图12. 基于Testbench的仿真流程Fig.12 The simulation flow chart of Testbench从图中可以清晰地看出Testbench的主要功能:(1) 为DUT(Design Under Test,待

37、测设计)提供激励信号;(2) 正确实例化DUT;(3) 将仿真数据显示在终端或者存为文件,也可以显示在波形窗口中以供分析检查;一个Testbench设计好以后,可以为芯片设计的各个阶段服务,比如在对RTL代码,综合网表和布线之后的网表进行仿真的时候,都可以采用同一个Testbench11。将实现CIC滤波器功能的设计呈现在Modelsim环境下进行波形仿真,经过多次的调试和程序修改后,运行的仿真波形图可将CIC滤波器的功能表示出来。图13为CIC滤波器在Modelsim环境下进行波形仿真: 图13. Modelsim波形仿真Fig.13 The wave Simulation of Model

38、sim线网型(net)的变量可以理解为实际电路中的导线,通常用于表示结构体之间的物理连接,就不可以存储任何值,并且一定要受到驱动器额驱动才有效。一个线网型变量可能同时受到几个驱动源的驱动,此时该线网型变量的取值由逻辑强度较高的驱动源决定;如果多个驱动源的逻辑强度相同,则取值为不定态,这和实际电路模型的情况是完全相符的。本设计中y_out被申明为wire型,因此在刚开始仿真的一段时间里y_out的输出值为不定态x。为了便于观察将波形进行缩小,并且将时间轴右移一些得到图14所示的波形图:图14. Modelsim波形仿真Fig.14 The wave Simulation of Modelsim通

39、过观察波形可以知道,每16个时钟周期,y_out输出一个数值,实现了抽取率为16的功能,基本实现了CIC抽取滤波器的功能。在利用Modelsim进行仿真的过程中,首先利用MATLAB产生一个周期为16的正弦波,并从中采样了4096个点存储在sin.txt中,然后将这些数据导入测试程序中,因此为了能够更加直观的观察滤波器的功能,将输入和输出的数据模拟表示为图15。从图15中可以看出:输出的波形较输入波形有一段时间的延时,波形前面一段输出的是直线,是由于积分器和梳状器的延时所导致的输出的不定态X,但输出波形整体上也是一个正弦波,和输入波形保持一致,并且是呈阶梯状的,其中每一个阶梯就是一个抽取因子。

40、Testbench测试文件见附录3,正弦波数据产生程序见附录4。图15. Modelsim波形仿真Fig.15 The wave Simulation of Modelsim6. 结束语:CIC滤波器结构简单,仅有两个功能模块,能够节省资源,并且在工程上易于实现,是一种经济型滤波器。滤波是只做加法运算,无需一般的FIR滤波器所需的乘法运算,大大简化了计算量,从而降低了后续电路的处理速度。文中叙述了CIC滤波器的基本原理及其多级CIC滤波器的具体设计,仿真结果证明了设计方案的正确性和可行性。CIC滤波器是多速率信号处理中的一种重要的部件,在软件无线电中起到了重要的作用,研究它具有重要意义。(Ho

41、genauer还引入了“剪除”理论对每一级的位宽进行裁剪,在实际的应用中,考虑到资源和速度的问题,CIC滤波器应采用剪除理论来实现,文中未做介绍。)参考文献: 1. ZHANG JIAN.CHEN Yan.WANG Hua. Performance Analysis of Cascaded Integrator-Comb Filter in Modulator J.Transaction of Beijing Institute of Technology.2006.26(04).345-3482. 刘福奇.刘 波.Verilog HDL应用程序设计实例精讲M.北京:电子工业出版社.2009.

42、11.189-2053. QainLinjun.Design of CIC Filter Baced on ADC J.Electronic Component &. Device Applications.2009.11(01).44-464. 高明伦. Verilog与PC机接口电路设计M.合肥:安徽科学技术出版社.2002.62-635. 朱明程.现场可编程门阵列器件M.北京:电子工业出版社.1994.12-326. 叶淦华.FPGA嵌入式应用系统开发典型实例M.北京:中国电力出版社.2005.40-417. 刘 凌.胡永生译.数字信号处理的FPGA实现M.北京:清华大学出版社.2002

43、.134-1398. ZhuGuojun.ZhangHao.ZhangZhijun.Implementation of CIC Filter Based on FPGA J.Electronic Science and Technology.2006(11).19-229. 王 冠.黄 熙.王 鹰. Verilog HDL与数字电路设计M.北京:机械工业出版社.2005.30-3210. 程佩青.数字信号处理教程M.北京:清华大学出版社.2000.122-12811. 吴继华,王 城.设计与验证-Verilog HDLM.北京:人民邮电出版社.2006.159-161附录1:%单级CIC滤波器

44、参数m1=2; %延迟因子n1=1; %滤波器阶数r1=32; %抽取因子%三级CIC滤波器的参数m2 = 2;n2= 3;r2= 32; dw=0.01;w=0:dw:1*pi; %计算滤波器的频率响应h1= exp(i*n1*w/2*(1-r1*m1).*(sin(r1*m1*w/2)./sin(w/2).n1;%计算滤波器的频率响应h2=exp(i*n2*w/2*(1-r2*m2).*(sin(r2*m2*w/2)./sin(w/2).n2; plot(w/pi,20*log10(abs(h1),m); %绘制单级CIC滤波器的幅频特性hold on;plot(w/pi,20*log10

45、(abs(h2),b:); %绘制3级CIC滤波器的幅频特性grid on; legend(single stage,three-stage,2)xlabel(Normalized Frequency Relative to the High Sampling Rate(timespirad/sample);ylabel(Magnitude (dB);title(Frequency Response); 附录2:/三级CIC抽取滤波器源代码:module cic3(clk,reset,x_in,y_out);input reset, clk; /输入时钟 input 7:0 x_in; /输入

46、8位数据output 22:0 y_out; /输出22位数据reg derived_clk;reg 3:0 counter;reg 22:0 IntReg01:0,IntReg11:0,IntReg21:0,IntReg3; reg 22:0 ComReg02:0,ComReg12:0,ComReg22:0,ComReg3; /计数器always (posedge clk)begin:COUNTERif(!reset)counter =10) /生成下采样后的时钟 derived_clk = 1; else derived_clk = 0; counter = counter + 1; en

47、dend/积分器实现模块always (posedge clk) begin: INTEGRATOR if(!reset) begin IntReg00 =0; IntReg01 =0; IntReg10 =0; IntReg11 =0; IntReg20 =0; IntReg21 =0; IntReg3 =0; end else begin IntReg007:0 = x_in; IntReg01 = IntReg00; IntReg10 = IntReg01 + IntReg00; IntReg11 = IntReg10; IntReg20 = IntReg11 + IntReg10; I

48、ntReg21 = IntReg20; IntReg3 = IntReg21 + IntReg20;end end/梳状器实现模块 always (posedge derived_clk)begin:COMB if(!reset) begin ComReg00 = 0; ComReg01 = 0; ComReg02 = 0; ComReg10 = 0; ComReg11 = 0; ComReg12 = 0; ComReg20 = 0; ComReg21 = 0; ComReg22 = 0; ComReg3 = 0;end else begin ComReg00 = IntReg3; ComRe

49、g01 = ComReg00; ComReg02 = ComReg01; ComReg10 = ComReg00 - ComReg02; ComReg11 = ComReg10; ComReg12 = ComReg11; ComReg20 = ComReg10 - ComReg12; ComReg21 = ComReg20; ComReg22 = ComReg21; ComReg3 = ComReg20 - ComReg22; end endassign y_out = ComReg3;endmodule 附录1:/Testbench测试文件源代码: timescale 1ns/10ps /定义时间精度module cic3_test; /定义测试模块reg reset,clk;reg 7:0 x_in;wire 22:0 y_out;reg

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论