matlab实现线性卷积和循环卷积.docx
《matlab实现线性卷积和循环卷积.docx》由会员分享,可在线阅读,更多相关《matlab实现线性卷积和循环卷积.docx(19页珍藏版)》请在冰豆网上搜索。
matlab实现线性卷积和循环卷积
编号:
数字信号处理
实训(论文)说明书
题目:
用matlab实现两信号的卷积
院(系):
应用科技学院
专业:
电子信息工程
*******
学号:
**********
指导教师:
严素清童有为纪元法
2011年6月29日
摘要
本文讲述的是运用matlab软件编写线性卷积和循环卷积,运行程序并得到正确结果,附上运行结果图让大家参照对比。
MATLAB是一款在数学类科技应用软件中特别是在数值计算方面首屈一指的软件,它可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
而线性卷积和循环卷积在工程上的应用亦非常广泛,在Matlab软件处理下,实现任意两个序列的线性和循环卷积对于工程上的辅助是相当重要的。
卷积关系最重要的一种情况,就是在信号与线性系统或数字信号处理中的卷积定理。
利用该定理,可以将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。
本文从线性卷积和循环的定义出发,分析其运算原理以及相关的公式、程序,着重介绍并分析了卷积的运算过程,让大家明白什么是卷积。
程序运行之后得到正确的结果,将运行后正确的波形图图放在本次论文中让大家直观的做比较。
关键词:
Matlab;线性卷积;循环卷积;波形图;正确
Abstract
Thisisaboutusingmatlabsoftwarelinearconvolutionandcyclicconvolution,operationprocedureandgettherightresult,enclosedoperationresultdiagramleteverybodyreference
MATLABisatypeoftechnologyinapplicationsofmathematics,especiallyinnumericalcalculationoftheleadingsoftware,whichcanbematrixcalculation,anddatamappingfunction,therealizationofalgorithms,creationofuserinterface,connectedtootherprocedures,suchasprogramminglanguages,themainapplicationinengineeringcomputing,controldesign,signalprocessingandcommunications,imageprocessing,signaldetection,financialmodelinginareassuchasdesignandanalysis.AndlinearconvolutionintheapplicationofengineeringhasaverywiderangeofsoftwareinMatlab,therealizationofanytwosequencesoflinearconvolutionsupportforprojectsisveryimportant.Convolutionrelationshipbetweenthemostimportantcase,thatislinearinthesignalanddigitalsignalprocessingsystemortheconvolutiontheorem.Useofthetheoremcanbetime-domainorspacedomaintotheconvolutionoperationinfrequencydomainequivalentofthemultiplicationoperation,thustheuseofFFTandotherfastalgorithms,thecalculationofeffective,cost-savingoperation.
Fromlinearconvolutionandcirculationofthedefinition,analyzesitsoperationprincipleandrelevantformula,procedures,andemphaticallyintroducesandanalysestheconvolutionoperationprocess,leteveryoneknowwhatconvolution.Aftertheprogramisrunningproperlyafteroperation,theresultswillbeputontherightofthewaveformDesmondtutupaperleteverybodyintuitivetocompare.
Keywords:
Matlab;Linearconvolution;Circularconvolution;Sequence;Wave;Right
引言
在泛函分析中,卷积(卷积)、旋积或摺积(英语:
Convolution)是通过两个函数f和g生成第三个函数的一种数学算子,表徵函数f与经过翻转和平移与g的重叠部分的累积。
如果将参加卷积的一个函数看作区间的指示函数,卷积还可以被看作是“滑动平均”的推广。
卷积是分析数学中一种重要的运算,数学上的卷积在信号处理中有着非常广泛的应用。
只要这个系统是线性的,对于一维空间是这样,二维、三维都是这样,空间域信号是这样,时间域信号也是这样。
一切信号传递处理系统都是卷积系统,但是信号发生系统不像卷积这样,因为信号发生系统不是一个无中生有的系统,它需要消耗能量,而且是一个非线性系统。
卷积关系最重要的一种情况,就是在信号与线性系统或数字信号处理中的卷积定理。
利用该定理,可以将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。
明确了这些含义以后,我们认为信号放大系统是卷积,信号测量和计数系统也是积。
进一步推广照相系统是卷积,视觉系统也是卷积。
世界上所有的系统都是卷积,例如脉搏是心跳的卷积,水压的波动是泵水电动机转动力的卷积,只要系统是线性的或近似线性的。
卷积的概念还可以推广到数列、测度以及广义函数上去。
因此,我们得到这样一个一般性的结论——卷积在我们的生活中无处不在,它的应用非常广泛。
1MATLAB软件简介
MATLAB名字由MATRIX和LABORATORY两词的前三个字母组合而成。
顾名思义,就是矩阵实验室(matrixlaboratory)。
MATLAB是一种高性能的科学计算软件,并且广泛应用于数学计算、算法开发、数学建模、系统仿真、数据分析可视化和程序设计集成化等,其具有强大的矩阵运算能力和极高的编程效率,而且使用我们熟悉的数字符号表示问题与答案,这对于初学者来说很容易上手,同时也方便了用户对自己需要的应用程序的开发,运行相应的程序还可以在图形用户界面的建立各种波形仿真图。
MATLAB是一个交互系统,它的基本数据元素是数组,尤其适合解决用矩阵和向量组织数据的科学技术计算问题,对于各种信号的处理可以用不同的库函数或者用户自己编辑的程序来处理,由此可以得到不同的结果,并且还可以经过图形显示来验证。
1.1MATLAB的优势
MATLAB编程语言又称为M语言,是一种交互式的高级编程语言,一种高阶的矩阵/数组语言。
它具有以下的特点和优势:
(1)语法简单和编程效率高
(2)便于用户使用和扩充
(3)方便高校的矩阵和数组运算
(4)方便的图形和图像操作功能
(5)功能强大的工具箱
1.1.1语法简单编程效率高
MATLAB是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。
新版本的MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。
使之更利于非计算机专业的科技人员使用。
1.1.2便于用户使用和补充
新版本的MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C++代码。
允许用户编写可以和MATLAB进行交互的C或C++语言程序
作为强大的科学计算软件,MATLAB提供了图形界面的设计与开发功能,MATLAB中的基本图形用户界面对象分为三类:
用户界面控制对象、下拉式菜单对象和内容式菜单对象。
1.1.3方便高校的矩阵和数组运算
MATLAB是一个包含大量计算算法的集合。
其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。
函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。
在高校中,MATLAB以成为数学,信息,控制等诸多学科有关课程的有效教学工具
1.1.4方便图形和图像操作功能
MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。
它对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。
1.1.5功能强大的工具箱
MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。
一般来说,它们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。
1.2MATLAB的组成
MATLAB很重要的特点,是附加了一个解决专门问题的应用程序大家族,叫工具箱。
它对于MATLAB用户是非常重要的,能让用户学习和应用专门的技术。
工具箱是MATLAB函数的全面集合,扩展了MATLAB解决特殊类型问题的环境。
工具箱可以应用的领域包括信号处理、控制系统、神经网络、磨具逻辑、子波、模拟等方面。
MATLAB这个名字,代表MATRIXLABOROATOR.MATLAB系统由5个主要部分组成:
1.2.1开发环境
这是一组工具程序,帮助用户使用MATLAB功能和文件。
许多工具是图形用户界面,包括MATLAB桌面和命令窗口,命令的历史窗口,编辑器和差错程序,观看帮助信息的浏览器,工作区,文件和收索路径。
1.2.2MATLAB的数学函数库
这是一个计算算法的巨大集合,范围从初等函数,入求和、正弦、余弦和复数运算,到更高级别的函数,像矩阵求逆、矩阵特征值、贝赛尔函数和快速傅里叶变换。
1.2.3MATLAB语言
一个高级的矩阵和数组运算,具有控制流语句、函数、数据结构、输入和输出、面向对象的程序特点。
用这种语言能够快速建立运行快且短小的程序,也能建立大的和复杂的应用程序。
1.2.4图形
MATLAB有广泛的程序,用于把向量和矩阵显示为图形,以及注解和打印这些图像。
它包括高级功能,用于二维和三维数据的形象化、图像处理、动画和演示图形;包括低级功能,让用户完全定制图形外观,以及为用户的应用程序建立完全的图形用户界面。
1.2.5MATLAB应用程序接口(API)
这是一个程序库,允许用户写C和FORTRAN程序与MATLAB交互。
其中包含的程序,用于从MATLAB调用例行程序,调用MATLAB作为计算引擎,以及读取MAT文件。
2卷积分析
2.1卷积的定义
任意信号
都可以根据不同需要进行不同的分解。
如信号
可以分解为直流分量和交流分量,也可以分解为奇分量和偶分量,或分解为实部分量和虚部分量。
如果信号费解为冲击信号,那么信号分解为一系列不同强度,不同时延的冲击信号的叠加,这个过程称为卷积积分。
一般而言,如果有两个函数
和
,则它们的积分
称为
与
的卷积积分,简称卷积,表达式为:
,即:
2.2线性卷积的运算
卷积运算是线性时不变系统分析的重要工具,很多滤波器的设计中都要用到卷积运算。
给出线性卷积运算的定义,设有离散信号x(n)和y(n),其线性卷积为:
线性卷积有四步运算:
①卷积运算时,y(n)要先反折得到y(-n);②m>0表示y(-n)序列右移,m<0表示左移,不同的m表示不同的
值。
线性卷积运算简洁表示为:
式中“∗”表示线性卷积运算符。
由线性卷积的定义
,等式右边是乘积求和形式,,因而考虑能否用矩阵相乘的形式来表示线性卷积。
假设序列x(n)长度为4点,y(n)长度为3点,x(n)除区间之外皆为零,y(n)除区间之外皆为零,用矩阵的形式来表达线性卷积Z:
000
00
Z=
0
0
00
000
x(n),y(n)序列长度不同,则将短序列补0使两者相同。
2.3循环卷积的运算
有限长序列的循环移位是指y((m-n))
,也就是先让序列y(n)以N为周期进行周期延拓,再进行反折,然后朝右移位,只朝一个方向移位的原因是:
对周期序列向右移动一个位置,也就相当于向左移动了N-1个位置,最后取(0,N-1)的N个值就得到了循环移位后的N个序列值。
设有序列x(n)和y(n),其N点循环卷积为:
由于循环移位的关系最后得到的循环卷积的长度就是N点,m取[0,1,2,…,N-1]。
循环卷积的简洁表示为:
式中
表示循环卷积运算符。
例如N=4的循环卷积如下:
Z=
其中,N≥length(y(n))。
值得说明的是,当N≥length(y(n))+length(x(n))-1时,圆周卷积的值等于线性卷积。
3MATLAB设计线性卷积
3.1线性卷积的分析
两个序列的线性卷积可以分为下列4个步骤:
(1)反折:
先将x(n)和h(n)的变量n换成m,变成x(n)和h(m),再将h(m)以y轴为对称轴反褶成h(-m)。
(2)移位:
将h(-m)移位n,得h(n-m)。
当n为正数时,右移n位;当n为负数时,左移n位。
(3)相乘:
将h(n-m)和x(m)的对应点值相乘。
(4)求和:
将以上所有对应点的乘积累加起来,即得y(n)。
3.2线性卷积的设计流程图
根据线性卷积的分析,可设计流程图如图3.1所示
N
Y
m=M
n=L
图3.1线性卷积流程图
3.3线性卷积的MATLAB设计源程序
本次实训的源程序如下:
functiony=myconv(x1,x2)
x1=input('x1=');
x2=input('x2=');
N1=length(x1);
M=length(x2);
L=N1+M-1;
for(n=1:
L)
y(n)=0;
for(m=1:
M)
k=n-m+1;
if(k>=1&k<=N1)
y(n)=y(n)+x2(m)*x1(k);
end
end
end
y1=conv(x1,x2);
nx1=0:
N1-1;
nx2=0:
M-1;
ny=0:
L-1;
subplot(231);
stem(nx1,x1,'.k');xlabel('n');ylabel('x1(n)');gridon;
title('序列x1')
subplot(232);
stem(nx2,x2,'.k');xlabel('n');ylabel('x2(n)');gridon;
title('序列x2')
subplot(233);
stem(ny,y,'.k');xlabel('n');ylabel('y(n)');gridon;
title('线性卷积')
subplot(234);
stem(y1');xlabel('n');ylabel('y1');gridon;
title('conv直接卷积')
运行程序,输入序列x1和x2
x1=[-123-5]
x2=[67-10412]
线性卷积结果:
[-6542-33-698616-60]
运行结果如图3.2所示:
图3.2线性卷积运行结果
4MATLAB设计循环卷积
4.1循环卷积的分析
两个序列的循环卷积可以分三个步骤完成:
(1)初始化:
确定循环点数N,测量输入2个序列的长度,长度小于N的在后面补0。
(2)循环右移函数:
将序列x(n)循环右移,一共移N次(N为循环卷积的循环次数),最后将每次循环成的新序列组成一个矩阵V。
(3)相乘:
将x(n)移位后组成的矩阵V与第二个序列h(n)对应相乘,即得循环卷积结果。
4.2根据循环卷积分析设计流程图
循环卷积流程图如图4.1所示:
(1)主流程图
(2)循环函数流程图
K=1
图4.1循环卷积流程图
4.3根据循环卷积流程图设计matlab源代码
functiony=myconv(x1,x2)
x1=input('x1=');
x2=input('x2=');
N=input('N=');
x1=[x1,zeros(1,N-length(x1))];
x2=[x2,zeros(1,N-length(x2))];
V=circlel(x2)
Z=x1*V;
stem(Z');xlabel('n');ylabel('Z');gridon;
title('循环卷积结果Z')
运行程序,输入序列x1,x2
x1=[-123-5]
x2=[67-10412]
循环卷积结果
[10-5542-33-6986]
运行图形如图4.2所示
图4.2循环卷积运行结果
5总结
总结本次数字信号处理实训,我受益匪浅。
首先就是方案的确定。
由于这个学期我学习了DSP这门课程,课程中我了解到要实现两信号的卷积,可以通过定义来实现,也可以通过DFT来计算线性卷积。
对于有限长序列,存在两种形式的卷积:
线性卷积与圆周卷积。
由于圆周卷积可以采用DFT的快速算法——快速傅里叶变换进行运算,运算速度上有很大的优越性。
其中,设计线性卷积有4个步骤,反折、移位、相乘、求和,而循环卷积则是通过循环移位后得到的矩阵与序列相乘。
根据上DSP课上老师讲的求法,画出了思路的流程图,然后根据流程图写出程序,事半功倍。
将结果与直接调用matlab自带的函数比较,结果显示,自己设计的程序是正确的。
通过这次实训,我对线性卷积和循环的定义、原理、以及实现方法都有了深入的认识。
同时也对MATLAB软件产生了更加浓厚的兴趣。
在做完本次实训要求的线性卷积之后,我运用了同样的思路,设计出了循环卷积,算是对本次实训的一个扩展,同时也提高了自己的编程水平和对matlab的运用。
本次实训,检验了自己的能力,加强了逻辑思维的能力,不过我也发现了自身存在的一些问题,比如在MATLAB软件的应用上还有一些功能不懂如何运用的地方,但是是在老师和同学的帮助下,我认真学习,并且懂得了许多以前不懂的matlab的运用。
还有很多matlab的强大功能,希望能在日后好好学习,取得更好的成绩,也希望日后老师能不厌其烦的指导我,给予我更大的支持。
谢辞
本次实训,我非常的感谢严素清老师在实训期间给了我很多的指导与帮助,首先是全面的为我们讲解实训中的一些注意事项,然后在我遇到不懂的程序思路问题上提醒了我如何解决,并且在时间上督促我们按时完成相应的进度,保证了我们实训能够按时完成。
还要感谢符强老师,感谢他提出建议让我以C语言的思路去写matlab的程序,并举得了成功,同时要求我们能够在做完自己课题之后做一些相关的扩展,是因为符强老师的监督,才让我有想法去做实训的扩展,并运行成功。
最后感谢纪元法老师,在问问题的时候能够耐心的回答我们,并鼓励我们多看书。
最后,再次衷心地感谢所有关心、支持、帮助过我的老师、同学和亲友!
参考文献
[1]戴明桢等编著.TMS320C54XDSP结构原理及应用.北京:
航空航天大学出版社,第2版,2007;
[2]彭启琮编著.DSP技术的发展与应用.北京:
高等教育出版社,2002;
[3]胡广书编著.数字信号处理理论、算法与实现.北京:
清华大学出版社,2005;
[4]北京合众达电子技术有限公司编著.SEED-DTK系列实验手册.北京合众达电子技术有限公司出版,2007。
[5]李真芳,苏涛等.DSP程序开发一MATLAB调试及直接目标代码生成「M].西安:
西安电子科技大学出版社,2003.87--163.
[6]楼顺天,李博函.基于MATLAB的系统分析与设计一信号处理[M].西安:
西安电子科技大学出版社,1998.81--88.
[7]王秀芳,关凌涛.基于MatLab与DSP的滤波器的快速设计方法[期刊文章].现代计算机,2008,总第二七七期:
97--99
[8]赵秀玲.基于定点DSP的FIR数字滤波器的研究与设计[硕士论文].曲阜师范大学,2007.15--32
[9]罗军辉,罗勇江等.MATLAB在数字信号处理中的应用「M].北京:
机械工业出版社,2005.63--128.