首页 快速卷积的MATLAB实现

快速卷积的MATLAB实现

举报
开通vip

快速卷积的MATLAB实现..优选摘要在信号处理中,许多具体的应用是以线性卷积为根底的。当序列点数较少时可以直接计算线性卷积,然而当序列长度很长时,直接计算卷积的运算量非常庞大。快速卷积是实现卷积的一种快速算法,减少了运算量,节约了时间,给我们计算卷积提供了很大的便利。本课程设计是以Matlab为根底,完成序列的卷积和快速卷积运算的编程实现,以及相应的分析和比较。关键字:Matlab卷积快速卷积.--.word.zl目录TOC\o"1-2"\h\uHYPERLINK\l_Toc142531.基于设计题目的原理简介PAGEREF_T...

快速卷积的MATLAB实现
..优选摘要在信号处理中,许多具体的应用是以线性卷积为根底的。当序列点数较少时可以直接计算线性卷积,然而当序列长度很长时,直接计算卷积的运算量非常庞大。快速卷积是实现卷积的一种快速算法,减少了运算量,节约了时间,给我们计算卷积提供了很大的便利。本课程设计是以Matlab为根底,完成序列的卷积和快速卷积运算的编程实现,以及相应的分析和比较。关键字:Matlab卷积快速卷积.--.word.zl目录TOC\o"1-2"\h\uHYPERLINK\l_Toc142531.基于设计题目的原理简介PAGEREF_Toc142531HYPERLINK\l_Toc207051.1序列卷积的定义PAGEREF_Toc207051HYPERLINK\l_Toc9391.2快速傅里叶变换FFT概念PAGEREF_Toc9391HYPERLINK\l_Toc241391.3快速卷积方法及实现PAGEREF_Toc2413912.程序设计及运行结果分析HYPERLINK\l_Toc142533HYPERLINK\l_Toc273592.1题目一PAGEREF_Toc273593HYPERLINK\l_Toc203452.2题目二PAGEREF_Toc203454HYPERLINK\l_Toc91202.3题目三PAGEREF_Toc912073.心得体会HYPERLINK\l_Toc1425310参考文献HYPERLINK\l_Toc1425311专业综合课程设计成绩评定 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf HYPERLINK\l_Toc1425312.--.word.zl基于设计题目的原理简介卷积是数字信号处理〔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)。由于DSP主要依靠计算机完成,而计算机无论在时域或频域只能处理有限长的离散信号。此时只需令上述公式中的n在一个围取值即可。1.2快速傅里叶变换FFT概念DFT就是对序列频谱的离散化,在数字信号处理中有着重要的作用,但直接计算DFT的运算量非常大,它与序列长度的平方成正比,因此制约了DFT的应用。快速傅里叶变换FFT是实现DFT的一种快速算法,能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。因而FFT也有重要的作用,下面一节要介绍的快速卷积就是其应用之一。1.3快速卷积方法及实现在信号处理中,许多具体的应用是以线性卷积为根底的。我们知道,当满足一定条件(L≥M+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所示。在实际应用中,常遇到的问题是参加卷积的两个序列的长度相差较大,这样长度小的序列就需补很多的零点,这样就需要大的存储量,运算时间也会变长。常用的解决方法有两种,一是重叠想加法,另一种是重叠保存法。这里不作介绍。图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的序列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,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设计容及原理分析此题目的在于比较直接卷积和快速卷积的计算时间,分析其优劣性。由1.3节可知快速卷积算法如下:〔1〕序列补零:将两序列都补零到L点;〔2〕计算X1(k)=FFT[x1(n)];〔3〕计算X2(k)=FFT[x2(n)];〔4〕计算Y(k)=X1(k)X2(k);〔5〕计算y(n)=x1(n)*x2(n)=IFFT[Y(k)]。此题中已经给定两原序列的长度M=N=1000,那么L≥M+N-1,而因为快速卷积的根底是FFT,所以要求L满足L=2n,为减少运算量选取L=2048。设两原序列分别为:x1=0.5sin(2*n);x2=n^3计算时间的获取方法为:计算前先调用clock函数读取瞬时时钟,待计算完毕后,调用etime(t1,t2)函数计算时刻t1,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),stem(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算法所消耗的时间远小于函数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:1000);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(yf),'.');title('快速卷积y(n)');2.3.4运行结果及分析M=50,N=46卷积结果及计算时间分别如图2.5和图2.6所示〔直接卷积的计算时间在上,快速卷积的计算时间在下〕。图2.5M=50,N=46时的快速卷积图2.6M=50,N=46时的计算时间M=800,N=1000卷积结果及计算时间分别如图2.7和图2.8所示〔直接卷积的计算时间在上,快速卷积的计算时间在下〕。图2.7M=800,N=1000时的快速卷积图2.8M=800,N=1000时的计算时间可以看出,当M=50,N=46时,快速卷积的计算时间比直接卷积的要长;而当M=800,N=1000时,快速卷积的时间更短。这说明:当序列的点数比较少时,快速卷积并不占有优势,所用时间反而比直接卷积长,只有在序列较长时,快速卷积才表达出"快〞的优势。3.心得体会本次课程设计我的题目是——序列的卷积和快速卷积运算的编程实现,因为我们已经学习过信号与系统和Matlab应用实践课程,对序列的卷积和Matlab仿真并不陌生;而且此次题目卷积和快速卷积在课本上能找到相关的容,教师在授课时已经讲得很详细,我对这局部的容也比较熟悉。所以这次课程设计做的比较顺利,没有遇到什么大的难题,只是有一些小的细节影响了设计的进程,比方函数名的拼写等。这让我体会到,即使是比较容易的事情时,在对待它时也要很认真仔细,就像我们常说的:细节决定成败。数字信号处理是本专业的一门重要课程,与它相关性最强的软件就是Matlab,这次课程设计给我提供了一个用Matlab实现序列卷积和快速卷积的时机,通过编程得到了和理论一致的结果。不仅加深了我对序列卷积和快速卷积这局部容的理解,而且提高了我的程序编写和纠错能力,也进一步熟悉了Matlab的操作。但这是远远不够的,卷积只是数字信号处理中比较简单的一局部,这门课程还有许多值得我们去实践和探究的地方,我现在的目标就是在假期将本课程其它几个课设题目都操作一遍,以进一步提升自己各方面的能力。作为一名电子信息工程专业的学生,熟练掌握相关软件的操作是一门必修课,否那么就算理论知识学得再好,不会应用,也只是纸上谈兵,不会真正取得什么成果,毕业之后在工作上也会很吃力。而我们并没有专门的课程来学习这些软件,所以这就需要我们平时多多利用课余时间来自学。现在互联网又兴旺,我们应充分利用这些资源,通过不断地积累知识来提高的能力。参考文献[1]泉等.数字信号处理原理与实现〔第2版〕[M].:电子工业,2021.[2]程佩青.数字信号处理教程[M].:清华大学,2021.[3]建新等.现代通信系统分析与仿真-MATLAB通信工具箱[M].:电子科技大学,2000.[4]丁玉美等.数字信号处理[M].:电子科技大学,2001.[5]怀琛等.MATLAB及在电子信息课程中的应用[M].:电子工业,2003.
本文档为【快速卷积的MATLAB实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
pyaiw
擅长施工管理及辅助设计,并对施工技术、质量与安全的深入研究
格式:doc
大小:48KB
软件:Word
页数:9
分类:教育学
上传时间:2022-07-09
浏览量:2