快速卷积的MATLAB实现[教学内容]_第1页
快速卷积的MATLAB实现[教学内容]_第2页
快速卷积的MATLAB实现[教学内容]_第3页
快速卷积的MATLAB实现[教学内容]_第4页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、摘 要 在信号处理中,许多具体的应用是以线性卷积为基础的。当序列点数较少时可以直接计算线性卷积,然而当序列长度很长时,直接计算卷积的运算量非常庞大。快速卷积是实现卷积的一种快速算法,减少了运算量,节约了时间,给我们计算卷积提供了很大的便利。本课程设计是以Matlab为基础,完成序列的卷积和快速卷积运算的编程实现,以及相应的分析和比较。关键字:Matlab 卷积 快速卷积教育类别+目 录1.基于设计题目的原理简介11.1 序列卷积的定义11.2 快速傅里叶变换FFT概念11.3 快速卷积方法及实现12.程序设计及运行结果分析32.1 题目一32.2 题目二42.3 题目三73.心得体会10参考文

2、献11专业综合课程设计成绩评定表12教育类别+1. 基于设计题目的原理简介 卷积是数字信号处理(DSP)系统中最常见的,也是最重要的运算之一,无论在时域或频域都离不开卷积运算,FFT是DFT的快速算法,当满足一定条件时可用来计算线性卷积,称为快速卷积。Matlab具有强大的矩阵运算能力,方便实用的绘图功能和语言的高度集成性,在DSP开发中,使用Matlab可以快速对系统进行仿真运算。1.1 序列卷积的定义设x(n)和h(n)是两个离散序列,进行下列求和运算: 这样,随着n的不同取值,这个求和公式就定义了一个新序列y(n),称为序列x(n)与h(n)的卷积,记为y(n)=x(n)*h(n) 。

3、由于DSP主要依靠计算机完成,而计算机无论在时域或频域只能处理有限长的离散信号。此时只需令上述公式中的n在一个范围内取值即可。1.2 快速傅里叶变换FFT概念DFT就是对序列频谱的离散化,在数字信号处理中有着重要的作用,但直接计算DFT的运算量非常大,它与序列长度的平方成正比,因此制约了DFT的应用。快速傅里叶变换FFT是实现DFT的一种快速算法,能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。因而FFT也有重要的作用,下面一节要介绍的快速卷积就是其应用之一。1.3 快速卷积方法及实现在信号处理中,许多具体的应用是以线性卷积为

4、基础的。我们知道,当满足一定条件(LM+N-1)时,可以用圆周卷积来计算线性卷积。由圆周卷积定理知道,圆周卷积可以借助DFT来运算,因此DFT的快速算法FFT就可以用来计算线性卷积。设x1(n)与x2(n)分别是长度为N与M的有限长序列,它们的线性卷积为yl(n),L点的圆周卷积为yc(n),它们的关系为: yc(n)=yl(n+rL)RL(n)快速卷积算法过程的示意图如图1.1所示。在实际应用中,常遇到的问题是参加卷积的两个序列的长度相差较大,这样长度小的序列就需补很多的零点,这样就需要大的存储量,运算时间也会变长。常用的解决方法有两种,一是重叠想加法,另一种是重叠保留法。这里不作介绍。 图

5、1.1 快速卷积示意图1.4 直接卷积和快速卷积分析比较快速卷积,顾名思义,其重点在一个“快”,如果对卷积速度要求较高,快速卷积无疑是理想的工具。当然,为了提高速度,就要牺牲面积和功耗。而且由上一节的介绍可知,快速卷积运算的步骤较多,因而当序列较短时快速卷积运算并没有优势,直接进行卷积运算反而更简便。卷积计算的方法选择要视实际情况而定。2.程序设计及运行结果分析2.1 题目一 已知线性非移变系统的h(n)=6,2,3,6,4,2,输入为x(n)=1,2,3,4,5;(1)用人工计算系统输出y(n);(2)编写程序输出y(n),并作图。2.1.1 人工计算长度为N=6的序列h(n)和长度为M=5

6、的序列x(n),卷积y(n)的序列长度为(M+N-1)=10,计算过程如下: y(1)=h(1)x(1)=6y(2)=h(1)x(2)+h(2)x(1)=14y(3)=h(1)x(3)+h(2)x(2)+h(3)x(1)=25 y(n)=h(1)x(n)+h(2)x(n-1)+h(n)x(1)y(M+N-1)=h(1)x(M+N-1)+h(2)x(M+N)+h(3)x(M+N+1)+h(M+N-1)x(1)=10所得的结果为y(n)= 6,14,25,36,63,50,55,52,28,10。2.1.2 程序设计在Matlab中实现卷积的函数conv,可以直接调用。设计程序如下:h=6,2,3

7、,6,4,2; x=1,2,3,4,5; y=conv(h,x); %调用conv函数直接计算线性卷积stem(y); %画出卷积结果h(n)的序列图title(y(n) 2.1.3 运行结果及分析 程序运行后,得到的卷积结果y(n)如图2.1所示。图2.1 编程得到的卷积结果y(n) 由图2.1可看出,编程得到的卷积结果序列y(n)与自己先前计算的结果相同,说明所设计的程序是正确的,得到了正确的结果。图2.1 编程得到的卷积结果y(n)2.2 题目二用函数conv和FFT计算长为1000序列的卷积,比较其计算时间。2.2.1 设计内容及原理分析 本题目的在于比较直接卷积和快速卷积的计算时间,

8、分析其优劣性。由1.3节可知快速卷积算法如下:(1)序列补零:将两序列都补零到L点;(2)计算X1(k)=FFTx1(n);(3)计算X2(k)=FFTx2(n);(4)计算Y(k)=X1(k)X2(k);(5)计算y(n)=x1(n)*x2(n)=IFFTY(k)。本题中已经给定两原序列的长度M=N=1000,则LM+N-1,而因为快速卷积的基础是FFT,所以要求L满足L=2n,为减少运算量选取L=2048。设两原序列分别为: x1=0.5sin(2*n) ; x2=n3 计算时间的获取方法为:计算前先调用clock函数读取瞬时时钟,待计算结束后,调用etime(t1,t2)函数计算时刻t1

9、,t2间所经历的时间。2.2.2 程序设计框图图2.2 程序设计框图2.2.3 程序代码N=1000;L=pow2(nextpow2(1000+1000-1); %计算L的值n=1:N;x1=0.5*sin(2*n); x2=n.3;t0=clock; %调用clock函数读取瞬时时钟yc=conv(x1,x2); %用函数conv计算卷积conv_time=etime(clock,t0) %调用etime函数计算时间t0=clock;yf=ifft(fft(x1,L).*fft(x2,L); %用函数FFT计算卷积fft_time=etime(clock,t0)subplot(321),st

10、em(x1,.);ylabel(x1(n);subplot(322),stem(x2,.);ylabel(x2(n);subplot(312);stem(real(yc),.);ylabel(直接卷积y(n);subplot(313);stem(real(yf),.);ylabel(快速卷积y(n);2.2.4 运行结果及分析用函数conv和FFT计算长为1000序列的卷积的结果如图2.3,计算时间如图2.4。可以看出,两种方法所计算出的卷积结果是一样的。再来看时间,用函数conv计算该卷积需要0.0070s,而用FFT计算该卷积需要0s。由此可以得出,当序列长度为1000时,FFT算法所消耗

11、的时间远小于函数conv要消耗的时间。图2.3 函数conv和FFT计算长为1000序列的卷积的结果图2.4 函数conv和FFT的计算时间2.3 题目三用快速卷积法计算和两个序列的卷积;并测试直接卷积和快速卷积的时间。2.3.1 设计内容及原理分析 用快速卷积计算两个序列卷积的方法与题目二中的一样,区别仅在于序列的长度没有给出,这里不再重复计算过程。为了做对比分析,两个原序列的长度M和N取两组值进行仿真,分别取M=50,N=46和M=800,N=1000。2.3.2 程序设计框图程序设计框图与题目二一样,如图2.2所示。2.3.3 程序代码xn=0.9.(1:800);hn=1.(1:100

12、0);L=pow2(nextpow2(800+1000-1); %计算L值 tic;yc=conv(xn,hn); %直接计算卷积toc; %计算时间tic;Xk=fft(xn,L); %求x(n)的快速傅里叶变换X(k)Hk=fft(hn,L); %求h(n)的快速傅里叶变换H(k)Yk=Xk.*Hk; %求Y(k) yf=ifft(Yk,L); %用IFFT求快速卷积yftoc; %计算时间subplot(221),stem(xn,.);title(x(n);subplot(222),stem(hn,.);title(h(n);subplot(212),ny=1:L;stem(real(y

13、f),.);title(快速卷积y(n);2.3.4 运行结果及分析(1) M=50,N=46 卷积结果及计算时间分别如图2.5和图2.6所示(直接卷积的计算时间在上,快速卷积的计算时间在下)。图2.5 M=50,N=46时的快速卷积图2.6 M=50,N=46时的计算时间(2) M=800,N=1000 卷积结果及计算时间分别如图2.7和图2.8所示(直接卷积的计算时间在上,快速卷积的计算时间在下)。图2.7 M=800,N=1000时的快速卷积图2.8 M=800,N=1000时的计算时间 可以看出,当M=50,N=46时,快速卷积的计算时间比直接卷积的要长;而当M=800,N=1000时

14、,快速卷积的时间更短。这说明:当序列的点数比较少时,快速卷积并不占有优势,所用时间反而比直接卷积长,只有在序列较长时,快速卷积才体现出“快”的优势。3.心得体会本次课程设计我的题目是序列的卷积和快速卷积运算的编程实现,因为我们已经学习过信号与系统和Matlab应用实践课程,对序列的卷积和Matlab仿真并不陌生;而且此次题目卷积和快速卷积在课本上能找到相关的内容,老师在授课时已经讲得很详细,我对这部分的内容也比较熟悉。所以这次课程设计做的比较顺利,没有遇到什么大的难题,只是有一些小的细节影响了设计的进程,比如函数名的拼写等。这让我体会到,即使是比较容易的事情时,在对待它时也要很认真仔细,就像我

15、们常说的:细节决定成败。数字信号处理是本专业的一门重要课程,与它相关性最强的软件就是Matlab,这次课程设计给我提供了一个用Matlab实现序列卷积和快速卷积的机会,通过编程得到了和理论一致的结果。不仅加深了我对序列卷积和快速卷积这部分内容的理解,而且提高了我的程序编写和纠错能力,也进一步熟悉了Matlab的操作。但这是远远不够的,卷积只是数字信号处理中比较简单的一部分,这门课程还有许多值得我们去实践和探究的地方,我现在的目标就是在假期将本课程其它几个课设题目都操作一遍,以进一步提升自己各方面的能力。作为一名电子信息工程专业的学生,熟练掌握相关软件的操作是一门必修课,否则就算理论知识学得再好,不会应用,也只是纸上谈兵,不会真正取得什么成果,毕业之后在工作上也会很吃力。而我们并没有专门的课程来学习这些软件,所以这就需要我们平时多多利用课余时间来自学。现在互联

温馨提示

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

评论

0/150

提交评论