1、洛 阳 理 工 学 院课 程 设 计 报 告 课程名称 数字信号处理课程设计 设计题目 用FFT实现快速卷积 专 业 通信工程 班 级 学 号 姓 名 完成日期 2015.06.15 课 程 设 计 任 务 书设计题目: 用FFT实现快速卷积 设计内容与要求: FFT的出现,使DFT在数字通信、语音信号处理、图像处理、功率谱估计、系统分析与仿真、雷达信号处理、光学、地震及数值分析等各个领域都得到广泛应用。然而,各种应用一般都以卷积和相关运算为依据。在实际应用中,为了分析时域离散LTI系统或者序列滤波时,需要计算两个序列的线性卷积。为了提高运算速度,可以利用FFT来实现。要求:参考课本上第90页
2、的内容(3.4.1 用DFT计算线性卷积),设计并编写程序来实现重叠相加法计算线性卷积。课 程 设 计 评 语 成绩: 指导教师:_ 年 月 日洛 阳 理 工 学 院 课 程 设 计 报 告目 录第1章 概述11.1Matlab简介11.2设计目的21.3设计原理21.3.1算法产生背景21.3.2算法基本思想2第2章 程序设计5第3章 分析与测试73.1循环卷积设计73.2 线性卷积设计93.3 设计结果11第4章 心得体会12参考文献13 13第1章 概述随着信息时代和数字世界的到来,数字信号处理已成为当今一门极其重要的学科和技术领域,数字信号处理在通信、语音、图像、自动控制、医疗和家用电
3、器等众多领域得到了广泛的应用。任意一个信号都具有时域与频域特性,信号的频谱完全代表了信号,因而研究信号的频谱就等于研究信号本身。通常从频域角度对信号进行分析与处理,容易从信号的特性获得更加深入的了解。因此,信号的频谱分析是数字信号处理技术中一种较为重要的工具。1.1 Matlab简介Matlab语言是当今国际上科学界最具影响力、也是最有活力的软件。它起源于矩阵运算,并已经发展成一种高度集成的计算机语言。它是由美国Math Works公司于1982年推出的软件产品,取名来源于Matrix Laboratory,简称“Matlab”。Matlab是一个完整的、可扩展的、高性能数值计算的可视化软件,
4、是一种进行科学工程计算的交互式程序设计语言。它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面设计、便捷的与其他程序和语言接口的功能。 Matlab 语言在各国高校与研究单位起着重大的作用,MatLab控制系统仿真软件是当今国际控制界公认的标准计算软件,1999年春MatLab5.3版问世,使MATLAB拥有更丰富的数据类型和结构、更友善的面向对象、更加快速精良的图形可视、更广博的数学和数据分析资源、更多的应用开发工具。特别是Simulink这一个交互式操作的动态系统建模、仿真、分析集成环境的出现,使人们有可能考虑许多以前不得不做简化假设的非线性因素、随机因素,从而即使学生没
5、有对非线性动态系统进行分析研究的数学基础,仍可通过仿真来认知非线性对系统动态的影响。它的信号处理工具箱包含了各种经典的和现代数字信号处理技术,是一个非常优秀的算法研究与辅助设计工具。1.2 设计目的1.加深理解FFT在实现快速卷积中的重要作用,更好地利用FFT进行数字信号处理。2.进一步掌握利用重叠相加法计算线性卷积的方法。1.3 设计原理1.3.1算法产生背景DFT是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换频域的采样。在形式上,变换两端(时域和频域上)的序列是有限长的。DFT具备明确且合理的物理含义,适合应用于数字系统,同时可以方便地由计算机进行运
6、算。对于线性非移变离散系统,可由线性卷积表示时域输入输出关系,即y(n) = x(n) * h(n)通常采用循环卷积降低运算量,但实际中往往无法满足对信号处理的实时性要求。因此,产生了重叠相加法和重叠保留法两种典型的算法,用以快速计算线性卷积,成为了DFT的一个重要应用。1.3.2算法基本思想重叠相加法是将待过滤的信号分割成长为N的若干段,每一段都可以和有限时宽单位取样回应作卷积,再将过滤后的各段重叠相加。在实际应用中利用FFT来计算两个序列的圆周卷积从而实现计算其线性卷积,但是常遇到的问题是参加卷积的两个序列的长度相差较大,这样长度小的序列就需要补很多的零点,这样就需要大的存储量,运算时间也
7、会变长。所以常用重叠相加法来解决。如以下情况: h(n)长度为N,x(n)长度为无限长; x(n)取M点,且与N尽量接近;可采用如下方法来解决: x(n)与h(n)的卷积为:重叠相加法示意图:重叠相加法的步骤如下(1)将h(n)补零延长到L=M+N-1,并计算长为L的FFT,得到H(k)。(2)分别将xk(n)补零延长到L=M+N-1,并计算长为L的FFT,得到Xk(k)(3)计算,并求长为L的反变换,即(4)将yk(n)的重叠部分相加,最后得到结果为。 第2章 程序设计2.1程序设计思路1.函数juanji(x1,x2,L)设计:(1)x1(n)进行N点快速傅里叶变换得X1k(2)x2(n)
8、进行N点快速傅里叶变换得X2k(3)进行频域相乘Yk=X1k*X2k(4)对Yk进行反变换得到时域卷积结果y(n)2.函数chongdie(x,h,N)设计:(1)首先取圆周卷积的周期L(即进行L点的快速傅里叶变换) (2)计算每一分段的大小N(3)填充序列使得循环中对序列的索引不会超出范围(4)计算分段数K(5)对序列进行分段调用juanji()函数计算圆周卷积(6)各段重叠相加(7)取出实际的输出序列2.2程序流程图卷积: 重叠相加法: 第3章 分析与测试3.1循环卷积设计1、程序M=length(h);ifNM%为N选择合适的值保证运算正确N=M+1;endL=M+N-1;%循环卷积与线
9、性卷积结果相同时需要进行运算的最少点数Lx=length(x);T=ceil(Lx/N);%确定分段数Tt=zeros(1,M-1);%初始化序列t(n)x=x,zeros(1,(T+1)*N-Lx); %不足的分段补零y=zeros(1,(T+1)*N);%生成输出序列y(n),长度足够长fori=0:1:Txi=i*N+1; x_seg=x(xi:xi+N-1);%选择低点数计算时的分段x(n)X1k=fft(x_seg,L);%x_seg做L点FFTX2k=fft(h,L);%h做L点FFTYk=X1k.*X2k;%频域相乘 y_seg=ifft(Yk);%FFT反变换得循环卷积结果y_
10、seg(1:M-1)=y_seg(1:M-1)+t(1:M-1); %完成重叠相加 t(1:M-1)=y_seg(N+1:L);%重新对t(n)赋值为保留的后M-1点y(xi:xi+N-1)=y_seg(1:N);%直接输出前N个点endy=y(1:Lx+M-1);%取出最终的输出序列 2、测试设N=4h=1,2,3,4X=1,2,3,4,5,6,7,8,9调用系统函数fftfilt(h,x,N)对比生成图像图3-1 设计函数图像图3-2 系统函数fftfilt(h,x,N)3、分析 设计函数与系统函数前7个点一样,系统函数没有后4-1=3个点,4为h(n)长度。设计函数符合要求。3.2 线性
11、卷积设计1、程序Lx=length(A)+length(B)-1;%线性卷积长度l1=length(A)-1;l2=length(B)-1;A=zeros(1,l2)Azeros(1,l2);%A序列前后补零B=fliplr(B); %反转BB=B,zeros(1,l1+l2);%B序列后面补零与A长度相等fori=1:Lx %计算z(i)z(i)=A(1)*B(1);fork=2:length(B)z(i)=z(i)+A(k)*B(k);endt=B(length(B);%保存B序列最后一个数forj=length(B):-1:2%B序列依次向后移位B(j)=B(j-1);endB(1)=t
12、;end2、测试设h=1,3,5,7X=9,8,7,6,5,4,3,2,1调用系统函数conv(h,x)对比生成图像图3-3 设计函数图像图3-4 系统函数conv(h,x)3.3 设计结果重叠相加法实现卷积:第4章 心得体会数字信号处理作为我们的主要专业课之一,虽然在大三开学初我对这门课并没有什么兴趣,觉得那些程序和公式枯燥乏味,但在这次课程设计后我发现自己在一点一滴的努力中对数字信号处理的兴趣也在逐渐增加。 在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问
13、题和实践能力的提高都会受益于我在以后的学习、工作和生活中。设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极
14、的影响。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我觉得作为一名通信专业的学生,数字信号的课程设计是很有意义的。更重要的是如何把自己平时所学的东西应用到实际中。虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在小组同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。我认为这个收获应该说是相当大的。觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。小组人员的配合相处,以及自身的动脑和努力,都是以后工作中需要的。最后,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!参考文献1刘泉、阙大顺、郭志强,数字信号处理,电子工业出版社,20092Ingle.V.K,数字信号处理(MATLAB版)(第2版),西安交通大学出版社,2008 3张德丰 ,详解MATLAB 数字信号处理, 电子工业出版社,2010 4程佩青,数字信号处理教程(第3版),清华大学出版社,2008 5张志涌,MATLAB教程,北京航天航空大学出版社,2005