信号与系统课程设计--离散卷积和循环卷积的计算机计算.doc_第1页
信号与系统课程设计--离散卷积和循环卷积的计算机计算.doc_第2页
信号与系统课程设计--离散卷积和循环卷积的计算机计算.doc_第3页
信号与系统课程设计--离散卷积和循环卷积的计算机计算.doc_第4页
信号与系统课程设计--离散卷积和循环卷积的计算机计算.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

信号与系统课程设计报告电气与电子工程学院0711班 赵志伟二OO九年七月离散卷积和循环卷积的计算机计算课题介绍:卷积是信号与线性系统中重要的一部分,在生活中的应用也极其广泛。设有两离散序列和,则两序列的离散卷积和循环卷积分别为:任务: 画出计算程序流程图; 完成C语言编程与计算; 验证计算结果; 提交课程设计报告。目录一设计简介4二设计要求5三设计路线5四设计内容64.1 原理学习64.1.1 离散卷积64.1.2 循环卷积64.2利用C语言编程进行计算94.2.1程序分析94.2.2程序10 4.3试验结果及结论.16五结果分析及感想18六参考文献19离散卷积和循环卷积的计算机计算一、设计简介主题: 1)分析离散卷积与循环卷积的特点与不同 2)画出计算程序流程图 3)用C语言编程并计算 4)用所学知识验证该计算结果方法: 1)通过学习课本及参阅相关书籍从理论上分析离散卷积与循环卷积的特点 2)用C语言编程进行计算,并验证计算结果 结果:1) 复习了原来所学的有关离散卷积和循环卷积的特点加深了对课本内容的理解 2)将所学的c语言应用于实际的课题设计中,是对汇编语言的一个复习。二、设计要求1)实验要求用计算机来计算离散卷积和循环卷积,这两种计算方法有相同之处也有不同之处,试画出计算程序流程图并完成C语言编程与计算。2)验证计算机的计算结果,3)提交课程设计报告。三、设计路线1)参考并复习了信号课本,对离散卷积以及循环卷机有了一个初步的认识;2)去图书馆查阅更多有关离散卷积和循环卷积介绍的书籍,在理论知识上进一步丰富和扩展;3)阅读书籍,复习有关汇编语言的应用;4)画出计算程序流程图并用C语言编程,并完成计算;5)验证计算结果。四、设计内容 离散卷积和循环卷积的计算机计算4.1 原理学习卷积作为一种运算在信号与系统中有着举足轻重的地位,很多计算中均要涉及卷积运算,这里只介绍线性离散卷积以及循环卷积。4.1.1离散卷积在信号与线性系统中,定义xn,vn,其卷积为 计算卷积时,首先将xn,vn中的离散时间序号n改为i,得到信号xi,vi,下一步确定vn-i和乘积xivn-i。信号vn-i是信号vi的反折和平移,通过对xivn-i中的i求和即可计算出来,式中i取一定范围的的整数。4.1.2 循环卷积实际问题的大多数是求解线性卷积,如信号 x(n)通过系统 h(n) ,其输出就是线性卷积 y(n) = x(n) * h(n)。而循环卷积比起线性卷积,在运算速度上有很大的优越性,它可以采用快速傅里叶变换(FFT)技术,若能利用循环卷积求线性卷积,会带来很大的方便。 现在我们来讨论上述 x(n)与h(n)的线性卷积,如果 x(n) 、 h(n)为有限长序列,则在什么条件下能用循环卷积代替而不产生失真。有限长序列的线性卷积:假定 x(n)为有限长序列,长度为N, y(n)为有限长序列,长度为M,它们的线性卷积f(n) = x(n) * y(n)也应是有限长序列。因 x(m)的非零区间: 0mN-1, y(n-m)的非零区间: 0n-mM-1, 这两个不等式相加,得: 0nN+M-2, 在这区间以外不是x(m) =0,就是y(n-m) =0,因而f(n)=0。因此, f(n)是一个长度为N+M-1的有限长序列。 重新构造两个有限长序列 x(n)、y(n),长度均为 L maxN,M ,序列 x(n)只有前N个是非零值,后L-N个为补充的零值;序列 y(n)只有前M个是非零值,后L-M个为补充的零值。为了分析 x(n)与y(n)的循环卷积,先看x(n),y(n)的周期延拓:它们的周期卷积序列为: 其中f(n)就是线性卷积,也就是说,x(n)、 y(n)周期延拓后的周期卷积,是x(n) 、 y(n)线性卷积的周期延拓,周期为L。根据前面的分析,f(n)具有 N+M-1 个非零序列值,因此,如果周期卷积的周期 LN+M-1,那么 f(n)周期延拓后,必然有一部分非零序列值要重叠,出现混淆现象。只有 LN+M-1 时,才不会产生交叠,这时f(n)的周期延拓 中每一个周期L内,前N+M-1个序列值是f(n)的全部非零序列值,而剩下的 L (N+M-1)点的序列则是补充的零值。循环卷积正是周期卷积取主值序列:所以使圆周卷积等于线性卷积而不产生混淆的必要条件是:LN+M-14.2利用C语言编程进行计算4.2.1 程序分析由公式我们可得到计算离散卷积时需要用户输入xm和vn的值,这样便可以得到所要求的离散卷积的值,但是对于循环卷积来说,不仅要知道这两组数而且要确定N值。这样就有两种方式来获得N,一种就是由计算机直接得到一种就是由用户输入来确定,这样一来我们就得到两种方案方案一:序列长度(m与n)由用户保证,计算所有离散卷积,并给出长度;用户给出N值,并保证Nmaxm,n,当Nmaxm,n时程序提示“错误”,并要求其重新输入,计算出N值时的循环卷积:用户输入两正序列xn,vn的序列长度m与n(序列长度小于300),并输入xn与vn的值和N的值,程序给出结果。方案二:序列长度(m与n)由用户保证,计算所有离散卷积,并给出长度;对所有maxm,nNm+n的N进行循环卷积计算,并说明当Nm+n-1时循环卷积的值等于线卷积的值:用户输入两正序列xn,vn的序列长度m与n(序列长度小于300),并输入xn与vn的值,程序给出结果。4.2.2 程序计算程序流程图方案一:方案二:与方案一类似程序:方案一:(由用户决定N的取值)#includemain() static float x300,v300,y600,z600; *静态定义数组,自动全部清零*/int m,n,L,i,j,k,s,N; /*可计算含非整数值的序列的卷积*/ printf(input the xns length m(m300):n); scanf(%d,&m); printf(input the vns length n(n300):n); scanf(%d,&n); L=m+n-1; printf(input the xnn); for (i=0;i=m-1;i+) scanf(%f,&xi); for (i=0;i=m-1;i+) printf(x%d=%fn,i,xi); printf(input the vnn); /*linear convolution*/ for (j=0;j=n-1;j+) scanf(%f,&vj); for (j=0;j=n-1;j+) printf(v%d=%fn,j,vj); printf(the result of linear convolution:n); for (i=0;i=L-1;i+) s=0; for (j=0;j=%d)n,m=n?m:n); scanf(%d,&N); if(N=n?m:n) printf(error!); goto Z; /*当N不满足条件时报错并要求用户重新输入N值*/ printf(the result of circular convolution for N=%d:n,N); for(i=0;i=N-1;i+) s=0; for(j=0;j=N-1;j+) k=i-j; if(k0) k=k+N; s+=xj*vk; zi=s; printf(z%d=%fn,i,zi); 方案二:(所有适当的N都计算其循环卷积)#includemain() static float x300,v300,y600,z600; /*静态定义数组,自动全部清零*/ int m,n,L,i,j,k ,s,N; printf(input the xns length m(m600):n); scanf(%d,&m); printf(input the vns length n(n300):n); scanf(%d,&n); L=m+n-1; printf(input the xnn); for (i=0;i=m-1;i+) scanf(%f,&xi); for (i=0;i=m-1;i+) printf(x%d=%fn,i,xi); printf(input the vnn); for (j=0;j=n-1;j+) scanf(%f,&vj); for (j=0;j=n-1;j+) printf(v%d=%fn,j,vj);/*linear convolution*/ printf(the result of linear convolution:n); for (i=0;i=L-1;i+) s=0; for (j=0;j=n?m:n; while(N=m+n) printf(when N=%dn,N); for(i=0;i=N-1;i+) s=0; for(j=0;j=N-1;j+) k=i-j; if(k%dn,L); printf(the result is equal to linear convolutionn);4.3 试验结果及结论 例 xn and vn are(for all other n,xn=0,ynn=0); xn=sin(n/2), n=0, 1, 2, 3; vn= , n=0 ,1 ,2please calculate:(1) xn*vn;(2) xnvn;计算机计算如下图:图一:方案一C程序运行结果 图二:方案二C程序运行结果手工计算: 解:(1)离散卷积( 线卷积):矩阵法: xn vnx0=0x1=1x2=0x3=-1x4=0x5=0x6=0v0=1010-1000v1=20020-200v2=400040-40yn0123-2-40y0y1y2y3y4y5y6 0 , n=0 1 , n=1 2 , n=3所以yn=xn*vn= 3 , n=4 -2 , n=5 -4 , n=6 0 , all other n (2)循环卷积(圆卷积): 直接利用公式,得 x0v0+x1v3+x2v2+x3v1= -2 , n=0zn=xnvn= x0v1+x1v0+x2v3+x3v2= -3 , n=1x0v2+x1v1+x2v0+x3v3= 2 , n=2x0v3+x1v2+x2v1+x3v0= 3 , n=3五,收获及感想 此次课设中主要用到了c语言和信号与系统的有关知识,在课设的学习与完成过程中,对书本上所学的内容进行了更为深刻的认识。课设中遇到很多困难,最困难的是有关程序的编写,因为在课堂上所学的c语言知识有限,所以在编写程序时遇到很多问题,通过上网查询,自学c程序的有关部分,最终才将程序确定下来。课设是一个整体,要想完成课设,必须要有条有理的确定课设的整体结构,这就需要我们有一个整体的概念,从目录到结尾都应该贯穿整体,流畅。此外结构必须要清晰,这也是为我们以后写论文作报告打下了基础。对于每个部分,我们要做到有理有据,对课题进行深刻的讨论,从而得到有效的结论。此外

温馨提示

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

评论

0/150

提交评论