数字信号处理课设-- 基于重叠保留法圆周卷积的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课 程 设 计
2015——2016学年 第1学期
课程名称 信号分析与处理课程设计——
基于重叠保留法圆周卷积的实现 学 院 信息工程学院 专 业
电子信息工程 班
级 电信1301班
姓 名 秦子越
指导教师
吴巍
课程设计任务书
学生姓名:秦子越专业班级:电信1301 指导教师:吴巍工作单位:信息工程学院
题目:基于重叠保留法圆周卷积的实现
初始条件:
具备数字信号处理的理论知识;
具备Matlab编程能力;
分析重叠保留法的圆周卷积的原理;
提供编程所需要的计算机一台
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具
体要求)
1、独立编写程序实现基于重叠保留法的圆周卷积
2、用Matlab验证程序结果,并分析重叠保留法的圆周卷积的原理
3、完成符合学校要求的设计说明书
时间安排:
一周,其中3天程序设计,2天程序调试
指导教师签名:年月日
系主任(或责任教师)签名:年月日
目录
摘要 (1)
Abstract (2)
1.绪论 (3)
2.理论知识 (5)
2.1 圆周卷积的定义 (5)
2.2 圆周卷积的运算 (5)
2.3 重叠保留法原理 (6)
3.程序代码实现 (7)
3.1 程序流程分析 (7)
3.2 程序代码设计 (9)
4.用Matlab验证程序结果 (11)
5.原理分析 (14)
6.心得体会 (15)
参考文献 (16)
附录 (17)
本科生课程设计成绩评定表 (19)
摘要
MATLAB(矩阵实验室)是MATrix LABoratory的缩写,是一款由美国The MathWorks 公司出品的商业数学软件。
MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。
本文用MATLAB实现基于重叠保留法的圆周卷积。
若是很长的序列,利用圆周卷积时,必须补很多零点,很不经济。
因此必须将分成和相仿的段,分别求出每段的卷积结果,然后用一定的方式把他们合在一起,从而得到总的输出。
为了克服重叠相加法中分段卷积后,仍然需要相加的缺点,人们提出了重叠保留法。
关键字:MATLAB 重叠保留法圆周卷积
Abstract
MATLAB (MATrix LABoratory) is The abbreviation of MATrix LABoratory, is a by The Unite
d States Th
e MathWorks company production o
f a commercial mathematical software. MATLA B is a kind of for algorithm development, data visualization, data analysis and numerical calculat ion of senior technical computin
g language and interactive environment. In this paper, based on MATLAB overlap reserves the circular convolution method. If x1 (n) is a very long sequence, us ing circular convolution, x2 (n) must fill a lot of zero, is not the economy. So must be x1 (n) into and x2 (n) segment, the convolution results of each, respectively, and then in a certain way put t
h em together, and the total output is obtained. In order to overcome overlapadding after subsect
i on convolution method, still need to add the shortcomings, overlap retaining method are put forw
ard.
Key words: MATLAB overlap method circular convolution
1.绪论
MATLAB(矩阵实验室)是MATrix LABoratory的缩写,是一款由美国The MathWorks 公司出品的商业数学软件。
MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。
除了矩阵运算、绘制函数/数据图像等常用功能外,MATLAB还可以用来创建用户界面及与调用其它语言(包括C,C++和FORTRAN)编写的程序。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
软件特点:
1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;
2) 具有完备的图形处理功能,实现计算结果和编程的可视化;
3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;
4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
MATLAB 产品族可以用来进行以下各种工作:
●数值分析
●数值和符号计算
●工程与科学绘图
●控制系统的设计与仿真
●数字图像处理技术
●数字信号处理技术
●通讯系统设计与仿真
●财务与金融工程
●管理与调度优化计算(运筹学)
MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。
附加的工具箱(单独提供的专用MATLAB 函数集)扩展了MATLAB 环境,以解决这些应用领域内特定类型的问题。
软件优势:
1.编程环境
MATLAB由一系列工具组成。
这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。
包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。
2.简单易用
3.强处理能力
MATLAB是一个包含大量计算算法的集合。
其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。
函数中所使用的算法都是科研和工程计算中的最新研究成果,而且经过了各种优化和容错处理。
在通常情况下,可以用它来代替底层编程语言,如C和C++ 。
4.图形处理
MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。
高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。
可用于科学计算和工程绘图。
新版本的MATLAB对整个图形处理功能作了很大的改进和完善,使它在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善。
5.程序接口和发布平台
MATLAB的一个重要特色就是具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。
工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,主要包括信号处理、控制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。
2.理论知识
2.1 圆周卷积的定义
设x1(n)和x2(n)为长度为N的有限长序列,且
如果Y(k)=X1(k)X2(k),则
证明:相当于将(n),(n)作周期卷积和后,再取主值序列。
将y(k)周期延拓:(k)=(k),则有:
在主值区间0m N-1,,所以:
同样可以证明:
定义式2.3为序列与)与的圆周卷积,习惯表示为
从以上的证明过程也可以得出圆周卷积与周期卷积之间的关系,即有限长序列圆周卷积结果的周期延拓等于它们周期延拓后的周期卷积。
也就是说,周期卷积的主值序列是各周期序列主值序列的圆周卷积。
2.2 圆周卷积的运算
圆周卷积的具体步骤为:
第一步:在哑元坐标上画出与;
第二步:把沿着纵坐标翻转,得到;
第三步:对做圆周移位,得;
第四步:与对应的相同m的值进行相乘,并把结果进行相加
得到的对应于自变量n的另一个y(n);
第五步:换另一个n,重复第三、四步,直到n取遍[0,N-1]中的所有值,得到完整的y(n)。
2.3 重叠保留法原理
讨论一个短的有限长序列与一个无限长序列的卷积,例如是很长的序列,利用圆周卷积时,必须补很多零点,很不经济。
因此必须将分成和相仿的段,分别求出每段的卷积结果,然后用一定的方式把他们合在一起,从而得到总的输出。
为了克服重叠相加法中分段卷积后,仍然需要相加的缺点,人们提出了重叠保留法。
与重叠相加法不同的是,对无限长序列进行分段时,前一分段的后M-1个样值与后一份段的的前M-1个抽样值相同,且分段的长度选圆周卷积的长度L,这样形成的分段序列
)
其他
然后计算与各分段之间的卷积,显然,的前M-1个值发生了混叠,不等于与的卷积。
把的前M-1个值舍去,保留没有发生混叠的后N个值,形成序列,M-1n L-1, ,其他。
最后输出序列
3.程序代码实现
3.1 程序流程分析
要实现基于重叠保留法的圆周卷积,假设有两个长度分别为N,M(N>M)的序列,,要求做和的圆周卷积。
首先要对长序列序列进行分段,分段的长度选圆周卷积的长度L,形成的分段序列:
其他
然后将逐一和各分段进行圆周卷积,得到
最后输出序列
这样即完成了基于重叠保留法的圆周卷积的实现。
其流程图如下:
3.2 程序代码设计
首先编写基于重叠保留法的圆周卷积的主函数。
这个主函数的功能应当是计算出两个序列xn和hn的长度N、M,将长序列进行分段,然后再将短序列和长序列的各个分段分别进行圆周卷积,将分段卷积的的结果序列的前M-1个值舍去,将各个结果合并到一个序列中去,输出这个新序列,程序功能基本完成。
主函数的编写过程如下
定义主函数:function yn = dupconv( xn,hn )
计算两个序列的长度:
M=length(hn);
N=length(xn);
将长序列按照重叠保留法进行分段, 将其平均分成4段则每段表示为:
xn1=[zeros(1,M-1),xn(1:floor(N/4))];
xn2=xn((floor(N/4)-M+2):floor(N/2));
xn3=xn((floor(N/2)-M+2):floor(N*3/4));
xn4=xn((floor(N*3/4)-M+2):N);
将短序列和长序列的各分段进行圆周卷积,这里是通过调用圆周卷积函数实现的,圆周卷积函数将在后面定义出。
代码如下:
n1=length(xn1);
n2=length(xn2);
n3=length(xn3);
n4=length(xn4);
yn1=timecirconv(xn1,hn,n1);
yn2=timecirconv(xn2,hn,n2);
yn3=timecirconv(xn3,hn,n3);
yn4=timecirconv(xn4,hn,n4);
将分段圆周卷积的结果序列舍去前M-1个值,
yn1=yn1(M:n1);
yn2=yn2(M:n2);
yn3=yn3(M:n3);
yn4=yn4(M:n4);
将各个分段序列按顺序合起来,yn=[yn1 yn2 yn3 yn4];
函数结束,end
由于圆周卷积是通过调用圆周卷积函数来实现的,所以现在要编写一个能实现圆周卷积功能的函数。
将函数名命名为timecirconv,代码如下:
定义圆周卷积函数:function yn = timecirconv( xn,hn,N )
计算两序列的长度,并和N进行比较,如果N小于两个序列的长,则输出错误:
len1=length(xn);
len2=length(hn);
if len1>N || len2>N
error('N must biger than length of xn and hn')
end
将两个序列延长成长度为N的序列,不足的补零:
xn=[xn zeros(1,N-len1)];
hn=[hn zeros(1,N-len2)];
将hn进行沿纵坐标翻转后进行圆周移位,并将其存入一个N行N列的矩阵x中
m=0:N-1;
x=zeros(N,N);
for n=0:N-1
x(n+1,:)=hn(mod((n-m),N)+1);
end
将xn和矩阵x相乘,最终的得到圆周卷积的结果:
yn=xn*x;
4.用Matlab验证程序结果
假设有这样的两个序列,序列1,序列2要求这两个序列基于重叠保留法的的圆周卷积。
分析知序列1长度N=16,序列2长度M=4。
将长序列分段:
x11=[0 0 0 0 1 2 3]
x12=[1 2 3 4 5 6 7]
x13=[5 6 7 8 9 10 11]
x14=[9 10 11 12 13 14 15]
将x1的各分段和x2=[1 2 3 4 0 0 0]进行圆周卷积,得到
Y11=x11⊙x2=[0 4 11 20 14 8 3]
Y12=x12⊙x2=[30 40 50 60 42 31 27]
Y13=x13⊙x2=[70 80 90 100 82 71 67]
Y14=x14⊙x2=[110 120 130 140 122 111 107]
将每个分段卷积后的序列的前4-1个值舍去,再按顺序将序列合并,得到序列:
yn=[20 14 8 3 60 42 31 27 00 82 71 67 140 122 111 107]
下面用程序来验证。
在MATLAB中输入代码,建立.m文件,输入主函数dupconv,并调用子函数timecirconv计算卷积。
图4.1 主函数代码
图4.2 子函数代码在comand window中输入
>> xn=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; >> hn=[1,2,3,4];
>> yn = dupconv( xn,hn )
图4.3 输入参数
得到的结果为:
yn=[20 14 8 3 60 42 31 27 100 82 71 67 140 122 111 107]
图4.4 输出结果
显然,计算结果和程序运行结果相同。
仿真正确。
5.原理分析
对于一个长序列和一个短序列,长度分别为N,M,圆周卷积的长度为L,在长序列的前面加上M-1个零,然后对长序列进行分段,使得每段的长度为L,不足的用零补。
且前一分段的后M-1个抽样值和后一分段的前M-1个抽样值相同。
这样形成的分段序列为:
其他
分成的段数为:
然后计算与各个分段之间的圆周卷积,
,
,其他
显然,的前M-1个值发生了混叠,不等于与的圆周卷积,把的前M-1个值舍去,保留没发生混叠后的后N个值,形成序列
,
,其他
最后将各段相加就可以得到最终的结果:
6.心得体会
在本次课程设计中,让我知道了以前所学《信号与系统》与《数字信号处理》的结合,同时我也充分认识到MATLAB的强大作用。
MATLAB它是日前工程界流行最广的科学计算语言,在电信工程中的电路、信号与系统、数字信号处理、自动控制等方面有着广泛的应用。
除此之外,对程序的编译不是一蹴而就的,而是经过多次的编译与调试。
以前用MATLAB就是简单的输入,可以说都不是自己的劳动成果,但这次不一样,课程设计没有别人给你编好,而是自己写,出错率就大大提高了,但这是过程,学习就是在过程中进行的,经过自己几天的脑力劳动,再加上同学们的帮助,不仅对读程序有了很大提高,而且自己的编译水平也上了一个新台阶,更加熟系了MATLAB的应用,也对其中的函数如zeros()、floor()等有了更深的理解,也学会了对子函数的调用。
在课程设计过程中,我们不断发现错误,不断改正,不断领悟,这次课程设计终于顺利完成了。
在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,收获喜悦。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
参考文献
[1]罗建军.MATLAB教程.北京:电子工业出版社 2005
[2]陈怀深.MATLAB在信息工程中的应用.北京:电子工业出版社 2003
[3]丁玉美,高西全编著.数字信号处理.西安:西安电子科技大学出版社 2008
[4]李正周等编著.MATLAB数字信号处理与应用.北京:清华大学出版社 2008.
[5]杨永双等编著.数字信号处理实验指导书.郑州:郑州轻工业学院 2007
[6]刘泉等编著.数字信号处理.北京:电子工业出版社 2009
附录
function yn = dupconv( xn,hn )
M=length(hn);
N=length(xn);
xn1=[zeros(1,M-1),xn(1:floor(N/4))];
xn2=xn((floor(N/4)-M+2):floor(N/2)); xn3=xn((floor(N/2)-M+2):floor(N*3/4)); xn4=xn((floor(N*3/4)-M+2):N);
n1=length(xn1);
n2=length(xn2);
n3=length(xn3);
n4=length(xn4);
yn1=timecirconv(xn1,hn,n1);
yn2=timecirconv(xn2,hn,n2);
yn3=timecirconv(xn3,hn,n3);
yn4=timecirconv(xn4,hn,n4);
yn1=yn1(M:n1);
yn2=yn2(M:n2);
yn3=yn3(M:n3);
yn4=yn4(M:n4);
yn=[yn1 yn2 yn3 yn4];
end
function yn = timecirconv( xn,hn,N ) len1=length(xn);
len2=length(hn);
if len1>N || len2>N
error('N must biger than length of xn and hn') end
xn=[xn zeros(1,N-len1)];
hn=[hn zeros(1,N-len2)];
m=0:N-1;
x=zeros(N,N);
for n=0:N-1
x(n+1,:)=hn(mod((n-m),N)+1);
end
yn=xn*x;
18
本科生课程设计成绩评定表
指导教师签字:
年月日
19。