通信方面的毕业论文
河南机电高等专科学校
毕业设计论文
论文题目:第三代移动通信系统
系 部 电子通信
专 业
班 级
学生姓名
学 号
指导教师
2011年 5月 10日
河南机电高等专科学校毕业设计
目录
摘 要 ..................................................................................................................................................................... I ABSTRACT .......................................................................................................................................................... II
1. 绪 论 ............................................................................................................................................................. 1
1.1 数字滤波器的研义究背景与意 .............................................................................. 1
1.2 数字滤波器的应用现状与发展趋势 ...................................................................... 1
1.3 数字滤波器的实现方法分析 .................................................................................. 3
2 数字滤波器的概述........................................................................................................................................... 4
2.1数字滤波器的基本结构 .............................................................................................. 4
2.2数字滤波器的设计原理 .............................................................................................. 7
2.3 IIR滤波器与FIR滤波器的分析比较 ..................................................................... 11
3数字滤波器的算法设计及仿真 ........................................................................................................................ 14
3.1由模拟滤波器设计IIR数字滤波器 ......................................................................... 14
3.2 用matlab设计数字滤波器 ...................................................................................... 19
3.3将系统函数由直接型化成级联型 ............................................................................ 23
4 IIR带通滤波器的VHDL描述及仿真 ........................................................................................................ 27
4.1 IIR带通滤波器的VHDL描述 ................................................................................ 27
4.2 IR带通滤波器的Modelsim仿真 ............................................................................. 29
总结与展望 .......................................................................................................................................................... 32
致谢 ...................................................................................................................................................................... 33
参考文献 .............................................................................................................................................................. 34
附 录 .................................................................................................................................................................. 35
摘 要
本文分析了国内外数字滤波技术的应用现状与发展趋势,介绍了数字滤波器的基本结构,在分别讨论了IIR与FIR数字滤波器的设计方法的基础上,指出了传统的数字滤波器设计方法过程复杂、计算工作量大、滤波特性调整困难的不足,提出了一种基于Matlab和Modelsim软件的数字滤波器设计方法,完成了高Q值50Hz带通IIR滤波器的设计, 达到了通带45-55Hz,衰减小于3db,阻带40-60Hz,衰减大于80db的参数指标。文中深入分析了该滤波器系统设计的功能特点、实现原理以及技术关键,阐述了使用MATLAB进行带通滤波器设计及仿真的具体方法。最后把整个设计方案用VHDL语言进行了描述并在Modelsim上仿真。Modelsim与Matlab的仿真结果对比说明该设计准确性好,可精确到小数点后六位,稳定后误差小于万分之一;可移植性强,在实际应用中,可根据不同的阶数、精度和速度等要求对IIR 滤波器系数进行灵活的修改,以实现任意阶数的IIR 滤波器。因此,该设计方法可靠性好,效率高,极大的减轻了工作量,有利于滤波器设计的最优化。
关键词 带通滤波器 IIR Matlab VHDL Modelsim仿真;
Abstract
This paper analyzes the situation of application and development of digital filter technology home and abroad. It introduces the basic structure of a digital filter, discusses different design methods of FIR and IIR filter, and points out that the traditional design method of digital filter is not only complex but also of heavy workload, even adjustment of filtering parametrer is very difficult. So it brings forwad another design method of digital filter which based on the Matlab software and Modelsim software. This paper introduces the design method of a high Q value band-pass IIR filter which meets the given standard -- the pass band is 45-55Hz, with attenuation of less than 3db; the stop band is 40-60Hz with attenuation greater than 80db. It deeply analyzes the design features and principles of the filter system and the key technical in the design. Then it describs the use of Matlab in design and simulation of the bandpass filte design. In the end, the procedure was simulated on Modelsim. Simulation results of Modelsim and Matlab compared to make proof of the accuracy of the design. It is proved that the design can be accurate at the sixth decimal place, stable error is within one ten thousandth; The design has good portability and widely practical application. In different applications, according to different performance requirements of order, speed and accuracy, etc, the IIR filter coefficients can change flexibly to make up of IIR filter of arbitrary order; In addition, VHDL procedure can also make certain optimizations, according to the different actual situation, to achieve greater speed or conservation of FPGA resources.
Key words digital filter IIR Matlab VHDL Modelsim simulation
1. 绪 论
1.1 数字滤波器的研义究背景与意
当今,数字信号处理(DSP:Digtal Signal Processing)技术正飞速发展,它不但自成一门学科,更是以不同形式影响和渗透到其他学科:它与国民经济息息相关,与国防建设紧密相连;它影响或改变着我们的生产、生活方式,因此受到人们普遍的关注。
数字化、智能化和网络化是当代信息技术发展的大趋势,而数字化是智能化和网络化的基础,实际生活中遇到的信号多种多样,例如广播信号、电视信号、雷达信号、通信信号、导航信号、射电天文信号、生物医学信号、控制信号、气象信号、地震勘探信号、机械振动信号、遥感遥测信号,等等。上述这些信号大部分是模拟信号,也有小部分是数字信号。模拟信号是自变量的连续函数,自变量可以是一维的,也可以是二维或多维的。大多数情况下一维模拟信号的自变量是时间,经过时间上的离散化(采样)和幅度上的离散化(量化),这类模拟信号便成为一维数字信号。因此,数字信号实际上是用数字序列表示的信号,语音信号经采样和量化后,得到的数字信号是一个一维离散时间序列;而图像信号经采样和量化后,得到的数字信号是一个二维离散空间序列。数字信号处理,就是用数值计算的方法对数字序列进行各种处理,把信号变换成符合需要的某种形式。例如,对数字信号经行滤波以限制他的频带或滤除噪音和干扰,或将他们与其他信号进行分离;对信号进行频谱分析或功率谱分析以了解信号的频谱组成,进而对信号进行识别;对信号进行某种变换,使之更适合于传输,存储和应用;对信号进行编码以达到数据压缩的目的,等等。
数字滤波技术是数字信号分析、处理技术的重要分支。无论是信号的获取、传输,还是信号的处理和交换都离不开滤波技术,它对信号安全可靠和有效灵活地传输是至关重要的。在所有的电子系统中,使用最多技术最复杂的要算数字滤波器了。数字滤波器的优劣直接决定产品的优劣。
1.2 数字滤波器的应用现状与发展趋势
在信号处理过程中,所处理的信号往往混有噪音,从接收到的信号中消除或减弱噪音是信号传输和处理中十分重要的问题。根据有用信号和噪音的不同特性,提取有用信号的过程称为滤波,实现滤波功能的系统称为滤波器。在近代电信设备和各类控制系统中,数字滤波器应用极为广泛,这里只列举部分应用最成功的领域。
(1) 语音处理
语音处理是最早应用数字滤波器的领域之一,也是最早推动数字信号处理理论发展的领域之一。该领域主要包括5个方面的内容:第一,语音信号分析。即对语音信号的波形特征、统计特性、模型参数等进行分析计算;第二,语音合成。即利用专用数字硬件或在通用计算机上运行软件来产生语音;第三,语音识别。即用专用硬件或计算机识别人讲的话,或者识别说话的人;第四,语音增强。即从噪音或干扰中提取
1. 绪 论
1.1 数字滤波器的研义究背景与意
当今,数字信号处理(DSP:Digtal Signal Processing)技术正飞速发展,它不但自成一门学科,更是以不同形式影响和渗透到其他学科:它与国民经济息息相关,与国防建设紧密相连;它影响或改变着我们的生产、生活方式,因此受到人们普遍的关注。
数字化、智能化和网络化是当代信息技术发展的大趋势,而数字化是智能化和网络化的基础,实际生活中遇到的信号多种多样,例如广播信号、电视信号、雷达信号、通信信号、导航信号、射电天文信号、生物医学信号、控制信号、气象信号、地震勘探信号、机械振动信号、遥感遥测信号,等等。上述这些信号大部分是模拟信号,也有小部分是数字信号。模拟信号是自变量的连续函数,自变量可以是一维的,也可以是二维或多维的。大多数情况下一维模拟信号的自变量是时间,经过时间上的离散化(采样)和幅度上的离散化(量化),这类模拟信号便成为一维数字信号。因此,数字信号实际上是用数字序列表示的信号,语音信号经采样和量化后,得到的数字信号是一个一维离散时间序列;而图像信号经采样和量化后,得到的数字信号是一个二维离散空间序列。数字信号处理,就是用数值计算的方法对数字序列进行各种处理,把信号变换成符合需要的某种形式。例如,对数字信号经行滤波以限制他的频带或滤除噪音和干扰,或将他们与其他信号进行分离;对信号进行频谱分析或功率谱分析以了解信号的频谱组成,进而对信号进行识别;对信号进行某种变换,使之更适合于传输,存储和应用;对信号进行编码以达到数据压缩的目的,等等。
数字滤波技术是数字信号分析、处理技术的重要分支。无论是信号的获取、传输,还是信号的处理和交换都离不开滤波技术,它对信号安全可靠和有效灵活地传输是至关重要的。在所有的电子系统中,使用最多技术最复杂的要算数字滤波器了。数字滤波器的优劣直接决定产品的优劣。
1.2 数字滤波器的应用现状与发展趋势
在信号处理过程中,所处理的信号往往混有噪音,从接收到的信号中消除或减弱噪音是信号传输和处理中十分重要的问题。根据有用信号和噪音的不同特性,提取有用信号的过程称为滤波,实现滤波功能的系统称为滤波器。在近代电信设备和各类控制系统中,数字滤波器应用极为广泛,这里只列举部分应用最成功的领域。
(1) 语音处理
语音处理是最早应用数字滤波器的领域之一,也是最早推动数字信号处理理论发展的领域之一。该领域主要包括5个方面的内容:第一,语音信号分析。即对语音信号的波形特征、统计特性、模型参数等进行分析计算;第二,语音合成。即利用专用数字硬件或在通用计算机上运行软件来产生语音;第三,语音识别。即用专用硬件或计算机识别人讲的话,或者识别说话的人;第四,语音增强。即从噪音或干扰中提取
被掩盖的语音信号。第五,语音编码。主要用于语音数据压缩,目前已经建立了一系列语音编码的国际标准,大量用于通信和音频处理。近年来,这5个方面都取得了不少研究成果,并且,在市场上已出现了一些相关的软件和硬件产品,例如,盲人阅读机、哑人语音合成器、口授打印机、语音应答机,各种会说话的仪器和玩具,以及通信和视听产品大量使用的音频压缩编码技术。
(2) 图像处理
数字滤波技术以成功地应用于静止图像和活动图像的恢复和增强、数据压缩、去噪音和干扰、图像识别以及层析X射线摄影,还成功地应用于雷达、声纳、超声波和红外信号的可见图像成像。
(3) 通信
在现代通信技术领域内,几乎没有一个分支不受到数字滤波技术的影响。信源编码、信道编码、调制、多路复用、数据压缩以及自适应信道均衡等,都广泛地采用数字滤波器,特别是在数字通信、网络通信、图像通信、多媒体通信等应用中,离开了数字滤波器,几乎是寸步难行。其中,被认为是通信技术未来发展方向的软件无线电技术,更是以数字滤波技术为基础。
(4) 电视
数字电视取代模拟电视已是必然趋势。高清晰度电视的普及指日可待,与之配套的视频光盘技术已形成具有巨大市场的产业;可视电话和会议电视产品不断更新换代。视频压缩和音频压缩技术所取得的成就和标准化工作,促成了电视领域产业的蓬勃发展,而数字滤波器及其相关技术是视频压缩和音频压缩技术的重要基础。
(5) 雷达
雷达信号占有的频带非常宽,数据传输速率也非常高,因而压缩数据量和降低数据传输速率是雷达信号数字处理面临的首要问题。告诉数字器件的出现促进了雷达信号处理技术的进步。在现代雷达系统中,数字信号处理部分是不可缺少的,因为从信号的产生、滤波、加工到目标参数的估计和目标成像显示都离不开数字滤波技术。雷达信号的数字滤波器是当今十分活跃的研究领域之一。
(6) 声纳
声纳信号处理分为两大类,即有源声纳信号处理和无源声纳信号处理,有源声纳系统涉及的许多理论和技术与雷达系统相同。例如,他们都要产生和发射脉冲式探测信号,他们的信号处理任务都主要是对微弱的目标回波进行检测和分析,从而达到对目标进行探测、定位、跟踪、导航、成像显示等目的,他们要应用到的主要信号处理技术包括滤波、门限比较、谱估计等。
(7) 生物医学信号处理
数字滤波器在医学中的应用日益广泛,如对脑电图和心电图的分析、层析X射线摄影的计算机辅助分析、胎儿心音的自适应检测等。
(8) 音乐
数字滤波器为音乐领域开辟了一个新局面,在对音乐信号进行编辑、合成、以及在音乐中加入交混回响、合声等特殊效果特殊方面,数字滤波技术都显示出了强大的威力。数字滤波器还可用于作曲、录音和播放,或对旧录音带的音质进行恢复等。
(9) 其他领域
数字滤波器的应用领域如此广泛,以至于想完全列举他们是根本不可能的,除了以上几个领域外,还有很多其他的应用领域。例如,在军事上被大量应用于导航、制导、电子对抗、战场侦察;在电力系统中被应用于能源分布规划和自动检测;在环境保护中被应用于对空气污染和噪声干扰的自动监测,在经济领域中被应用于股票市场预测和经济效益分析,等等。
1.3 数字滤波器的实现方法分析
数字滤波器的实现,大体上有如下几种方法:
(1) 在通用的微型机上用软件来实现。
软件可以由使用者自己编写或使用现成的。自IEEE DSP Comm.于1979年推出第一个信号处理软件包以来,国外的研究机构、公司也陆续推出不同语言不同用途的信号处理软件包。这种实现方法速度较慢,多用于教学与科研。
(2) 用单片机来实现。
目前单片机的发展速度很快,功能也很强依靠单片机的硬件环境和信号处理软件可用于工程实际,如数字控制、医疗仪器等。
(3) 利用专门用于信号处理的DSP片来实现。
DSP芯片较之单片机有着更为突出的优点,如内部带有乘法器、累加器,采用流水线工作方式及并行结构,多总线,速度快,配有适于信号处理的指令等,DSP芯片的问世及飞速发展,为信号处理技术应用于工程实际提供了可能。
2 数字滤波器的概述
数字滤波器可以用查分方程、单位取样响应以及系统函数等表示。对于研究系统的实现方法,即它的运算结构来说,用框图表示最为直接。
一个给定的输入输出关系,可以用多种不同的数字网络来实现。在不考虑量化影响时,这些不同的实现方法是等效的;但在考虑量化影响时,这些不同的实现方法性能上就有差异。因此,运算结构是很重要的,同一系统函数H(z),运算结构的不同,将会影响系统的精度、误差、稳定性、经济性以及运算速度等许多重要性能。IIR(无限冲激响应)滤波器与FIR(有限冲激响应)滤波器在结构上有自己不同的特点,在设计时需综合考虑。
2.1数字滤波器的基本结构
作为线形时不变系统的数字滤波器可以用系统函数来表示,而实现一个系统函数表达式所表示的系统可以用两种方法:一种方法是采用计算机软件实现;另一种方法是用加法器、乘法器、和延迟器等元件设计出专用的数字硬件系统,即硬件实现。不论软件实现还是硬件实现,在滤波器设计过程中,由同一系统函数可以构成很多不同的运算结构。对于无限精度的系数和变量,不同结构可能是等效的,与其输入和输出特性无关;但是在系数和变量精度是有限的情况下,不同运算结构的性能就有很大的差异。因此,有必要对离散时间系统的结构有一基本认识。
2.1.1 IIR滤波器的基本结构
一个数字滤波器可以用系统函数表示为: H(z)bzk
k0
N
k1Mk1akzkY(z) X(z)(2-1)
由这样的系统函数可以得到表示系统输入与输出关系的常系数线形差分程为:
可见数字滤波器的功能就是把输入序列x(n)通过一定的运算变换成输出序列y(n)。不同的运算处理方法决定了滤波器实现结构的不同。无限冲激响应滤波器的单位抽样响应h(n)是无限长的,其差分方程如(2-2)式所示,是递归式的,即结构上存在着输出信号到输入信号的反馈,其系统函数具有(2-1)式的形式,因此在z平面的有限区间(0
前面已经说明,对于一个给定的线形时不变系统的系统函数,有着各种不同的等效差分方程或网络结构。由于乘法是一种耗时运算,而每个延迟单元都要有一个存储寄存器,因此采用最少常熟乘法器和最少延迟支路的网络结构是通常的选择,以便提k0k0y(n)aky(nk)bkx(nk) NM(2-2)
高运算速度和减少存储器。然而,当需要考虑有限寄存器长度的影响时,往往也采用并非最少乘法器和延迟单元的结构。
IIR滤波器实现的基本结构有:
(1)IIR滤波器的直接型结构;
优点:延迟线减少一半,变为N 个,可节省寄存器或存储单元;
缺点:其它缺点同直接I型。
通常在实际中很少采用上述两种结构实现高阶系统,而是把高阶变成一系列不同组合的低阶系统(一、二阶)来实现。
(2)IIR滤波器的级联型结构;
特点:
系统实现简单,只需一个二阶节系统通过改变输入系数即可完成;
极点位置可单独调整;
运算速度快(可并行进行);
各二阶网络的误差互不影响,总的误差小,对字长要求低。
缺点:
不能直接调整零点,因多个二阶节的零点并不是整个系统函数的零点,当需要准确的传输零点时,级联型最合适。
(3)IIR滤波器的并联型结构。
优点:
简化实现,用一个二阶节,通过变换系数就可实现整个系统;
极、零点可单独控制、调整,调整α1i、α2i只单独调整了第i对零点,调整β1i、β2i则单独调整了第i对极点;
各二阶节零、极点的搭配可互换位置,优化组合以减小运算误差;
可流水线操作。
缺点:
二阶阶电平难控制,电平大易导致溢出,电平小则使信噪比减小。
a、直接型 b、并联型
c、串联型
图2-1、IIR滤波器的基本结构
2.1.2 FIR滤波器的基本结构
FIR滤波器[7]的单位抽样响应为有限长度,一般采用非递归形式实现。通常的FIR数字滤波器有横截性和级联型两种。
FIR滤波器实现的基本结构有: (1)FIR滤波器的横截型结构
表示系统输入输出关系的差分方程可写作:
N1
y(n)h(m)x(nm) (2-3)
m0
直接由差分方程得出的实现结构如图2-2所示:
图2-2、 横截型(直接型﹑卷积型)
若h(n)呈现对称特性,即此FIR滤波器具有线性相位,则可以简化加横截型结构,下面分情况讨论:
图2-3、N为奇数时线形相位FIR滤波器实现结构 图2-4、N为偶数时线性相位FIR滤波器实现
结构
(2)FIR滤波器的级联型结构
将H(z)分解成实系数二阶因子的乘积形式:
H(z)h(n)zNb0kb1kz1b2kz2 (2-4)
N0k1
这时FIR滤波器可用二阶节的级联结构来实现,每个二阶节用横截型结构实现。如图所示:
N1
[
N]2
图2-5、 FIR滤波器的级联结构
这种结构的每一节控制一对零点,因而在需要控制传输零点时可以采用这种结构。
2.2数字滤波器的设计原理
数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。IIR滤波器的特征是,具有无限持续时间冲激响应。这种滤波器一般需要用递归模型来实现,因而有时也称之为递归滤波器。FIR滤波器的冲激响应只能延续一定时间,在工程实际中可以采用递归的方式实现,也可以采用非递归的方式实现。数字滤波器的设计方法有多种,如双线性变换法、窗函数设计法、插值逼近法和Chebyshev逼近法等等。随着MATLAB软件尤其是MATLAB的信号处理工作箱的不断完善,不仅数字滤波器的计算机辅助设计有了可能,而且还可以使设计达到最优化。 数字滤波器设计的基本步骤如下: (1)确定指标
在设计一个滤波器之前,必须首先根据工程实际的需要确定滤波器的技术指标。在很多实际应用中,数字滤波器常常被用来实现选频操作。因此,指标的形式一般在频域中给出幅度和相位响应。幅度指标主要以两种方式给出。第一种是绝对指标。它提供对幅度响应函数的要求,一般应用于FIR滤波器的设计。第二种指标是相对指标。它以分贝值的形式给出要求。在工程实际中,这种指标最受欢迎。对于相位响应指标形式,通常希望系统在通频带中具有线性相位。运用线性相位响应指标进行滤波器设计具有如下优点:①只包含实数算法,不涉及复数运算;②不存在延迟失真,只有固定数量的延迟;③长度为N的滤波器(阶数为N-1),计算量为N/2数量级。因此,本文中滤波器的设计就以线性相位FIR滤波器的设计为例。 (2)逼近
确定了技术指标后,就可以建立一个目标的数字滤波器模型。通常采用理想的数
字滤波器模型。之后,利用数字滤波器的设计方法,设计出一个实际滤波器模型来逼近给定的目标。
(3)性能分析和计算机仿真
上两步的结果是得到以差分或系统函数或冲激响应描述的滤波器。根据这个描述就可以分析其频率特性和相位特性,以验证设计结果是否满足指标要求;或者利用计算机仿真实现设计的滤波器,再分析滤波结果来判断。
2.2.1 滤波器的性能指标
我们在进行滤波器设计时,需要确定其性能指标。一般来说,滤波器的性能要求往往以频率响应的幅度特性的允许误差来表征。以低通滤波器特性为例,频率响应有通带、过渡带及阻带三个范围。
在通带内: 1- AP≤| H(ejω)| ≤1 |ω|≤ωc 在阻带中: |H(ejω)| ≤ Ast ωst ≤|ω|≤ωc 其中ωc 为通带截止频率, ωst为阻带截止频率,Ap为通带误差, Ast为阻带误差。
与模拟滤波器类似,数字滤波器按频率特性划分为低通、高通、带通、带阻、全通等类型,由于数字滤波器的频率响应是周期性的,周期为2π。各种理想数字滤波器的幅度频率响应
图2-6、低通滤波器频率响应如图所示:
幅度特性的容限图
图2-7、 各种理想数字滤波器的幅度频率响应
2.2.2 IIR数字滤波器的设计方法
目前,IIR数字滤波器设计最通用的方法是借助于模拟滤波器的设计方法。模拟滤波器设计已经有了一套相当成熟的方法,它不但有完整的设计公式,而且还有较为完整的图表供查询,因此,充分利用这些已有的资源将会给数字滤波器的设计带来很大方便,IIR数字滤波器的设计步骤是:
(1)按一定规则将给出的数字滤波器的技术指标转换为模拟滤波器的技术指标; (2)根据转换后的技术指标设计模拟低通滤波器H(s); (3)在按一定规则将H(s)转换为H(z)。
若所设计的数字滤波器是低通的,那么上述设计工作可以结束,若所设计的是高通、带通或者带阻滤波器,那么还有步骤:
(4)将高通、带通或者带阻数字滤波器的技术指标先转化为低通滤波器的技术指标,然后按上述步骤(2)设计出模拟低通滤波器H(s),再由冲击响应不变法或双线性变换将H(s)转换为所需的H(z)。
s - z 映射的方法有:冲激响应不变法、阶跃响应不变法、双线性变换法等。下面讨论双线性变换法。
双线性变换法[8]是指首先把s 平面压缩变换到某一中介平面s1 的一条横带(宽度为2πT,即从- πT到πT) ,然后再利用ze1的关系把s1平面上的这条横带变换到整个z 平面。这样s 平面与z 平面是一一对应关系, 消除了多值变换性, 也就消除了频谱混叠现象。
T
s 平面到z 平面的变换可采用1) (2-5)
2
sT
j
ee
j
1T21T2
ee
s1T2s1T2
j
1T21T2
jj
(2-6)
令 js,j1s1有:
s
ee
s1T2s1T2
ee
1es1T (2-7) 1es1T
s1T
从s1 平面到z 平面的变换,即 ze
(2-8)
1z1
代入上式,得到: s (2-9)
1z1
一般来说,为使模拟滤波器的某一频率与数字滤波器的任一频率有对应关系,可
T
引入代定常数c, c1) (2-10)
2
1z1
则 sc (2-11)
1z1
这种s 平面与z 平面间的单值映射关系就是双线性变换。有了双线性变换,模拟滤波器的数字化只须用进行置换。
2.2.3 FIR数字滤波器的设计方法
IIR滤波器[7]的优点是可利用模拟滤波器设计的结果,缺点是相位是非线性的,若需要线性相位,则要用全通网络进行校正。FIR滤波器的优点是可方便地实现线性相位。
FIR滤波器单位冲激响应h(n)的特点: 其单位冲激响应h(n)是有限长(),系统函数为:
H(z)h(n)zn
n0N1
(2-12)
在有限Z平面有(N-1)个零点,而它的(N-1)个极点均位于原点z=0处。 Fir滤波器线性相位的特点:
如果FIR滤波器的单位抽样响应h(n)为实数,而且满足以下任一条件:
偶对称h(n)=h(N-1-n) 奇对称h(n)=-h(N-1-n)
其对称中心在n=(N-1)/2处,则滤波器具有准确的线性相位。 窗函数设计法: 一般是先给定所要求的理想滤波器频率响应Hd(ej),由Hd(ej)导出hd(n),我们知道理想滤波器的冲击响应hd(n)是无限长的非因果序列,而我们要设计的是hd(n)是有限长的FIR滤波器,所以要用有限长序列hd(n)来逼近无限长序列hd(n),设:
1jj
H(e)ed d2
常用的方法是用有限长度的窗函数w(n)来截取
hd(n)
(2-13)
即:
(2-14)
h(n)(n)hd(n)
这里窗函数就是矩形序列RN(n),加窗以后对理想低通滤波器的频率响应将产生什么样的影响呢?根据在时域是相乘关系,在频域则是卷积关系:
1jj()
H(ej)H(e)W[e]d (2-15) dR
2 其中,
为矩形窗谱, H(ej)是FIR滤波器频率响应.
通过频域卷积过程看的幅度函数H(ω)的起伏现象,可知,加窗处理后,对
理想矩形的频率响应产生以下几点影响:
(1)使理想频率特性不连续点处边沿加宽,形成一个过渡带,其宽度等于窗的频率响应的主瓣宽度。
(2)在截止频率的两边的地方即过渡带的两边,出现最大的肩峰值,肩峰的两侧形成起伏振荡,其振荡幅度取决于旁瓣的相对幅度,而振荡的多少,则取决于旁瓣的多少。(3)改变N,只能改变窗谱的主瓣宽度,改变ω的坐标比例以及改变的绝对值大小,但不能改变主瓣与旁瓣的相对比例(此比例由窗函数的形状决定)。 (4)对窗函数的要求
a、窗谱主瓣尽可能窄,以获取较陡的过渡带;
b、尽量减小窗谱的最大旁瓣的相对幅度;即能量集中于主瓣,使肩峰和波纹减小,增大阻带的衰减。
频率采样法:
窗函数设计法是从时域出发,把理想的hd(n)用一定形状的窗函数截取成有限长的h(n),来近似理想的hd(n),这样得到的频率响应响应到
。
加以等间隔抽样得
,然后以此
作为实际FIR滤波器的频率特性的抽样值H(k),即
Hd(k)Hd(ejw)|
逼近于所要求的理想的频率
频率抽样法则是从频域出发,把给定的理想频率响应
2
k (2-16) N
知道H(k)后,由DFT定义可唯一确定有限长序列 h(n),利用这N个频域抽样值H(k)
同样利用频率内插公式可得FIR滤波器的系统函数H(z),及频率响应
频率抽样法内插公式:
,即:
1zN
H(z)
N
1W
k0
N1
H(k)
k1
Nz
(2-17)
频率抽样法小结 优点:可以在频域直接设计,并且适合于最优化设计。
缺点:抽样频率只能等于 2π/N 的整数倍,或等于2π/N 的整数倍加上π/N。因而不能确保截止频率
的自由取值,要想实现自由地选择截止频率,必须增加抽样点数
N,但这又使计算量增大。
为了提高逼近质量,减少通带边缘由于抽样点的陡然变化而引起的起伏振荡。有目的地在理想频率响应的不连续点的边缘,加上一些过渡的抽样点,增加过渡带,减少起伏振荡。
2.3 IIR滤波器与FIR滤波器的分析比较
前面已经介绍了IIR和FIR数字滤波器的设计方法,选择哪一种滤波器取决于每
种类型滤波器的优点在设计中的重要性。为了能在实际工作中恰当地选用合适的滤波器,现将两种滤波器特点比较分析如下:
(1) 选择数字滤波器是必须考虑经济问题,通常将硬件的复杂性、芯片的面积或计算速度等作为衡量经济问题的因素。在相同的技术指标要求下,由于IIR数字滤波器存在输出对输入的反馈,因此可以用较少的阶数来满足要求,所用的存储单元少,运算次数少,较为经济。例如,用频率抽样法设计一个阻带衰减为20dB的FIR数字滤波器,要33阶才能达到要求,而用双线性变换法只需4~5阶的切比雪夫IIR滤波器就可达到同样的技术指标。这就是说FIR滤波器的阶数要高5~10倍左右。 (2) 在很多情况下,FIR数字滤波器的线性相位与它的高阶数带来的额外成本相比是非常值得的。对于IIR滤波器,选择性越好,其相位的非线性越严重。如果要使IIR滤波器获得线性相位,又满足幅度滤波器的技术要求,必须加全通网络进行相位校正,这同样将大大增加滤波器的阶数。就这一点来看,FIR滤波器优于IIR滤波器。 (3) FIR滤波器主要采用非递归结构,因而无论是理论上还是实际的有限精度运算中他都是稳定的,有限精度运算误差也较小。IIR滤波器必须采用递归结构,极点必须在z平面单位圆内才能稳定。对于这种结构,运算中的舍入处理有时会引起寄生振荡。
(4) 对于FIR滤波器,由于冲激响应是有限长的,因此可以用快速傅里叶变换算法,这样运算速度可以快得多。IIR滤波器不能进行这样的运算。
(5) 从设计上看,IIR滤波器可以利用模拟滤波器设计的现成的闭合公式、数据和表格,可以用完整的设计公式来设计各种选频滤波器。一旦选定了已知的一种逼近方法(如巴特奥兹,切比雪夫等),就可以直接把技术指标带入一组设计方程计算出滤波器的阶次和系统函数的系数(或极点和零点)。FIR滤波器则一般没有现成的设计公式。窗函数法只给出了窗函数的计算公式,但计算通带和阻带衰减仍无显式表达式。一般FIR滤波器设计仅有计算机程序可资利用,因而要借助于计算机。
(6) IIR滤波器主要是设计规格化、频率特性为分段常数的标准低通、高通、带通和带阻滤波器。FIR滤波器则灵活很多,例如频率抽样法可适应各种幅度特性和相位特性的要求。因此FIR滤波器可设计出理想正交变换器、理想微分器、线性调频器等各种网络,适应性很广。而且,目前已经有很多FIR滤波器的计算机程序可供使用。
表2-1、 两种滤波器特点比较分析
3数字滤波器的算法设计及仿真
3.1由模拟滤波器设计IIR数字滤波器
在之前的部分中已经说明,理想的滤波器是非因果的,即物理上不可实现的系统。工程上常用的模拟滤波器都不是理想的滤波器。但按一定规则构成的实际滤波器的幅频特性可逼近理想滤波器的幅频特性,例如巴特奥兹(Butterworth)、切比雪夫(Chebyshev)滤波器和椭圆滤波器等。 3.1.1 巴特奥兹滤波器
巴特沃兹滤波器(Butterworth 滤波器)
特点:具有通带内最大平坦的振幅特性,且随f,幅频特性单调。 其幅度平方函数:
A(2)Ha(j)
2
1j1
jc
2N
(3-1)
N为滤波器阶数,如图
3-1
图3-1、 巴特沃斯滤波器振幅平方特性
通带: 使信号通过的频带 阻带:抑制噪声通过的频带
过渡带:通带到阻带间过渡的频率范围 Ωc :截止频率。
过渡带为零
理想滤波器阻带|H(jΩ )|=0
通带内幅度|H(jΩ)|=cons.
H(jΩ)的相位是线性的
图3-1中,N增加,通带和阻带的近似性越好,过渡带越陡。 通带内,分母Ω/Ωc1, ( Ω/Ωc)2N>1, Ω增加, A(Ω2) 快速减小。
2
1A(c)1
Ω=Ωc, A(),,幅度衰减,相当于3db衰减点。
2A(0)2
2
振幅平方函数的极点
Ha(S)Ha(S)
1(
1S2N
)jc
(3-2)
可见,Butter worth滤波器 的振幅平方函数有2N个极点,它们均匀对称地分布在|S|=Ωc的圆周上。
考虑到系统的稳定性,知DF的系统函数是由S平面左半部分的极点(SP3,SP4,SP5)组成的,它们分别为:
Sp3ce
系统函数为:
2j3
,Sp4c,Sp5ce
2j3
(3-3)
3c
Ha(s)
(SSp3)(SSp4)(SSp5)
令 c 1 ,得归一化的三阶BF:
(3-4)
如果要还原的话,则有
Ha(s)
Ha(s)
1
S32S22S1
(3-5)
1
32
(s/c)2(s/c)2(s/c)1
(3-6)
3.1.2 切比雪夫滤波器
巴特奥兹低通滤波器的幅频特性随Ω的增加而单调下降,当N较小时,阻带幅频特性下降较慢,要想使其幅频特性接近理想低通滤波器,就必须增加滤波器的阶数,这就将导致模拟滤波器使用的原件增多,线路趋于复杂。切比雪夫滤波器[10]的阻带衰减特性则有所改善。
特点:误差值在规定的频段上等幅变化。
巴特沃兹滤波器在通带内幅度特性是单调下降的,如果阶次一定,则在靠近截止频率Ωc处,幅度下降很多,或者说,为了使通常内的衰减足够小,需要的阶次(N)
2
H(j) 。
2
H(j)
切比雪夫滤波器的在通带范围内是等幅起伏的,所以同样的通带衰减,其阶数较巴特沃兹滤波器要小。可根据需要对通带内允许的衰减量(波动范围)提出要求,如要求波动范围小于1db。 振幅平方函数为
A(2)Ha(j)2
1 12V2N
(
)
c
式中 —有效通带截止频率
—与通带波纹有关的参量,大,波纹大,0
Vn(x)—N阶切比雪夫多项式,定义为
V(x)cos(Ncos1
x)
x1Ncosh(Ncosh1
x)
x1
x1时,VN(x)1x1,x,V N(x)
如图3-1,通带内
1,H)2
,变化范围1-1a(j2
c1Ω>Ωc ,随Ω/Ωc ,H2
a(j)→0(迅速趋于零) 当 Ω =0时,
H1a(j)2
0
12
cos[Narccos(0)]1
12cos2(N 2
)N为偶数,H2
a(j)0112
,cos2
(N2
)1(min) , (3-11) N为奇数,H2
a(j)
2
01,cos(N
2
)0(max), (3-12) (3-7)
(3-8)
(3-9)
(3-10)
图3-2、切比雪夫滤波器的振幅平方特性
有关参数的确定:
a. 通带截止频率 ,预先给定 b. 由通带波纹表为c
20lg
Ha(j)maxHa(j)min
20lg
1 (3-13)
10lg(12) (3-14)
给定通带波纹值分贝数 (dB)后,可求。
r时,Ha(j)
2
1
A2
(3-15)
c. 阶数N—由阻带的边界条件确定。(r,A事先给定)
r时,Ha(j)
2
1 A2
(3-16) (3-17)
1
2r12VNc
1
A2
1
2r12VNc
1
2A
(3-18)
h (3-19) N(arco sxx1时, VN(x)cosh
arcos1/
得
N (3-20)
arcosh(rc/)
3.1.3 椭圆滤波器
特点:幅值响应在通带和阻带内都是等波纹的,对于给定的阶数和给定的波纹要求,椭圆滤波器能获得较其它滤波器为窄的过渡带宽,就这点而言,椭圆滤波器[11]是最优的,其振幅平方函数为
(3-21)
式中,RN(Ω,L)为雅可比椭圆函数,L是一个表示波纹性质的参量。
图3-3、 N=5时
的特性曲线
由图可见,在归一化通带内(-1≤Ω≤1),有任意衰减量。
下图为典型的椭园滤波器振幅平方函数:
在(0,1)间振荡,而超过ΩL
后,在L2, ∞间振荡。L越大,ΩL也变大。这一特点使滤波器同时在通带和阻带具
图3-4、 椭圆滤波器的振幅平方函数
图中ε和A的定义与切比雪夫滤波器相同。
当Ωc、Ωs、ε和A确定后,阶次N的确定方法为 :
确定参数kc/s
确定参量k1N=
式中K(k)=
εA1
2
2
K(k)Kk12K(k1)K-k
为第一类完全椭圆积分。
3.2 用matlab设计数字滤波器
传统的数字滤波器的设计过程复杂,计算工作量大,滤波特性调整困难,影响了它的应用。利用MATLAB信号处理工具箱(Signal Processing Toolbox)[12-14]可以快速有效的设计由软件组成的常规数字滤波器的设计方法。给出了使用MATLAB语言进行程序设计和利用信号处理工具箱的FDATool工具进行界面设计的详细步骤。利用MATLAB设计滤波器,可以随时对比设计要求和滤波器特性调整参数,直观简便,极大的减轻了工作量,有利于滤波器设计的最优化。
3.2.1 FDATool界面
FDATool(Filter Design & Analysis Tool)是MATLAB信号处理工具箱里专用的滤波器设计分析工具,MATLAB6.0以上的版本还专门增加了滤波器设计工具箱(Filter Design Toolbox)。FDATool可以设计几乎所有的基本的常规滤波器,包括FIR和IIR的各种设计方法。它操作简单,方便灵活。
FDATool界面总共分两大部分,一部分是Design Filter,在界面的下半部,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。Design Filter部分主要分为:
Filter Type(滤波器类型)选项,包括Lowpass(低通)、Highpass(高通)、Bandpass(带通)、Bandstop(带阻)和特殊的FIR滤波器。
Design Method(设计方法)选项,包括IIR滤波器的Butterworth(巴特沃思)法、Chebyshev Type I(切比雪夫I型)法、 Chebyshev Type II(切比雪夫II型) 法、Elliptic(椭圆滤波器)法和FIR滤波器的Equiripple法、Least-Squares(最小乘方)法、Window(窗函数)法。
Filter Order(滤波器阶数)选项,定义滤波器的阶数,包括Specify Order(指定阶数)和Minimum Order(最小阶数)。在Specify Order中填入所要设计的滤波器的阶数(N阶滤波器,Specify Order=N-1),如果选择Minimum Order则MATLAB根据所选择的滤波器类型自动使用最小阶数。
Frenquency Specifications选项,可以详细定义频带的各参数,包括采样频率Fs和频带的截止频率。它的具体选项由Filter Type选项和Design Method
选项决定,
例如Bandpass(带通)滤波器需要定义Fstop1(下阻带截止频率)、Fpass1(通带下限截止频率)、Fpass2(通带上限截止频率)、Fstop2(上阻带截止频率),而Lowpass(低通)滤波器只需要定义Fstop1、Fpass1。采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。
Magnitude Specifications选项,可以定义幅值衰减的情况。例如设计带通滤波器时,可以定义Wstop1(频率Fstop1处的幅值衰减)、Wpass(通带范围内的幅值衰减)、Wstop2(频率Fstop2处的幅值衰减)。当采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。
Window Specifications选项,当选取采用窗函数设计时,该选项可定义,它包含了各种窗函数,在通带内的衰减为6dB。
图3-5、 FDATool的操作页面
通过菜单选项Analysis可以在特性区看到所设计滤波器的幅频响应、相频响应、零极点配置和滤波器系数等各种特性。设计完成后将结果保存为*.fda文件。
在设计过程中,可以对比滤波器幅频相频特性和设计要求,随时调整参数和滤波器类型,以便得到最佳效果。其它类型的FIR滤波器和IIR滤波器也都可以使用FDATool来设计。
3.2.2 用Fdatool进行带通滤波器设计
给定的数字带通滤波器的参数是:通带为45Hz ~ 55Hz,低截止频率为40Hz,高截止频率为60Hz,通带内衰减不大于3db,阻带衰减大于80db。 借助Matlab仿真,可以得到设计成不同类型的滤波器所需的阶数:
表3-1、采用不同类型滤波器实现所需的阶数
滤波器类型 Kaiser窗函数
最低阶数 201 180 86 26 16 12
稳定性 稳定 稳定 稳定 稳定 稳定 稳定
FIR滤波器 Blackman窗函数
Equirpple Butterworth滤波器
IIR滤波器 ChebishevⅡ滤波器
椭圆滤波器
可见,FIR滤波器阶数过高,导致的直接结果是消耗的资源较多,成本增加。因此采用IIR滤波器实现比较合适。而在IIR滤波器中,椭圆滤波器的阶次最低,切比雪夫次之,巴特沃兹最高,参数的灵敏度则恰恰相反。根据传递函数的形式,巴特沃思和切比雪夫滤波器的传递函数都是一个常数除以一个多项式,为全极点网络,仅在无限大阻带处衰减为无限大,而椭圆函数滤波器在有限频率上既有零点又有极点,极零点在通带内产生等波纹,阻带内的有限传输零点减小了过渡区,可获得极为陡峭的衰减特性曲线。综上考虑,采用椭圆函数滤波器最为适宜。
用以下matlab程序可得到满足给定条件的12阶椭圆滤波器的直接型表示: fs=200;
wp=[45 55]*2/fs; ws=[40 60]*2/fs; ――把截止频率转成弧度表示 rp=3; rs=80; Nn=512;
[n,wn]=ellipord(wp,ws,rp,rs); [b,a]=ellip(n,rp,rs,wn); freqz(b,a,Nn,fs);
[z,p,k]=ellip(n,rp,rs,wn); zplane(z,p);
图3-6、12阶椭圆滤波器的幅频相应和相频响应
图3-7、12阶椭圆滤波器的零极图
图3-6说明12阶椭圆滤波器很好的满足了给定的阻带和通带的衰减。 图3-7说明极点全在单位园内部,因而该椭圆滤波器是稳定的。
a,b分别为分母与分子的系数,即得到的直接型表示为
ibzim
H(z)
az
ii0
i0n
i
(a0=1) (3-22)
3.3将系统函数由直接型化成级联型
由于直接型具有一些共同缺点: (1)系数对滤波器的性能控制作用不明显。
(2)极点对系数的变化过于灵敏,易出现不稳定或较大误差。 (3)运算的累计误差较大。
并且在这个设计中,直接型表示时系数bi和ai的最大值与最小值相差9×104倍,考虑到在乘法器上实现时引入的截断误差很大,因此决定采用6个二阶节级联来实现。 3.3.1 二阶节系数的确定
用matlab函数把直接型系数化成级联型二阶节的系数:
G=1.[**************]×104
数组SOS的每行表示一个二阶节的系数,第1~3列分别是分子上z0、z1、z2的系数,第4~6列分别是分母上z0、z1、z2的系数。
分配给各二阶节的增益分别为:0.[***********],0.[***********],0.[**************]02,0.[**************]02,0.[**************]2,0.[**************]2。
x
g1y
图3-8、 二阶节结构方框图
3.3.2 系数转换成二进制码
若采用24位乘法器,用1位整数位,1位符号位,共22位定点二进制数进行运
[18]
算,负数用补码表示,由此将减法运算变成累加求和运算。各系数可用matlab编程转成二进制补码,转换结果如表:
表3-2、 各系数转成二进制的结果
十进制数 定点24位补码数 0.[***********] [***********]010010 0.[***********] [***********]101001 -0.[***********] [***********]100001 -0.[**************]4 [***********]100100 -0.[***********] [***********]010111 0.[***********] [***********]011111 0.[**************]02 [***********]100101 0.[**************]07 [***********]011100 -0.[**************]79 [***********]110101 -0.[**************]98 [***********]001110 -0.[**************]07 [***********]100100 0.[**************]34 [***********]001011 0.[**************]2 [***********]101110 0.[**************]08 [***********]111001 -0.[**************]86 [***********]100001 -0.[**************]08 [***********]000111 0.[**************]08 [***********]011111 -0.[**************]05 [***********]001010
可用Matlab程序求截断后系数并进行仿真: for i=1:1:6
for j=1:1:6
s= to2(SOS(i,j));SOS1(i,j)=to10(r)+s; end end
r=to2(G);G1=to10(r);
[B,A] = SOS2TF(SOS1,G1); %转成直接型 freqz(B,A,Nn,fs); 系数截断后图形:
图3-9 系数截断后的幅频、相频响应仿真图形
图3-10系数截断后的零极点图
图3-9与图3-10表明使用24位乘法器不会引入截断误差,通带与阻带衰减都符合设计要求。
4 IIR带通滤波器的VHDL描述及仿真
4.1 IIR带通滤波器的VHDL描述
VHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。目前,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。
VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
第三章中已经得到了系统函数的表达式及滤波器系数的24位二进制表示,接下来采用直接运算来实现。负数用补码表式,由此将减法运算变成了加法运算。两个24位小数的数相乘,其积拥有48位小数,在进行加法后对乘积采用定点制截尾量化方式,仍保留24位小数, 将余下的尾数舍去。
在用V HDL 语言进行描写时,设计了一个状态机,用以控制不同二阶节的运算,有0~6,共7个状态,分别对应复位及6个二阶节的运算。用数组变量x1~x6分别表示六个二阶节的输入延时1、2个单位时间的值,数组变量y1~y6分别表示六个二阶节的输出延时1、2个单位时间的值, 数组常量a1~a6,b1~b6分别表示六个二阶节的系数,变量acc 表示乘积累加和, y表示最终的输出。
图4-1、系统状态转换图
当step=0时,对系统进行复位,将所有信号和变量值赋0,step增加1;当step=1时,输入信号为x,采用第一个二阶节的系数进行运算,运算完后将x1、y1、x2、y2移位,step增加1;step=2时,上一次的运算结果y1(1)作为输入信号,采用第二
个二阶节的系数进行运算,运算完后将x1、y1、x2、y2移位, step增加1;依次类推,当step=6时,信号通过第六个二阶节,运算结果y6(1)输出,step赋为1,准备接受新的输入信号。
部分程序如下:
process(rst,clk)
variable acc:signed (47 downto 0);
begin
if rst='1' then step
elsif clk'event and clk='1' then
case(step) is
when 0=>
for i in 2 downto 1 loop
y1(i)'0');
y2(i)'0');
y3(i)'0');
y4(i)'0');
y5(i)'0');
y6(i)'0');
x1(i)'0');
x2(i)'0');
x3(i)'0');
x4(i)'0');
x5(i)'0');
x6(i)'0');
end loop; ――复位
when 1=>
acc:=x1(1)*a1(1)+x*a1(2)+x1(2)*a1(2)+y1(1)*b1(1)+y1(2)*b1(2);
y1(2)
y1(1)
x1(2)
when 2=>
acc:=x2(1)*a2(1)+y1(1)*a2(2)+x2(2)*a2(2)+y2(1)*b2(1)+y2(2)*b2(2);
y2(2)
y2(1)
x2(2)
when 3=> acc:
=x3(1)*a3(1)+y2(1)*a3(2)+x3(2)*a3(2)+y3(1)*b3(1)+y3(2)*b3(2);
y3(2)
y3(1)
x3(2)
when 4=> acc:
=x4(1)*a4(1)+y3(1)*a4(2)+x4(2)*a4(2)+y4(1)*b4(1)+y4(2)*b4(2);
y4(2)
y4(1)
x4(2)
when 5=> acc:
=x5(1)*a5(1)+y4(1)*a5(2)+x5(2)*a5(2)+y5(1)*b5(1)+y5(2)*b5(2);
y5(2)
y5(1)
x5(2)
when 6=> acc:
=x6(1)*a6(1)+y5(1)*a6(2)+x6(2)*a6(2)+y6(1)*b6(1)+y6(2)*b6(2);
y6(2)
y6(1)
x6(2)
end case;
if step
end if;
end if;
y
end process;
4.2 IR带通滤波器的Modelsim仿真
ModelSim是业界最优秀的HDL语言仿真器。它提供最友好的调试环境,是唯一的单内核支持VHDL和Verilog混合仿真的仿真器。是作FPGA/ASIC设计的RTL级和门级电路仿真的首选,它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段。全面支持VHDL和Verilog语言的IEEE 标准,支持C/C++功能调用和调试。ModelSim专业版,具有快速的仿真性能和最先进的调试能力,全面支持UNIX(包括64位)、Linux和Windows平台。主要特点:RTL和门级优化,本地编译结构,编译仿真速度快;单内核VHDL和Verilog混合仿真;源代码模版和助手,项目管理;集成了性能分析、波形比较、代码覆盖等功能;数据流ChaseX;Signal Spy;C和Tcl/Tk接口,C调试。
ModelSim最大的特点是其强大的调试功能:先进的数据流窗口,可以迅速追踪到产生不定或者错误状态的原因;性能分析工具帮助分析性能瓶颈,加速仿真;代码覆盖率检查确保测试的完备;多种模式的波形比较功能;先进的Signal Spy功能,可以方便地访问VHDL 或者VHDL和Verilog混合设计中的底层信号;支持加密IP;可以实现与Matlab的Simulink的联合仿真。
4.2.1 仿真波形
在Modelsim中添加了工程之后经过编译与仿真,可以得到仿真波形[22],能方便的追踪到信号的变化,以便调试及查错。在数字滤波器的输入端加入二进制定点数据[***********]000000 ,此信号为单位阶跃信号,输出即为滤波器的阶跃响应。仿
真波形如下:
图4-2、 Modelsim仿真波形
4.2.2 仿真输出
下面将滤波器的单位阶跃响应的仿真结果在n = 0,2,4,6,8,10的值,用Matlab编程把16进制小数转成10进制后(程序见附录1),与Matlab的计算值进行比较:
误差仿真输出 转换成10进制数 Matlab计算值 (104) (16进制数)
000320
FFFFC63
000C4D
FFEE91
002150
FFD010 0.[1**********]328 0.[1**********]567 0.[1**********]559 -0.[1**********]853 0.[1**********]258 0.[1**********]273 0.[1**********]870 -0.[1**********]524 0.[1**********]508 -0.[1**********]045 0.[1**********]417 -0.[1**********]380 14.34 5.21 2.94 0.93 1.52 0.11
从上面的计算对比可以看出,仿真输出值与Matlab 理论计算值存在一定的误差,这是因为程序中只用了24位小数来表示抽样值及滤波器系数,且乘积相加后的数据采用定点制截尾量化方式,形成了一定的误差。在n = 0 时的误差最大,这是因为此时它的单位阶跃响应值本身就很小,采用相乘后48位小数直接取24位小数的截尾量化方式,产生
的误差就大一些。随着n 值或时间的增加,误差趋小,接近理论值。为了减小误差,可以增加小数的位数及采用定点制舍入原则量化等方法。
总结与展望
经过长达三个月之久的系统设计和制作,该设计已经达到所有预期的功能需求。采用Matlab仿真软件对高Q值50hz带通滤波器进行设计,确定滤波器的类型及系数,把直接型转换成级联型,并确定二阶节的系数。把整个设计方案用VHDL语言进行描述,采用24位乘法器及48位加法器,运算结果采取直接截取24位的结尾量化方式。最后在Modelsim上进行仿真。Modelsim仿真结果matlab的仿真结果对比说明该设计准确性好,可精确到小数点后六位,稳定后误差小于万分之一;可移植性强,在实际应用中,可根据不同的阶数、精度和速度等要求对IIR 滤波器进行灵活的修改,以实现任意阶数的IIR 滤波器。另外,应用VHDL 编程时还可根据不同的实际情况作出一定的优化,以达到提高速度和节约FPGA 资源的目的。
本次毕业设计所涉及到的主要知识是EDA方面的。我将把我本次毕业设计的心得和体会简述如下:
(1) 类型寻优 确定好所需要设计的滤波器用途后,首先对其进行性能需求分析,明确该系统应该达到的各种性能指标,其次,拟定多种滤波器类型,对这些方案采用Matlab进行仿真,进行综合分析和比较,选择出最佳的滤波器类型作为本设计方案,然后,依据其性能指标编写matlab程序,确定二阶节系数。
(2) 系统思维 必须有系统的设计思维,把每一个细节都放到整个系统中考虑,考虑整个系统设计的可行性、完整性、稳定性和功能的实现,这样才不会局限在细节上,才能快速的完成性能优越的硬件设计。
(3) 把握细节 系统也是由细节构成的,在把握整个系统思维的基础上把握每一个细节,因为每一个细节都有可能决定整个系统的性能。在写VHDL代码时,把每一个变量与过程考虑清楚才可能完成整个程序。
(4) 勇于尝试 系统即使经过了非常严格的论证也仍然可能存在问题,或许面对问题一时没有很好的解决方案,但是有一个或许可行的大胆的想法,不要犹豫,试一试吧。勇于尝试往往能够找到更好的解决方法。
(5) 保持自信 无论遇到什么困难,我都相信自己一定能够找到解决的方法,有的时候只要稍微再用一点力、使一点劲,结果就会不一样。
致谢
首先,感谢高等学校教育部门制定了专科生毕业论文(设计)的重要实践教学环节。毕业论文(设计)是学生毕业前全面素质教育的重要实践训练,其目的是为了培养学生科学的思维方式和正确的设计思想,综合运用所学理论、知识和技能分析和解决实际问题的能力。通过本次毕业设计,我觉得自己无论在理论知识方面还是在综合实践能力方面都得到了很大的提高。
其次,向我的导师老师致以诚挚的谢意。X老师学识渊博、治学严谨,平易近人,为我营造了一种良好的精神氛围。在本次专科生毕业设计的过程中,X老师给予了我许许多多的关怀和帮助。我是应用通信网络与设备专业的学生,微电子方面的专业基础知识不够全面,经常遇到一些问题,X老师总是耐心的给我讲解,还从这个问题延伸开去,让我领会到更高层次的看待问题的方式。不仅让我开拓了视野,领会了基本的思考方式,掌握了通用的研究方法,而且还明白了许多待人接物的道理。
同时,我要感谢我们学院给我们授课的各位老师,正是由于他们的传道、授业、解惑,让我学到了许多知识,并从他们身上学到了如何求知治学、如何为人处事。我也要感谢我的母校河南机电高等专科学校,是她提供了良好的学习环境和生活环境,让我的大学生活丰富多姿,为我的人生留下精彩的一笔。
衷心感谢我的室友和同学们,我们一起学习、一起研究,共同进步,平日里大家关于毕业设计的讨论给了我很多启发,我在次深表谢意。最后,向我的亲爱的家人表示深深的谢意,他们给予我的爱、理解、关心和支持是我不断前进的动力。
愿所有的老师、同学们、朋友们合家欢乐,一生平安!
参考文献
1 刘令普.数字信号处理[M].哈尔滨:哈尔滨工业大学出版社,2002。
2 邓重一.滤波器的过去、现在与未来[J].世界电子元器件.2003,13(4):48~49 3 邓重一.滤波技术的发展现状[J].中国仪器仪表.2004,(02):1~4
4 李洪伟,张长明.LMS自适应算法设计FIR、IIR数字滤波器的应用及比较[J].现代电
子技术.2005,(15):79~80
5 Oppenheim A V,Schafer R W.Digital signal processing[M].Englewood Cliffs,NJ:
Prentice-Hall,1975。
6 王世一.数字信号处理[M].北京:北京理工大学出版社,2005。
7 李行一.数字信号处理[M].重庆:重庆大学出版社,2002。
8 刘正士,王勇,陈恩伟,葛运建.一种数字滤波器的设计方法及其应用[J].中国机械
工程.2006,17(1):88~91
9 叶榆,贺国权.基于Pspice的八阶巴特沃斯低通滤波器设计与优化[J],山西电子技术
,2006.(3):61~63
10 谢子常,徐水明.数字切比雪夫滤波器的设计及MATLAB仿真[J],福建电脑,2004.(5)
:31~32
11 王田.Celestino A Corral.杨士中.椭圆函数滤波器边带特性优化方法[J],电路与
系统学报,2005.10(5):2~4
12 丁磊,潘贞存,丛伟.基于MATLAB信号处理工具箱的数字滤波器设计与仿真[J].继电
器. 2003, 31 (9):49~51
13 张亚妮,基于MATLAB的数字滤波器设计[J],辽宁工程技术大学学报 2005.24(5):
716~718
14 杨大柱.MATLAB 环境下FIR 滤波器的设计与仿真[J].集成电路应用.2006,(9):101
~107
15 刘波.MATLAB信号处理[M].北京:电子工业出版社,2006。
16 倪向东.基于FPGA的四阶IIR数字滤波器[J].基础电路应用.2003,(12):66~69 17 严三国.基于VHDL语言的八阶IIR 语音低通数字滤波器[J].林航天工业高等专科学
校学报.2005,(4):12~16
18 刘卫国,陈昭民,张颖.Matlab程序设计与应用[M].北京:高等教育出版社,2002。 19 谭会生,EDA技术基础[M],长沙:湖南大学出版社,2004.
20 赖联有,吴伟力,许伟坚.基于FPGA的FIR滤波器设计[J].集美大学学报(自然科学版
) .2006,11(4):347~350
21 张凯,林伟.vhdl实例剖析[M].北京:国防工业出版社,2004。
22 徐大鹏,李从善.基于FPGA的数字图像中值滤波器设计[J].电子器件.2006,29 (4) :
1114~1117
附 录
附录一、部分程序源码:
1、十进制小数转换为24位二进制补码的程序 function a =to2(x)
%x为小于2的十进制小数;
%a为x对应的24位二进制补码
if x>0
b(0)=0;
else b(0)=1;
b(1)=fix(x);
for i=1:1:22
b(i+1)=fix(x*2);
t=x*2-b(i+1);
x=t;
end
c=[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] if x
for i=1:1:23
a(i)= xor (b(i) c(i))
end
end
2、二进制补码转换成十进制小数的程序 function y =to10(a)
y=0;
for i=3:1:24
t=y;y=a(i)*2^(-i+2)+t;
end
if a(1,2)==’11’
y=-y;
elseif a(1,2)==’10’
y=-1-y;
elseif a(1,2)==’01’
y=y+1;
end
3、实现滤波器设计的vhdl代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_signed.all;
use ieee.std_logic_unsigned.all;
entity iir is
port(x:in signed(23 downto 0);
rst,clk:in std_logic;
y:out signed(23 downto 0)
);
end entity;
architecture iir_arch of iir is
type arr1 is array (1 to 2) of signed (23 downto 0);
signal x1,x2,x3,x4,x5,x6:arr1;
signal y1,y2,y3,y4,y5,y6:arr1;
signal step:integer range 0 to 6;
constant a1:arr1:=("[***********]101000","[***********]010010") ; constant a2:arr1:=("[***********]011000","[***********]010010") ; constant a3:arr1:=("[***********]011100","[***********]100101") ; constant a4:arr1:=("[***********]100100","[***********]100101") ; constant a5:arr1:=("[***********]111100","[***********]101101") ; constant a6:arr1:=("[***********]000100","[***********]101101") ; constant b1:arr1:=("[***********]100010","[***********]100101") ; constant b2:arr1:=("[***********]011110","[***********]100101") ; constant b3:arr1:=("[***********]110101","[***********]001110") ; constant b4:arr1:=("[***********]001011","[***********]001110") ; constant b5:arr1:=("[***********]100010","[***********]001010") ; constant b6:arr1:=("[***********]011110","[***********]001010") ; begin
process(rst,clk)
variable acc:signed (47 downto 0);
begin
if rst='1' then step
elsif clk'event and clk='1' then
case(step) is
when 0=>
for i in 2 downto 1 loop
y1(i)'0');
y2(i)'0');
y3(i)'0');
y4(i)'0');
y5(i)'0');
y6(i)'0');
x1(i)'0');
x2(i)'0');
x3(i)'0');
x4(i)'0');
x5(i)'0');
x6(i)'0');
end loop;
when 1=>
acc:
=x1(1)*a1(1)+x*a1(2)+x1(2)*a1(2)+y1(1)*b1(1)+y1(2)*b1(2);
y1(2)
x1(2)
when 2=> acc:
=x2(1)*a2(1)+y1(1)*a2(2)+x2(2)*a2(2)+y2(1)*b2(1)+y2(2)*b2(2); y2(2)
y2(1)
x2(2)
when 3=> acc:
=x3(1)*a3(1)+y2(1)*a3(2)+x3(2)*a3(2)+y3(1)*b3(1)+y3(2)*b3(2); y3(2)
y3(1)
x3(2)
when 4=> acc:
=x4(1)*a4(1)+y3(1)*a4(2)+x4(2)*a4(2)+y4(1)*b4(1)+y4(2)*b4(2); y4(2)
y4(1)
x4(2)
when 5=>
acc:
=x5(1)*a5(1)+y4(1)*a5(2)+x5(2)*a5(2)+y5(1)*b5(1)+y5(2)*b5(2); y5(2)
y5(1)
x5(2)
when 6=> acc:
=x6(1)*a6(1)+y5(1)*a6(2)+x6(2)*a6(2)+y6(1)*b6(1)+y6(2)*b6(2); y6(2)
y6(1)
end case;
if step
end if;
end if;
y
end process;
end iir_arch;;