用matlab实现两信号的卷积 论文.docx
- 文档编号:7457380
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:13
- 大小:120.80KB
用matlab实现两信号的卷积 论文.docx
《用matlab实现两信号的卷积 论文.docx》由会员分享,可在线阅读,更多相关《用matlab实现两信号的卷积 论文.docx(13页珍藏版)》请在冰豆网上搜索。
用matlab实现两信号的卷积论文
摘要
MATLAB是一款在数学类科技应用软件中特别是在数值计算方面首屈一指的软件,它可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
而线性卷积在工程上的应用亦非常广泛,在Matlab软件处理下,实现任意两个序列的线性卷积对于工程上的辅助是相当重要的。
卷积关系最重要的一种情况,就是在信号与线性系统或数字信号处理中的卷积定理。
利用该定理,可以将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。
本文从线性卷积的定义出发,分析其运算原理以及相关的公式、程序,着重介绍并分析了卷积的运算过程,让大家明白什么是卷积。
为了让大家对其有更直观的了解,本文还附上了线性卷积在Matlab中运行所得到的卷积结果及波形图。
关键词:
Matlab;线性卷积;序列;波形图
Abstract
MATLABisatypeoftechnologyinapplicationsofmathematics,especiallyinnumericalcalculationoftheleadingsoftware,whichcanbematrixcalculation,anddatamappingfunction,therealizationofalgorithms,creationofuserinterface,connectedtootherprocedures,suchasprogramminglanguages,themainapplicationinengineeringcomputing,controldesign,signalprocessingandcommunications,imageprocessing,signaldetection,financialmodelinginareassuchasdesignandanalysis.AndlinearconvolutionintheapplicationofengineeringhasaverywiderangeofsoftwareinMatlab,therealizationofanytwosequencesoflinearconvolutionsupportforprojectsisveryimportant.Convolutionrelationshipbetweenthemostimportantcase,thatislinearinthesignalanddigitalsignalprocessingsystemortheconvolutiontheorem.Useofthetheoremcanbetime-domainorspacedomaintotheconvolutionoperationinfrequencydomainequivalentofthemultiplicationoperation,thustheuseofFFTandotherfastalgorithms,thecalculationofeffective,cost-savingoperation.
Inthispaper,thedefinitionoflinearconvolution,theanalysisofitsoperationprincipleandtherelatedformulas,procedures,andfocusesonananalysisofthecomputingprocessofconvolution,sothateveryoneunderstandsthemeaningofconvolution.Inordertoleteveryonehaveamoreintuitivefortheirunderstanding,thisarticleisalsoaccompaniedbyalinearconvolutionoperationinMatlabhasbeeninthedeconvolutionresultsandwaveforms.
Keywords:
Matlab;Linearconvolution;Sequence;Wave
目录
引言1
1MATLAB简介1
1.1MATLAB的优势1
1.1.1友好的工作平台和编程环境1
1.1.2简单易用的程序语言2
1.1.3强大的科学计算机数据处理能力2
1.1.4出色的图形处理功能2
1.1.5应用广泛的模块集合工具箱2
1.1.6实用的程序接口和发布平台2
1.1.7应用软件开发(包括用户界面)2
1.2MATLAB的组成3
1.2.1开发环境3
1.2.2MATLAB的数学函数库3
1.2.3MATLAB语言3
1.2.4图形3
1.2.5MATLAB应用程序接口(API)3
2卷积的理论分析3
2.1卷积的定义3
2.2线性卷积的运算4
3卷积的MATLAB实现5
3.1利用定义计算卷积5
3.2设计分析6
3.3设计流程图6
3.4MATLAB源程序7
4总结9
谢辞11
参考文献12
引言
卷积是分析数学中一种重要的运算,数学上的卷积在信号处理中有着非常广泛的应用。
比如,h(x)*f(x)表示信号f(x)被h(x)卷积。
h(x)就是信号处理系统的脉冲响应,h(x)=h(x)*δ(x)代表一个脉冲通过系统的输出结果。
只要这个系统是线性的,对于一维空间是这样,二维、三维都是这样,空间域信号是这样,时间域信号也是这样。
一切信号传递处理系统系统都是卷积系统,但是信号发生系统不像卷积这样,因为信号发生系统不是一个无中生有的系统,它需要消耗能量,而且是一个非线性系统。
通过对卷积的理解,可以告诉我们,如果h(x)*δ(x)=0则表明系统输出函数h(x)≡0,这是没有意义的,一般情况下输出不等于输出,这说明系统对输入信号做了某种加工改造,从而得到我们想要的并且有用的信号。
卷积关系最重要的一种情况,就是在信号与线性系统或数字信号处理中的卷积定理。
利用该定理,可以将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。
明确了这些含义以后,我们认为信号放大系统是卷积,信号测量和计数系统也是积。
进一步推广照相系统是卷积,视觉系统也是卷积。
世界上所有的系统都是卷积,例如脉搏是心跳的卷积,水压的波动是泵水电动机转动力的卷积,只要系统是线性的或近似线性的。
卷积的概念还可以推广到数列、测度以及广义函数上去。
因此,我们得到这样一个一般性的结论——卷积在我们的生活中无处不在,它的应用非常广泛。
1MATLAB软件简介
MATLAB是一种高性能的科学计算软件,并且广泛应用于数学计算、算法开发、数学建模、系统仿真、数据分析可视化和程序设计集成化等,其具有强大的矩阵运算能力和极高的编程效率,而且使用我们熟悉的数字符号表示问题与答案,这对于初学者来说很容易上手,同时也方便了用户对自己需要的应用程序的开发,运行相应的程序还可以在图形用户界面的建立各种波形仿真图。
MATLAB是一个交互系统,它的基本数据元素是数组,尤其适合解决用矩阵和向量组织数据的科学技术计算问题,对于各种信号的处理可以用不同的库函数或者用户自己编辑的程序来处理,由此可以得到不同的结果,并且还可以经过图形显示来验证。
1.1MATLAB的优势
1.1.1友好的工作平台和编程环境
MATLAB由一系列工具组成。
这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。
包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。
简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。
1.1.2简单易用的程序语言
Matlab一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。
新版本的MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。
使之更利于非计算机专业的科技人员使用。
1.1.3强大的科学计算机数据处理能力
MATLAB是一个包含大量计算算法的集合。
其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。
函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。
1.1.4出色的图形处理功能
MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。
它对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。
1.1.5应用广泛的模块集合工具箱
MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。
一般来说,它们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。
1.1.6实用的程序接口和发布平台
新版本的MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C++代码。
允许用户编写可以和MATLAB进行交互的C或C++语言程序。
1.1.7应用软件开发
在开发环境中,使用户更方便地控制多个文件和图形窗口;在编程方面支持了函数嵌套,有条件中断等;在图形化方面,有了更强大的图形标注和处理功能,包括对性对起连接注释等;在输入输出方面,可以直接向Excel和HDF5进行连接。
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-1)
2.2线性卷积的运算
线性卷积是求离散系统响应的一种主要方法,在此理论基础上有许多重要应用.而DFT和FFT的最大特点是其时域、频域都是离散的有限长序列,特别是用FFT计算线性卷积可充分发挥其优越性,使计算速度大大提高。
线性非移变系统的输入与输出序列之间存在卷积关系,设x(n)为线性非移变系统的输入,y(n)为输出。
当输入为
时,其单位冲激响应h(n)为:
(2-2)
当输入为
(k为正或负整数)时,则有:
(2-3)
如输入序列x(n)表示为各延迟单位取样序列幅度的加权和,即:
(2-4)
因为系统是线性非移变系统,所以:
(2-5)
上式就是离散卷积和,也称为离散卷积或线性卷积。
它说明任何线性非移变系统均可用其单位冲激响应h(n)来表征,也即是输入x(n)与输出y(n)之间的关系满足卷积和的关系。
如果说差分方程是系统的参数描述,那么线性卷积就是系统的非参数描述。
一般可用下列符号表示:
(2-6)
这里k表示输入时刻,是求和中的变化量,n表示输出时问,是求和中的参变量。
(n-k)表示对动态系统的记忆时间。
一个物理可实现系统。
n必须大于,即(n-k)≥0。
对于式(6),如x(n)、h(n)均为有限长。
这样,x(k)的非零值区间为0≤k≤N-l;h(n-k)的非零值区间为0≤(n-k)≤M-1将以上两不等式相加得0≤n≤(N+M-2),在此区间外不是x(k)为零,就是h(n-k)为零,所以y(n)长为(N+M-1),即两个长分别为N和M的有限长序列的卷积结果是一个(N+M-1)长的序列。
这样式(5)可改写为:
(2-7)
说明线性卷积实质上是激励x(n)中每个样值单独通过系统响应在不同时刻进行叠加得出整个激励作用于系统的响应。
一个线性时不变离散系统的响应y(n)可以用它的单位冲激响应h(n)和输入信号x(n)的卷积来表示:
(2-8)
根据傅立叶变换和Z变换的性质,与式(7)对应应该有
(2-9)
(2-10)
式(2-8)告诉我们可以通过对两个序列的移位、相乘、累加计算信号响应;而式(2-10)告诉我们卷积运算也可以在频域上用乘积实现。
3MATLAB设计卷积
3.1卷积的定义分析
上式的运算关系称为卷积运算。
两个任意序列的卷积则是指一个序列与另一个序列反褶后逐次移位乘积之和,故称为离散卷积,也称两序列的线性卷积。
其计算的过程包括以下4个步骤:
(1)反折:
先将x(n)和h(n)的变量n换成m,变成x(n)和h(n),再将h(n)以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卷积的设计分析
根据以上的卷积理论分析,卷积的计算可以根据定义法来进行编程运算,此外,由以上的分析我们也可以知道,任意的两个序列卷积后所得的序列长度与输入的两个序列长度有着密切的关系。
如:
当输入的两个序列为x(n)和h(m)时,此时可知x(n)序列的长度为n,h(m)序列的长度为m,那么两个序列卷积的总长度就为L=n+m-1。
由此可见,线性卷积的取值不仅和序列的长度有关,而且还和每个序列中的每个值有关。
从定义上看,卷积的计算过程包括前面讲的4个步骤,但其中最重要也是最困难的就是移位相乘的计算了。
由于序列是单个值的脉冲所组成的数组,故在卷积的计算中,我们需要对相应有值的脉冲进行移位后再相乘,然后将各个点的值相加,这样就得到各个相应点的卷积值,最后再利用一个while语句进行循环相乘便可得到各点的乘积值,把这些值相加求和,就可以到得最终的输出y(n)。
由于本次题目只要求输入任意两个序列,不要求显示波形。
但为了让程序有更好的可观性,在调用子函数中添加相应的显示波形函数,程序运行后便可得到相应的序列波形图。
这样不仅使程序的功能更加齐全,更加完善,而且还能让用户简单明了的看到卷积后所得到的序列波形图,同时还可以验证程序的正确与否。
3.3卷积的设计流程图
本程序的流程图如图3.1所示:
图3.1程序流程图
3.4卷积的MATLAB设计源程序
本次实训的源程序如下:
(1)
functiony=jch(x,h)%定义函数文件jch.m
x=[123783];h=[23489577]%给XH付值
N=length(x);%N的最大长度为X
M=length(h);%M的最大长度为H
L=N+M-1;%输出序列的长度为L
n=0;%赋初值,y(n)的起始位置
while(n n=n+1; y(n)=0;%y(n)的初值 m=0;%反折 while(m m=m+1; k=n-m+1;%移位 if(k>=1&k<=N) y(n)=y(n)+h(m)*x(k);%相乘,求和 end end end nx=0: N-1;%范围 nh=0: M-1; ny=0: L-1; subplot(131); stem(nx,x,'.k');xlabel('n');ylabel('x(n)');gridon;%杆图 subplot(132); stem(nh,h,'.k');xlabel('n');ylabel('h(n)');gridon; subplot(133); stem(ny,y,'.k');xlabel('n');ylabel('y(n)');gridon; (2) a=[123783];%序列 b=[23489577] k=length(a);%定义长度 bk=length(b); n=length(a)+length(b)-1;%同样是定义长度,不过是输出长度 a=[azeros(1,n-k)];%补零矩阵,让运算更快 b=[bzeros(1,n-bk)]; y=zeros(1,n); fori=1: n%for语句,从1开始 temp=0;%赋初值,起始位置 forj=1: n ifi>=j temp=temp+a(j).*b(i+1-j)%公式 else break; end end y(i)=temp end y subplot(2,1,1) stem(y) 输入序列x=x=[123783];,输入序列h=[23489577],调用子函数y=jch(x,h),运行结果如下,输出波形图如图3.2所示: y= 271639741051411751661371207721 图3.2程序运行结果图 3.5卷积的MATLAB设计源程序分析 首先,定义函数名为jch(x,h),定义两输入序列的长度分别为N和M,输出序列的长度为L。 然后一个变量n,只要它的值小于输出序列的长度L,即卷积的计算并未结束,程序就一直计算下去。 最后便是错位相乘,得到每个点的卷积值。 最后将各个点的值相加,得到最终的结果。 调用波形图显示函数,将输入与输出的序列用波形图显示出来。 4总结 总结本次数字信号处理实训,我受益匪浅。 本次实训为期两周,分为选题,程序编写等几个阶段。 由于本次实训的时间较短,而且选题的局限性大,要选到个好的题目较难。 经过深思熟虑后,我决定选择用Matlab实现两信号的卷积这一题目。 确定下题目后,首先就是方案的确定。 经过翻阅相关资料,我了解到要实现两信号的卷积,可以通过定义来实现,也可以通过DFT来计算线性卷积。 对于有限长序列,存在两种形式的卷积: 线性卷积与圆周卷积。 由于圆周卷积可以采用DFT的快速算法——快速傅里叶变换进行运算,运算速度上有很大的优越性。 然而实际问题一般都是线性卷积运算。 例如信号通过线性时不变系统,系统的输出y(n)是输入x(n)与单位脉冲响应h(n)的线性卷积y(n)=x(n)*h(n)。 正因为如此,考虑到时间及难度问题,我决定采用定义来编写程序。 对于MATLAB语言程序的编程,形式上很像C语言的编程算法,虽然在MATLAB的学习中是运用高级语言来编译的,也比较人性化,但是在C语言的影响下着实让我感到有些困难,因此在此次的卷积程序编程中,所应用的就是C语言编程思路,经过之后的学习与复习,对MATLAB语言的基本语句都能运用自如了,所以编起程序来就很容易入手,在确定题目之后的检查中就已经编好了大部分的程序,在随后的时间中,经过不断的完善,终于在第二次进度检查之前完成了最后的编译,并且实现了多重卷积的功能,虽然还有些缺陷,但是在实际的卷积计算中却得到很好验证,达到了很好的效果,为此使我很高兴。 与此同时也学到了很多有MATLAB的原理及其相关应用,体验到了小小的MATLAB软件却有这么多神奇作用和功能,激发了我对MATLAB软件学习的兴趣,为以后的更深入的学习打下了很好的坚实的基础,第一次做程序有关的MATLAB的应用,难免会有点缺陷,但我会以此为动力,不断督促自己,不断求知,一次失败了,不要气馁,要积极寻找错误原因,相信自己会成功的。 通过这次实训,我对线性卷积的定义、原理、以及实现方法都有了深入的认识。 同时也对MATLAB软件产生了更加浓厚的兴趣。 在同学的激励下,我也尝试着编写一个能实现三个任意长度序列的多重卷积的程序。 不过由于时间问题,我没有放太多的精力在这上面,不过我相信在日后的学习中,我一定能实现该功能。 本次实训,也检验了自己的能力,加强了逻辑思维的能力,不过我也发现了自身存在的一些问题,比如在MATLAB软件的应用上还有很多不成熟不理解的地方,但是相信在以后的学习生活中我可以很好的与予改正,取得更好的成绩,也希望日后老师能继续指导我,给予我更大的支持。 谢辞 转眼间这次实训就结束了,想想两周时间中每天早上在计算机旁努力的这段时间,不禁让我感慨万千。 在其中所碰到的问题和难题确实让我受到了一次洗礼,但是首先,还是非常感谢学院给我们安排了这次数字信号处理实训实习的机会。 学院为了这次实训,可谓用心良苦,不仅提供了实验室给那些没有电脑的同学用于编程,还有三位优秀的指导老师在悉心指导着我们,放弃休息时间,每天早上八点准时到实验室给我们指点迷津,为我们答疑解惑,这不光使我们的理论知识加强了,还进一步提高了我们的实践能力。 在此特别感谢老师,她在实训期间给了我很多的指导与帮助,全面的为我们讲解实训中的一些注意事项,然后在整个实训过程中对我们提出的种种问题都能耐心的指导,并且在时间上督促我们按时完成相应的进度。 此外,也感谢符强老师和纪元法老师,他们在整个实训过程中给予了我们极大的帮助和鼓励,使我们顺利的完成了整个数字信号处理的实训。 最后,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 用matlab实现两信号的卷积 论文 matlab 实现 信号 卷积