DSP课程设计-基于重叠相加法圆周卷积的实现.doc_第1页
DSP课程设计-基于重叠相加法圆周卷积的实现.doc_第2页
DSP课程设计-基于重叠相加法圆周卷积的实现.doc_第3页
DSP课程设计-基于重叠相加法圆周卷积的实现.doc_第4页
DSP课程设计-基于重叠相加法圆周卷积的实现.doc_第5页
免费预览已结束,剩余12页可下载查看

下载本文档

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

文档简介

课程设计任务书学生姓名: 专业班级: 电信0802 指导教师: 工作单位: 信息工程学院 题 目:基于重叠相加法圆周卷积的实现初始条件: 具备数字信号处理的理论知识;具备matlab编程能力;分析重叠相加法的圆周卷积的原理;提供编程所需要的计算机一台要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、独立编写程序实现基于重叠相加法的圆周卷积2、用matlab验证程序结果,并分析重叠相加法的圆周卷积的原理3、完成符合学校要求的设计说明书时间安排:一周,其中3天程序设计,2天程序调试指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目录摘要i1 软件基础11.1 matlab介绍11.2 matlab的应用22 理论基础32.1 圆周卷积原理32.2重叠相加法43 程序设计63.1 程序设计思路63.2程序设计流程图73.3方案比较84 程序代码95 程序运行结果与分析11心得体会12参考文献13武汉理工大学数字信号处理课程设计说明书摘要matlab是矩阵实验室(matrix laboratory)的简称,是美国mathworks公司出品的商业数学软件,主要用于算法开发、数据可视化、数据分析以及数值计算等领域。本次课程设计将通过matlab软件进行重叠相加法圆周卷积的设计,并对其具体过程进行分析。关键词:matlab 重叠相加法 圆周卷积1 软件基础1.1 matlab介绍matlab是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如c、fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。matlab和mathematica、maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。matlab可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接matlab开发工作界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。matlab的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用matlab来解算问题要比用c,fortran等语言完成相同的事情简捷得多,并且matlab也吸收了像maple等软件的优点,使matlab成为一个强大的数学软件。在新的版本中也加入了对c,fortran,c+ ,java的支持。可以直接调用,用户也可以将自己编写的实用程序导入到matlab函数库中方便自己以后调用,此外许多的matlab爱好者都编写了一些经典的程序,用户可以直接进行下载就可以使用。matlab具有以下特点:1.高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;2.具有完备的图形处理功能,实现计算结果和编程的可视化;3.友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;4.功能丰富的应用工具箱,为用户提供了大量方便实用的处理工具。1.2 matlab的应用matlab 产品族可以用来进行以下各种工作: 数值分析 数值和符号计算 工程与科学绘图 控制系统的设计与仿真 数字图像处理 技术 数字信号处理 技术 通讯系统设计与仿真 财务与金融工程 matlab 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 matlab 函数集)扩展了 matlab 环境,以解决这些应用领域内特定类型的问题。2 理论基础2.1 圆周卷积原理对两个n点序列和,除了可以做线性卷积外,还有一种很重要的卷积运算,就是圆周卷积。令则圆周卷积结果长度不变,为n。由上式可以得出圆周卷积与周期卷积的关系,就是有限长序列圆周卷积结果的周期延拓,等于它们周期延拓后的周期卷积。也就是说,周期卷积的主值序列,是各周期序列主值序列的圆周卷积。圆周卷积的实现步骤如下:补零:按要求使两序列补零后均为n点周期延拓:将一个序列按m点延拓为周期序列翻褶:将延拓后的周期序列翻褶取主值序列:对翻褶后的周期序列取主值 圆周移位:对此主值序列做圆周移位(n)相乘:每次移位后的序列与另一序列相乘相加:将诸m点(m=0,1m-1)的乘积值相加,即为移位n点后的y(n)值(n=0,1n-1)若、分别是长度为n、m的序列则与线性卷积至多m+n-1个非零值,如果lm+n-1时,周期延拓才不会发生混叠。之所以讨论用圆周卷积来计算线性卷积的条件,是因为圆周卷积可在频域下利用dft求得,从而可采用dft的快速算法fft来计算,这样就可以利用fft来计算线性卷积,大大提高运算效率。2.2重叠相加法在实际应用中利用fft来计算两个序列的圆周卷积从而实现计算其线性卷积,但是常遇到的问题是参加卷积的两个序列的长度相差较大,这样长度小的序列就需要补很多的零点,这样就需要打的存储量,运算时间也会变长。所以常用到的解决方法有两种,其中一种就是重叠相加法。 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)的重叠部分相加,最后得到结果为3 程序设计由以上原理可以设计程序利用fft算法来实现基于重叠相加法的圆周卷积。3.1 程序设计思路函数juanji(x1,x2,l)的设计:(1) x1(n)进行n点快速傅里叶变换得x1k(2) x2(n)进行n点快速傅里叶变换得x2k(3) 进行频域相乘yk=x1k*x2k(4) 对yk进行反变换得到时域卷积结果y(n)函数chongdie(x,h,n)的设计:方案1:(1)首先取长序列x(n)进行分段的长度n,以使其分段后的长度与较短的相近(2)确定圆周卷积的周期l(3)填充序列使得循环中对序列的索引不会超出范围(4)确定分段数k(5)对序列进行分段调用juanji()函数计算圆周卷积(6)各段重叠相加(7)取出实际的输出序列方案2:(1)首先取圆周卷积的周期l(即进行l点的快速傅里叶变换)(2)计算每一分段的大小n(3)填充序列使得循环中对序列的索引不会超出范围(4)计算分段数k(5)对序列进行分段调用juanji()函数计算圆周卷积(6)各段重叠相加(7)取出实际的输出序列3.2程序设计流程图整体程序包含主程序与卷积函数、重叠相加函数两大部分。函数juanji()流程图如下开始对x1(n)进行fft运算对x(2)进行fft运算频域相乘:yk=x1k*x2k对yk进行反变换得到时域结果y(n)结束 此函数用于对x1和x2两序列进行快速傅里叶变换后进行乘积,之后再进行反变换后恢复到时域结果。chongdie(x,h,n)函数流程图如下:方案1: 方案2:开始x(n)按长度n进行分段确定圆周卷积的周期l将序列按要求填充确定分段数k调用函数juanji()将各段处理的结果重叠相加输出最终结果结束开始取圆周卷积的周期l计算每一分段的大小n将序列按要求填充计算分段数k调用函数juanji()将各段处理的结果重叠相加输出最终结果结束3.3方案比较方案1和方案2的区别在于:在方案1中由已知的长序列x(n)分段大小n、短序列长度m依据公式计算ln+m-1圆周卷积周期l。而在方案2中由已知的圆周卷积周期l、短序列长度m依据公式计算长序列x(n)的分段大小。比较这两种方案可以知道,方案1中如果l直接取l=n+m-1,则l的值不一定是2的n次方,而接下来的要进行的l点快速傅里叶变换中,l的值需要为2的n次方才能正确计算。所以方案1的必须要求取恰当的n值以使l点满足要求。方案2中可以直接取l为恰当的值从而满足快速傅里叶变换的要求,所以方案2比方案1的适用范围更大。4 程序代码主程序:x1=1,2,3,4,5,5,4,3,2,1;x2=1,0,1;l=8;y=chongdie(x1,x2,l);s=1:10;subplot(2,2,1);stem(s,x1)r=1:3;subplot(2,2,2);stem(r,x2)u=1:13;subplot(2,2,3);stem(u,y)函数juanji():function y=juanji(x1,x2,l)if length(x1)l %如果x1长度大于l则产生错误 error(l must not be less than length of x1);end if length(x2)l %如果x2长度大于l则产生错误 error(l must not be less than length of x2);end x1k=fft(x1,l); %对x1进行l点fft计算x2k=fft(x2,l); %对x2进行l点fft计算yk=x1k.*x2k; %频域相乘 y=ifft(yk); %反变换得卷积结果if (all(imag(x1)=0)&(all(imag(x2)=0) y=real(y);end函数chongdie():方案1:functiony=chongdie(x,h,n)lenx=length(x); %取x(n)的长度m=length(h); %取h(n)的长度l=n+m-1; %计算圆周卷积的周期l使其不发生混叠x=x,zeros(1,n-1); %填充序列使得循环中对序列的索引不会超出围k=floor(lenx/n);y=zeros(1,lenx+l-1); %确定分段数kfor i=0:1:k ix=i*n; x_seg=x(ix+1:ix+n); %将x(n)分段 y_seg=juanji(x_seg,h,l); %调用函数juanji()计算圆周卷积 y(ix+1:ix+l)=y(ix+1:ix+l)+y_seg(1:l); %各段重叠相加endy=y(1:lenx+m-1); %取出实际的输出序列方案2:functiony=chongdie(x,h,l)lenx=length(x); %取x(n)的长度m=length(h); %取h(n)的长度n=l-m+1; %计算分段大小nx=x,zeros(1,n-1); %填充序列使得循环中对序列的索引不会超出围k=floor(lenx/n); %确定分段数ky=zeros(1,lenx+l-1);for i=0:1:k ix=i*n; x_seg=x(ix+1:ix+n); %将x(n)分段 y_seg=juanji(x_seg,h,l); %调用函数juanji()计算圆周卷积 y(ix+1:ix+l)=y(ix+1:ix+l)+y_seg(1:l); %各段重叠相加endy=y(1:lenx+m); %取出实际的输出序列5 程序运行结果与分析输入序列和周期lx1=1,2,3,4,5,5,4,3,2,1;x2=1,0,1;l=8;运算结果:124689986421由程序运行结果与线性卷积结果比较可以知道程序计算结果正确的。心得体会作为电子信息工程系的学生,数字信号处理这门课程是其他很多课程的基础,所以学好数字信号处理这门课是非常重要的。而matlab这款软件对数字信号处理的建模、编程、分析、实现有极大的帮助作用,所以我们应该掌握使用matlab编程来实现对数字信号的分析处理。此次我得到的课设题目是:基于重叠相加法圆周卷积的实现。拿到课设题目后,我仔细研究了与题目相关的原理,包括线性卷积、周期卷积、圆周卷积、重叠相加法、离散傅里叶变换dft、快速傅里叶变换fft等原理知识,弄清楚了它们之间的关系。通过这次课程设计,我不仅顺利完成课程设计的要求,而且在课程设计过程中通过对相关原理的回顾,对各相关原理之间的关系有了脱胎换骨般的认识,也意识到此前学到的理论知识是多么的浅薄。在和同组同学一起讨论基于重叠相加法的圆周卷积原理后,我开始了利用matlab来实现这个功能。在编写程序的过程中,我查阅了很多有关matlab的编程知识,通过整合所查阅到的编程知识,结合先前研究的基于重叠相加法的圆周卷积原理,我设计了具有此功能的matlab函数。在设计时我遇到了不少的问题,刚开始时我先设定分段长度n,然后由n来求卷积周期l。但是在程序运行过程中我发现算法具有很大的局限性。通过仔细揣摩这其中的问题,原来是我忽略了fft运算的条件。所以我制定了第二个方案,先设定卷积的周期l,然后由l来求分段长度n,这样程序的适用范围就扩大了。为了提高程序的适用性,我不断的对程序进行修改和测试,以求能够达到更好的效果,这个过程让我体会到了编程解决问题的乐趣。 通过本次课程设计,我对书本知识有了更深刻的理解,并应用

温馨提示

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

最新文档

评论

0/150

提交评论