FFT滤波器与FIR滤波器性能比较分析_第1页
FFT滤波器与FIR滤波器性能比较分析_第2页
FFT滤波器与FIR滤波器性能比较分析_第3页
FFT滤波器与FIR滤波器性能比较分析_第4页
FFT滤波器与FIR滤波器性能比较分析_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、分类号:TP311.1 U D C: 密 级:公 开 编 号: 学位论文FFT滤波器和FIR滤波器性能比较分析论文作者姓名:申请学位专业:通信工程申请学位类别:工学学士指导教师姓名(职称):论文提交日期:2015年5月25日FFT滤波器和FIR滤波器性能比较分析摘 要二十一世纪标志着数字化时代的来临,随着信息科技的快速发展,数字信号处理技术(DSP)已经发展成为信息产业之中的重要技术。它在通讯、电力系统、仪器自动化、遥感技术等技术领域得到了普遍的应用。与模拟滤波器相比,数字滤波器拥有稳定性高,精度高。设计方式灵活等重要的优点,没有模拟滤波器所存在的电压漂移和噪声等问题。并且拥有接近于理想的频率

2、响应特性。这些优势注定了数字滤波器会得到广泛的应用。这其中,有限冲击响应滤波器(FIR滤波器)能够在保证幅度特性满足技术要求的同时,保证严格的线性相位特性。在数据传输,语音技术等方面应用广泛。同时,DSP的发展和FPGA技术的出现为数字滤波器的硬件实现提供了多样化的选择。本课题主要应用C+语言设计FIR滤波器以及FFT滤波器,并对所设计的滤波器进行仿真。应用Microsoft Visual Studio 2010编译调试程序。主要运用窗函数设计法设计滤波器。学术中比较常用的窗函数有以下几种:矩形窗函数,三角形窗函数,汉宁窗函数,海明窗函数,布莱克曼窗函数。通过这几种窗函数来分析两种滤波器在时间

3、开销、幅度误差、相位误差等方面的差异。关键字:数字信号技术 滤波器 FIR FFT 模型仿真 窗函数Comparative analysis of FFTfilter and FIR filterperformanceAbstractThe 21st century is the era of digital, with the rapid development of information technology, digital signal processing (DSP) technology has become an important technology in informat

4、ion industry.Ithas been widely usedin the field of high-techcommunications,power systems, instrumentautomation,remote sensingetc.Compared withanalog filter,digital filterhas high stability,high precision.The designis flexibleand other importantadvantages,noproblem existingsimulationfiltervoltagedrif

5、t and noiseetc.And haveclose to theideal frequency response.Thiskind of advantagetodigital filterwill be widely used.Among these, the finite impulse response (FIR) filter can in the guarantee range characteristics to meet technical requirements at the same time, to ensure the strict linear phase cha

6、racteristics.Indata transmission,voicetechnologyhas been applied widely.At the same time,provides adiverse selection ofDSPdevelopment and FPGA technologyfor the realization ofdigital filterhardware.The main comppiling language of designing theFIR filterandFFT filter in this paper is C+ language.Debu

7、gging programs through The application of MicrosoftVisualStudio 2010. Academic commonly used window function is the following: Rectangular window function, Bartlett window function, Hanning window function, Hamming window function, Blackman window function.Through the analysisof several window funct

8、ions to finddifferences between the two kinds of filters,and the difference of amplitude error andphase error.Keywords:Digital signaltechnology FIR filter simulation window function第一章 绪论11.1课题研究的背景与意义11.2数字滤波器的实现方法11.3本文的主要研究内容2第二章 FIR滤波器基础32.1FIR滤波器的概念32.2 FIR滤波器的特点32.3 FIR滤波器的设计方法42.3.1利用窗函数法设计FI

9、R滤波器4(一) 窗函数法设计FIR滤波器的基本思想42.3.2 运用频率抽样法设计FIR滤波器72.3.3 运用切比雪夫逼近法设计FIR滤波器82.4 FFT滤波器的滤波原理10第三章 基于C+的滤波器设计及仿真123.1 C+及MFC的简介123.2 基于C+的滤波器设计及仿真133.2.1 设计要求133.2.2 仿真过程143.2.3 FIR滤波以及FFT滤波的性能分析24第四章 总 结31参考文献32致谢33声 明34第一章 绪论1.1课题研究的背景与意义随着科技和信息技术的快速发展,数字信号处理技术在电子技术、仪器自动化、数控机床等诸多领域得到了广泛应用,数字信号滤波器作为数字信号

10、处理技术之中的一个重要工具,可以用来过滤离散信号和数字信号。在数字信号处理技术之中,数字滤波器占有极其重要的地位。FIR滤波器的基本概念 FIR滤波器是指有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而FIR滤波器是稳定的系统。因此,FIR滤波器在通信、声音图像处理等领域都有着广泛的应用。FFT的滤波功能源自DFT运算与复调制滤波器组运算的相似性,近年来FFT作为复调制滤波器组的快速算法在图像传输、信道化处理等领域得到了广泛应用。但是在实际工程设计之中,FFT的滤波输出常常与预期的效果存在差异,

11、差异主要表现在时域波形畸变、起始部分数据丢失等,可能造成后续数据处理产生严重误差,工程中只能通过反复调整其低通原型滤波器来接近预期效果。FIR滤波器是时间域卷积,FFT滤波过程是频域卷积。本文主要是对FFT滤波器和FIR滤波器的滤波原理进行分析,进行推证,分析两种滤波器在时间开销、幅度误差、相位误差等方面的差异。1.2数字滤波器的实现方法目前为止,数字滤波器的主要实现方法有:一:在微型计算机上用软件实现软件可以是自己编写,也可以使用现成的软件包。这种方法并不能适用于实时的系统,只能用于教学和仿真研究。例如,在MATLAB下几乎可以实现所有种类的数字滤波器的仿真研究。再如本篇论文之中应用C+语言

12、实现仿真程序。二:用DSP(Digital Signal Prosessing)芯片实现DSP芯片是专门为数字信号的处理设计的。例如TI公司的TMS320C54X系列,还有AD公司的ADSP系列,它们的主要运算单元是乘法累加器(Multiply-accumulator),具备特别的循环寻址和倒序寻址功能。非常有利于数字信号处理技术之中的滤波器的有效实现。三:用固定功能的信号处理器实现专用信号处理器采用专用集成电路实现,适用于过程固定而追求高速的信号处理任务。它们的优点是体积小、保密性好,具有极高的性能,但灵活性差。四:用FPGA等可编程器件模拟开发数字滤波算法现如今,FPGA产品层出不穷,人们

13、可以利用Atera、Xilinx等公司提供的产品,使用他们公司的相关开发工具和硬件开发语言,通过软件编程然后运用硬件实现特定的数字滤波算法。这一方法目前是比较活跃的研究领域。相关研究开发的项目在国内外都非常充足。相比较以上的几种方法,本课题设计的FIR滤波器以及频域上的TFT滤波器将采用C+语言进行设计和仿真,并且对比两种滤波器的滤波性能的差别。1.3本文的主要研究内容本课题主要应用C+语言设计FIR以及FFT滤波器,并对所设计的滤波器进行仿真。应用Microsoft Visual Studio 2010编译调试程序。具体工作包括:对FIR数字滤波器的基本理论进行研究和分析。应用窗函数法设计F

14、IR滤波器,用到的窗函数有以下几种:矩形窗函数,三角形窗函数,汉宁窗函数,海明窗函数,布莱克曼窗函数。然后在比较几种常见波形经过两种滤波器之后的输出序列以及输出序列频谱的差异。第二章 FIR滤波器基础2.1FIR滤波器的概念FIR滤波器是一种线性时不变(Linear Time-Invariant)滤波器,它的N 阶输出响应是由输入的时间序列与滤波器系数卷积计算得出的,具体公式如下: (2.1)FIR数字滤波器的基本网络结构类型有直接型、级联型、快速卷积型、线性相位型等网络类型。其中最基本也是最重要的的网络结构是直接型网络结构,它是了解其它网络结构的基础,因而首先介绍的是FIR 数字滤波器的直接

15、型网络结构,如图2.1 所示。 对上图中的网络结构信号流图进行颠倒信号流、交换输入输出的方向等变换可以得到FIR滤波器的转置型网络结构,其结构如图2.2 所示。 2.2 FIR滤波器的特点在数字信号处理技术之中,往往需要设计线性相位滤波器。FIR滤波器是一种能够保证幅度特性满足技术要求的同时做到严格的线性相位特性。FIR滤波器连续性的对输入样本x(n)进行延时操作,然后再作乘法累加算法将滤波结果y(n)输出,因此,FIR滤波器实际上是一种乘法累加运算。在数字滤波器中,FIR滤波器的一个重要特点是没有反馈回路,所以不存在不稳定的问题;同时,可以在幅度特性满足要求的同时保证精确的线性相位。线性相位

16、特性是FIR滤波器的突出优点。另外,它还有以下特点:过渡过程是一个有限区间;相对IIR滤波器而言,阶次更高,延迟也要更高。2.3 FIR滤波器的设计方法FIR数字滤波器的设计方法主要有窗函数设计法、频率抽样设计法、切比雪夫逼近法等。其中窗函数设计法是最基本的设计方法。在设计FIR滤波器中,最重要的计算就是加窗,采用矩形窗是最直接的方法,但采用矩形窗存在较大的Gibbis效应,因此实际设计中一般采用其他类型的窗函数。2.3.1利用窗函数法设计FIR滤波器(1) 窗函数法设计FIR滤波器的基本思想窗函数法设计FIR滤波器的基本思想是,选取一种合适的理想频率选择性滤波器,然后将它的脉冲响应截断,得到

17、一个线性相位的FIR滤波器。因此这种方法的重点在于选择哪一种合适的窗函数和哪一种理想滤波器。对于工程项目给定的滤波器技术指标,选择具有最窄主瓣宽度和尽可能小的旁瓣衰减的某个窗函数。所有的数字滤波器的频率响应都是的周期函数,傅里叶级数展开式为: (2.1)其中,(2.2)公式中的是滤波器的归一化截止频率。而傅里叶系数则是理想数字滤波器的冲击响应。但是Gibbs现象使得直接截取法的结果令人失望。窗函数就是用,窗函数的有限加权序列来修正公式(2.2)中的傅里叶级数。来求得所需要的有限冲击响应序列,即得到: (2.3)是有限长的序列,当及时,(二)工程中常用的窗函数类型日常工程中常用的几种窗函数是:矩

18、形窗函数,三角形窗函数,汉宁窗函数,海明窗函数,布莱克曼窗函数。这几种窗函数的对比情况见表2-1。为了满足工程的需要,窗函数的选择原则是:(1)窗函数必须具有较低的旁瓣幅度,其中尤其是第一旁瓣幅度;(2)窗函数的旁瓣幅度下降速度要比较大,以利于增加阻带衰减;(3)窗函数的主瓣的宽度要窄,以获得比较陡的过渡带。但是在实际的运用过程中,上述三点很难同时满足。当选用主瓣宽度较窄的窗函数时,虽然能够得到较陡的过渡带,但是弊端就是,通带和阻带的波动明显增加;当选用最小的旁瓣幅度的窗函数时,虽然能够得到均匀光滑的幅度响应和较小的阻带波动,但是缺点就是过渡带加宽。因此,实际选用的窗函数往往是他们之中弊端最小

19、的那种。在保证主瓣宽度达到系统要求的同时,稍微牺牲主瓣的宽度来换取旁瓣波动的减少。(1) 汉宁窗汉宁窗函数又称升余弦窗。这三部分的总和,使旁瓣的能量互相抵消,从而使能量更集中在主瓣,根据计算,它的最大旁瓣值比主瓣值大约低31dB。但是所需要付出的代价就是主瓣宽度比矩形窗的主瓣宽度增加大约一倍,为:。(2) 海明窗海明窗函数又称为改进的升余弦窗。将升余弦窗再进一步的改进,可以得到旁瓣更小的加窗效果,该窗的形式为: (2.7)的频响幅度特性为: (2.8)该窗与汉宁窗相对比,它们得到主瓣宽度相同,都为,但是改窗的旁瓣被进一步压低,可以将99.963%的能量集中在主瓣内,它的最大旁瓣值比主瓣值大约要

20、低41dB。(3)布莱克曼窗布莱克曼窗函数又称为二阶升余弦窗。为了进一步抑制旁瓣,在升余弦窗函数的基础上再加上一个二次谐波的余弦分量,这样就变成了布拉克曼窗,正是这样,它又称为二阶升余弦窗。(4)凯塞窗这是一种适应性比较强的窗函数,也是一种性能最优异的窗。它是在给定阻带衰减下,得到一种大的主瓣宽度意义上的最优结果,这个过程本身就暗含着它拥有最陡峭的过渡带。它的公式为: (2.11)公式中,是第一类变形零阶贝赛尔函数,而参数是一个可以自由选择的参数。以下为凯塞窗的优点:该窗可以提供变化的过渡带宽,而且可以通过改变的值能够达到最陡的过渡带;该窗具有能够与海明窗相互匹敌的特性,通过调整的值,可以将凯

21、塞窗函数完全等价于海明窗函数;该窗最大旁瓣值比主瓣大约要低80dB,是所有的窗函数中旁瓣抑制度最高的。2.3.2 运用频率抽样法设计FIR滤波器所谓的频率抽样法就是指,从频域出发,根据频域采样定理,对给定的滤波器的频域相应进行相同间隔采样。将当做需要设计的滤波器频率响应的采样值,通过以下的公式就可以求出该滤波器的系统函数和频响。因为通过频谱的有限个采样值所恢复出来的频率响应,其实实际上是对理想频率响应逼近。所以这种方法肯定有逼近误差。若该被逼近的频率响应比较顺滑,那么各采样点之间的逼近误差就比较小;若被逼近的频率响应比较突兀,则逼近误差比较大。如果想要提高逼近的质量,能够采用人为的扩展过渡带的

22、方法,就是在频率所对应的过渡带内插入多个连续的采样点,使过渡带连续,因此通带和阻带之间变化就会变得缓慢,导致所设计的滤波器对理想滤波器的逼近误差比较小。2.3.3 运用切比雪夫逼近法设计FIR滤波器上文所论述的两种方法所设计的FIR滤波器的频率响应都不是非常理想,主要缺点就是通带不够平整,阻带衰减不够大,过渡带过于宽阔,频率边缘并不能够精确的指定。切比雪夫逼近法是最佳的逼近法。切比雪夫逼近法在数字信号处理技术之中占有极其重要的地位,也是设计FIR数字滤波器最理想的方法。但是,该方法的原理较为复杂,比较难以理解。数字滤波器频域设计的最佳方法就是等波纹切比雪夫法,它是采用最大误差最小准则所得到的最

23、优数字滤波器。最优设计实际上就是调节FIR滤波器在Z域上零点的分布,使实际滤波器的频响与理想滤波器的频响两者之间的最大绝对误差最小。对于I型FIR数字滤波器,其频响可表示为: (2.16)式中,为数字滤波器的系数,为数字滤波器的阶数。接下来,我们将分析广泛使用的算法Parks-McClellan算法。这个算法的基础是,将数字滤波器的设计问题用公式表示成为多项式逼近的问题。这个算法将数字滤波器阶数、带沿频率和。以及通带和阻带的最大误差比所固定,然后令或为变量,接着改变()个非限制的脉冲响应值,从而满足系统的设计指标。 公式(2.16)可以改写为: (2.17)式中,是一个与相关联的常数。然后定义

24、逼近误差函数为: (2.18)式中,是加权函数,要求,和在且只在 的区间上有定义。而最大误差最小准则即是在,所要求频域上找出能够使公式(218)的最大加权逼近误差达到最小的频率响应。最佳逼近就是在意义上所求的逼近。这里F是的闭合子集。该给定阶次的多项式的最大加权误差为最小的充要条件,是由交替定理给出的。它的表达式为:公式之中,为最优误差。公式(2.19)(2.20)说明了逼近误差至少都要有个交错点,从而使得最小,同时保证唯一存在。由公式(2.17)、(2.19)可以解出系数组与。除此之外,另外一种更加有效的方法是多项式内插公式,可以求得:这之中,如果由满足公式(2.17)、(2.19)所确定的

25、而且是由公式(2.21)所给出,那么误差函数就会通过个频率上的点处。正是如此,为了避免求解(2.17)、(2.19)两个比较复杂的方程来得出所需要的系数,Parks-McClellan先生采用拉格朗日多项式内插公式,得出:通过公式(2.22)可以计算通带和阻带之中许多处频域的和的值。如果对于通带和阻带之中所有的,都有,那么就说明已经达到了最佳逼近。否则,就要计算出新的极值频率。2.4 FFT滤波器的滤波原理为了了解FFT滤波的过程,我们首先来做以下的推导过程。一个时域离散信号x(n)通过一个FIR 线性滤波器h(n)(阶数为,长度为)的计算过程如下图1所示。如上图所示,图中第n 时刻的滤波输出

26、实际上是及该点之前的 个点(将第个点定义为)与反向之后的的相乘然后再相加的结果,由此滤波结果可以等价表示为下面这种滑动的相关形式: (2.4.1)式中,。在公式(2.4.1)的基础上再定义一个新的函数: (2.4.2)将这个求和公式展开之后,比较(2.4.1)和(2.4.2)有下面的结论: (2.4.3)由此可知,是的一个近似,并且它们的近似程度决定于和两项的取值。进而可以得出:(2.4.4)然后以 阶梳状滤波器为低通原型,构造复调制滤波器组,如下式:(2.4.5)然后根据公式(2.4.4),信号x(n)通过该滤波器的时候,第k个子信道的输出为:(2.4.6)显而易见的是,公式(2.4.6)的

27、等号右边就是对做FFT滤波之后的表达式。同时不难证明用FFT滤波实现低通原型为其他滤波器(设为,阶数为)的复调试滤波器组的表达公式是:(2.4.7)结果就是先对信号加窗再做FFT滤波,所加的窗函数为反向移位后的低通原型,而与此同时第n时刻滤波输出的误差是: (即:)。上面推导的过程非常重要,这就是下一章我们在程序中做FFT运算的数学依据。第三章 基于C+的滤波器设计及仿真3.1 C+及MFC的简介C+语言是在C语言的基础上开发的一种通用的编程语言,用途更加的广泛。C+语言支持多种编程范式,主要有面向对象编程、泛型编程和过程化编程三种范式。它的编程领域非常广泛,常用于引擎开发,系统开发等领域,是

28、计算机产业发展到今天最受欢迎和最强大编程语言之一。本文对滤波器的仿真用到的是C+其中的一个类库,MFC。MFC是英语Microsoft Foundation Classes的缩写,它是以C+类的形式封装了Windows API,其中包含一个应用程序框架,能够有效地减少开发人员的工作量。其中包含的类包含丰富的Windows句柄封装类和大量的Windows的内建控件和组件的封装类。当一个应用程序在创建某个类型的窗口前,必须首先注册该窗口类。Register Window会将窗口过程、窗口类型和其他类型的信息和需要register的窗口类关联起来。“窗口类”是Windows系统之中的的数据结构,我们

29、可以把它理解为Windows系统的类型定义,Windows使用一个结构来描述“窗口类”,其定义如下:typedef struct _WNDCLASSEX UINT cbSize; /定义结构的字节数UINT style; /定义该窗口类的风格WNDPROC lpfnWndProc; /窗口过程int cbClsExtra;int cbWndExtra;HANDLE hInstance; /窗口过程所属的应用实例HICON hIcon; /所用的像标HCURSOR hCursor; /所用的光标HBRUSH hbrBackground; /所用的背景刷LPCTSTR lpszMenuName;

30、/所用的菜单资源LPCTSTR lpszClassName; /名称HICON hIconSm; /所用的小图标 WNDCLASSEX;从上面“窗口类”的定义之中不难看出,它包含了如窗口风格、窗口过程、显示和绘制窗口所需要的信息等重要的组成部分。3.2 基于C+的滤波器设计及仿真 前面的章节中已经简单的介绍了C+以及MFC的定义,FIR数字滤波器的设计方法和FFT滤波过程的推理过程。本节中将在MFC下进行两种滤波器的设计及性能比较。3.2.1 设计要求输入信号为0.8个周期9.8周期的正弦波、矩形方波、三角波、锯齿波、冲击信号以及阶跃信号。运用到的窗函数有矩形窗函数,三角形窗函数,汉宁窗函数,

31、海明窗函数,布莱克曼窗函数。通过这几种窗函数来分析两种滤波器在时间开销、幅度误差、相位误差等方面的差异。设计时默认滤波器的类型为全通滤波器。3.2.2 仿真过程(1)启动Microsoft VS2010打开的程序设计界面,如图3.1所示。图3.1 Microsoft VS2010编译界面 (2)MFC创建程序主界面首先需要绘制该程序的相关参数的控件。相关参数共有:输入序列,FIR窗函数这两个下拉型选择控件;以及序列长度,窗口长度,序列周期,FFT点数,特别的,在FIR窗函数为矩形窗时,才会有的占空比控件,这五个控件为滚动条型控件。该界面的右下角有 确定,清除图像,以及退出程序三个按钮。如图3.

32、2所示。图3.2 程序图形化界面的相关参数设置界面下面的这段代码的功能是定义上述的这几个控件的名称,并且将需要同步的量与该控件相关联起来。void CFirfilterDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX);DDX_Control(pDX, IDC_ZHANKONG, m_zhankong);DDX_Control(pDX, IDC_WINDOWPOINT, m_windowpoint);DDX_Control(pDX, IDC_WINDOW_TYPE, m_window_type);DDX_Cont

33、rol(pDX, IDC_WAVEPOINT, m_wavepoint);DDX_Control(pDX, IDC_WAVE_SHAPE, m_wave_shape);DDX_Control(pDX, IDC_PERIOD, m_period);DDX_Control(pDX, IDC_FFTPOINT, m_fftpoint);DDX_Text(pDX, IDC_PERIOD_MSG, m_period_msg);DDX_Text(pDX, IDC_WAVEPOINT_MSG, m_wavepoint_msg);DDX_Text(pDX, IDC_WINDOWPOINT_MSG, m_win

34、dowpoint_msg);DDX_Text(pDX, IDC_ZHANKONG_MSG, m_zhankong_msg);DDX_Text(pDX, IDC_FFTPOINT_MSG, m_fftpoint_msg);DDX_Text(pDX, IDC_ZK, m_ZK);在将程序图形中的控件与程序中设置的变量相关联起来之后,接下来的任务就是设置每个控件的控制范围。并且在人为改变界面中数据的时候,让程序中的变量即时获取到最新值。m_wavepoint.SetScrollRange(11,300); /设置序列的长度范围m_windowpoint.SetScrollRange(10,211);

35、 / 设置窗口点数的范围m_period.SetScrollRange(1,100); /设置序列周期的范围m_zhankong.SetScrollRange(1,100);/设置占空比的范围m_fftpoint.SetScrollRange(2, 6);/设置FFT点数的范围m_wavepoint.SetScrollPos(128); /设置波形点数m_windowpoint.SetScrollPos(64);/设置窗口点数m_zhankong.SetScrollPos(50);/设置占空比的初始值为50%m_period.SetScrollPos(10);/设置序列周期的初始值m_fftp

36、oint.SetScrollPos(3);/设置FFT点数的初始值m_wave_shape.SetCurSel(0); /将输入序列默认为第一个m_window_type.SetCurSel(0);/将FIR窗函数类型默认为第一个wavepoint=m_wavepoint.GetScrollPos(); /从界面中读取序列长度period=m_period.GetScrollPos();/从界面中读取周期长度zhankong=m_zhankong.GetScrollPos();/从界面中读取占空比windowpoint=m_windowpoint.GetScrollPos();/从界面中读取窗

37、口长度fftpoint = m_fftpoint.GetScrollPos();/从界面中读取FFT点数OnSelchangeWaveShape(); /从界面中读取波形类型return TRUE; (3)程序整体框架的构造该程序之中滚动条的触发是编程时的一个重要步骤,当鼠标拖动滚动条调节该数据的值时,下方输出界面马上会感应到这种改变,并作出迅速的反应。下面我们就以触发序列长度的滚动条的时候的程序为例来分析滚动条滚动的过程。当输入序列为正弦波,FIR窗函数为矩形窗时,FIR的输出序列,以及输出频谱的情况如图(3.3)(3.4)所示。图3.3序列长度为最小值时的界面图3.4序列长度为最大值时的界

38、面具体程序如下:CFirfilterDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) /滚动条的触发wavepoint=m_wavepoint.GetScrollPos(); /属于序列长度的滚动条period=m_period.GetScrollPos(); /属于周期长度的滚动条zhankong=m_zhankong.GetScrollPos(); /属于占空比的滚动条windowpoint=m_windowpoint.GetScrollPos(); /属于窗口长度的滚动条fftpoint = m_fftpoint

39、.GetScrollPos(); /属于FFT点数的滚动条if(pScrollBar-GetDlgCtrlID()=IDC_WAVEPOINT) /当触发的滚动条属于序列长度时switch(nSBCode) / 判断滚动条是向右还是向左运动case SB_LINERIGHT:if(wavepointSetScrollPos(wavepoint);MainFunction();break;case SB_LINELEFT:if(wavepoint10)wavepoint-=1;pScrollBar-SetScrollPos(wavepoint);MainFunction();break;case

40、 SB_THUMBPOSITION:pScrollBar-SetScrollPos(nPos);MainFunction();break;case SB_THUMBTRACK:pScrollBar-SetScrollPos(nPos);MainFunction();break;在完成程序界面之中相关参数的程序设计之后,接下来的主要任务就是主程序下方绘图界面的程序实现。本程序下方共有六块图像界面,分别是:输入序列,输入序列频谱;FIR输出序列,FIR输出序列频谱;FFT输出序列,FFT输出序列频谱。如图3.5所示:图3.5 程序的绘图界面(3)波形图的绘制下面我们就以绘制FIR输出序列为例分析绘

41、制波形图的过程。代码如下:void CFirfilterDlg:MainFunction() /绘制界面上用于显示各种波形的区域int i;DrawCoordinate(); UpdateShowText(); Complex *x=new ComplexSAMPLE_POINTS; /定义采样点的指针Complex *X=new ComplexSAMPLE_POINTS;Complex *FFT_In = new ComplexSAMPLE_POINTS;int ftype=m_wave_shape.GetCurSel();/获取所选择的输入序列InitData(ftype,x); /根据所

42、选择的波形形状,调用相应的方法生成波形数据for(i=1;ipow(2.0,ffttime)ffttime+;/将大于wavepoint 和小于pow(2.0,ffttime) 之间的点赋零值,将不够的部分补0for(i=wavepoint+1;i=pow(2.0,ffttime);i+) /pow函数是数学库中的函数,功能是计算2的ffttime次方xi.real=0;xi.image=0;FFT(int)pow(2.0,ffttime),ffttime,x);DrawInPic2(int)pow(2.0,ffttime),x); /显示输入序列频谱,x已经转化为频域数据Complex *y

43、=new ComplexSAMPLE_POINTS; /生成y,大小也是1024long fir_start = GetTickCount(); /获取start时间FirFunction(X, y); /FIR滤波器的实现long fir_finish = GetTickCount(); /获取finish时间long fir_duration = fir_finish - fir_start; /计算FIR的时间差TRACE(fir_duration = %ldn, fir_duration); DrawOutPic1(wavepoint+windowpoint,y); /绘制输出序列 (

44、4) FIR滤波以及FFT滤波的代码实现首先是FIR滤波的功能实现,代码如下:void CFirfilterDlg:FirFunction(Complex A, Complex B) /FIR实现Complex windowdata513;/滤波器窗函数的序列长度/创建指定类型的滤波器(操作界面上用户选择的类型)/windowpoint 生成的窗口长度CreateFirFilter(windowpoint,/*m_filter_type.GetCurSel(),*/m_window_type.GetCurSel(), windowdata); /绘制系统响应(时域域形)Complex wind

45、owdata1513;for(int i=1;ipow(2.0,ffttime)ffttime+;for(int i=windowpoint+1;i=pow(2.0,ffttime);i+)windowdata1i.real=0;windowdata1i.image=0;/计算窗函数windowdata 的频谱FFT(int)pow(2.0,ffttime),ffttime,windowdata1); DrawSYS2(int)pow(2.0,ffttime),windowdata1);/绘制系统响应频谱for(int i=1;i513;i+)windowdata1i=windowdatai;

46、/windowdata1 为频谱/windowpoint 为有效的频点长度 DrawSYS3(windowpoint,windowdata1);/绘制系统系统响应幅度频谱int max=wavepoint + windowpoint;/计算通过滤波器的信号(卷积运算)myConv(A, windowdata, B, max);FFT滤波的代码实现,如下:void CFirfilterDlg:FFT(int N, int M, Complex data2)int j=1;int i=1;int K;/根据蝶形运算的规律,提前将各变量索引位置上的值交换。交换后如:x0,x4,x2,x6,x1,x5

47、,x3,x7doif(ij)Complex T;T.real = data2j.real;T.image = data2j.image;data2j.real=data2i.real;data2j.image=data2i.image;data2i.real=T.real;data2i.image=T.image;K=N/2;while(Kj)j-=K;K/=2;j+=K;i+;while(iN);/位置交换完成后,将对应的值乘上对应的W,就会得到正确顺序的傅立叶变换后的值int LE,LE1,IP;int L=1;doLE=(int)pow(2.0,L);LE1=LE/2;Complex U

48、=1.0,0.0;Complex W=cos(0-PI/(double)LE1),sin(0-PI/(double)LE1);j=1;doi=j;doIP=i+LE1;Complex T;T.real= data2IP.real*U.real-data2IP.image*U.image;T.image = data2IP.real*U.image+data2IP.image*U.real;data2IP.real = data2i.real-T.real;data2IP.image = data2i.image-T.image;data2i.real = data2i.real+T.real;

49、data2i.image = data2i.image+T.image;i+=LE; while(i=N);double tempreal=U.real;double tempimage=U.image;U.real = U.real*W.real-W.image*U.image;U.image = tempreal*W.image+tempimage*W.real;j+; while(j=LE1);L+; while(L=M);至此,我们仿真过程的部分核心代码展示完毕,其他的代码这里不做介绍。MFC所提供的整体框架也已经配置好,应用程序已经能够将各种信号的经过两种滤波过程之后的波形图像和频谱

50、图像绘制出来,以做进一步的研究。3.2.3 FIR滤波以及FFT滤波的性能分析(1)在时间开销上的差异在上个小结波形图绘制的代码之中,我们已经获取到FIR处理过程所需要的时间,即最后计算出来的时间差,但是通过计算可以发现,这个值几乎为零,也就是说在C+下完成FIR滤波的过程非常之快,时间几乎可以忽略不计。之后的FFT滤波过程与之类似,时间消耗也非常小。根据如今微型计算机的处理速度,两种滤波过程都发生在极短的时间,由于没有更加精确的记录工具,所以无法比较它们之间在时间开销上的差异。在这个问题上我们不便赘述。(2)在相位误差上的差异由于窗口类型以及序列长度等因素并不会影响两种滤波过程,所以我们在进

51、行分析对比的时候就保证其他条件不变,只改变输入序列的类型。首先选择输入序列为正弦波,FIR窗口类型为三角形窗,序列长度为128,窗口长度为64,序列周期为3 T,FFT点数为32的情况下,输出序列的波形如图3.6所示。图3.6 正弦波的FIR、FFT的滤波后输出序列波形图当输入序列为三角波,FIR窗口类型为三角形窗,序列长度为128,窗口长度为64,序列周期为3 T,FFT点数为32的情况下,输出序列的波形如图3.7所示。图3.7 三角波的FIR、FFT的滤波后输出序列波形图当输入序列为阶跃信号,FIR窗口类型为三角形窗,序列长度为128,窗口长度为64,序列周期为3 T,FFT点数为32的情况下,输出序列的波形如图3.8所示。图3.8 阶跃信号的FIR、FFT的滤波后输出序列波形图通过上述三张处理结果图像的对比,我们不难发现,FFT的输出序列相对比FIR输出序列,都有明显的输出延迟,而且FFT点数越大,输出延迟也就越高。而且在相位上,FFT的变化相较与前者也更加平缓(在对阶跃信号处理的过程中,由于FFT的工作原

温馨提示

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

评论

0/150

提交评论