基于MATLAB的卷积演示系统.docx
《基于MATLAB的卷积演示系统.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的卷积演示系统.docx(22页珍藏版)》请在冰豆网上搜索。
基于MATLAB的卷积演示系统
数字信号处理课程设计
题目:
基于MATLAB的卷积演示系统
学院:
专业:
班级:
学号:
:
指导教师:
摘要
本文讲述的是运用MATLAB软件编写线性卷积和循环卷积,运行程序并得到正确结果,附上运行结果图让大家参照对比。
MATLAB是一款在数学类科技应用软件中特别是在数值计算方面首屈一指的软件,它可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
而线性卷积和循环卷积在工程上的应用亦非常广泛,在MATLAB软件处理下,实现任意两个序列的线性和循环卷积对于工程上的辅助是相当重要的。
卷积关系最重要的一种情况,就是在信号与线性系统或数字信号处理中的卷积定理。
利用该定理,可以将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。
本文从线性卷积和循环的定义出发,分析其运算原理以及相关的公式、程序,着重介绍并分析了卷积的运算过程,让大家明白什么是卷积。
程序运行之后得到正确的结果,将运行后正确的波形图放在本次论文中让大家直观的做比较。
关键词:
MATLAB、线性卷积、循环卷积、波形图
Abstract
ThisisaboutusingMATLABsoftwarelinearconvolutionandcyclicconvolution,operationprocedureandgettherightresult,enclosedoperationresultdiagramleteverybodyreference
MATLABisatypeoftechnologyinapplicationsofmathematics,especiallyinnumericalcalculationoftheleadingsoftware,whichcanbematrixcalculation,anddatamappingfunction,therealizationofalgorithms,creationofuserinterface,connectedtootherprocedures,suchasprogramminglanguages,themainapplicationinengineeringputing,controldesign,signalprocessingandmunications,imageprocessing,signaldetection,financialmodelinginareassuchasdesignandanalysis.AndlinearconvolutionintheapplicationofengineeringhasaverywiderangeofsoftwareinMATLAB,therealizationofanytwosequencesoflinearconvolutionsupportforprojectsisveryimportant.Convolutionrelationshipbetweenthemostimportantcase,thatislinearinthesignalanddigitalsignalprocessingsystemortheconvolutiontheorem.Useofthetheoremcanbetime-domainorspacedomaintotheconvolutionoperationinfrequencydomainequivalentofthemultiplicationoperation,thustheuseofFFTandotherfastalgorithms,thecalculationofeffective,cost-savingoperation.
Fromlinearconvolutionandcirculationofthedefinition,analyzesitsoperationprincipleandrelevantformula,procedures,andemphaticallyintroducesandanalysestheconvolutionoperationprocess,leteveryoneknowwhatconvolution.Aftertheprogramisrunningproperlyafteroperation,theresultswillbeputontherightofthewaveformDesmondtutupaperleteverybodyintuitivetopare.
Keywords:
MATLAB;Linearconvolution;Circularconvolution;SequenceWave
第一章背景
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.1卷积的定义
任意信号f(t)都可以根据不同需要进行不同的分解。
如信号f(t)可以分解为直流分量和交流分量,也可以分解为奇分量和偶分量,或分解为实部分量和虚部分量。
如果信号费解为冲击信号,那么信号分解为一系列不同强度,不同时延的冲击信号的叠加,这个过程称为卷积积分。
一般而言,如果有两个函数
和
,则它们的积分
称为
与
的卷积积分,简称卷积,表达式为:
,即:
2.2线性卷积的运算
卷积运算是线性时不变系统分析的重要工具,很多滤波器的设计中都要用到卷积运算。
给出线性卷积运算的定义,设有离散信号x(n)和y(n),其线性卷积为:
线性卷积有四步运算:
①卷积运算时,y(n)要先反折得到y(-n);②m>0表示y(-n)序列右移,m<0表示左移,不同的m表示不同的∁xy(m)值。
线性卷积运算简洁表示为:
式中“∗”表示线性卷积运算符。
由线性卷积的定义
,等式右边是乘积求和形式,,因而考虑能否用矩阵相乘的形式来表示线性卷积。
假设序列x(n)长度为4点,y(n)长度为3点,x(n)除区间之外皆为零,y(n)除区间之外皆为零,用矩阵的形式来表达线性卷积Z:
x(n),y(n)序列长度不同,则将短序列补0使两者相同。
2.3循环卷积的运算
有限长序列的循环移位是指也就是先让序列y(n)以N为周期进行周期延拓,再进行反折,然后朝右移位,只朝一个方向移位的原因是:
对周期序列向右移动一个位置,也就相当于向左移动了N-1个位置,最后取(0,N-1)的N个值就得到了循环移位后的N个序列值。
设有序列x(n)和y(n),其N点循环卷积为:
由于循环移位的关系最后得到的循环卷积的长度就是N点,m取[0,1,2,…,N-1]。
循环卷积的简洁表示为:
式中⊗表示循环卷积运算符。
例如N=4的循环卷积如下:
其中,N≥length(y(n))。
值得说明的是,当N≥length(y(n))+length(x(n))-1时,循环卷积的值等于线性卷积。
第三章设计容与分析
3.1设计容
自行设计两个有限长序列,要求:
(1)序列的长度和容由运行时输入;
(2)分别动态演示它们进行线性卷积和循环卷积的过程,要求体现翻转、移位、相乘、求和等过程;
(3)根据卷积结果,分析两类卷积的关系;
(4)动态演示基于重叠相加法的长序列快速卷积,长短序列容自定;
(5)用MATLAB设计一个卷积演示界面。
3.2线性卷积的分析
两个序列的线性卷积可以分为下列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.3循环卷积的分析
两个序列的循环卷积可以分三个步骤完成:
(1)初始化:
确定循环点数N,测量输入2个序列的长度,长度小于N的在后面补0。
(2)循环右移函数:
将序列x(n)循环右移,一共移N次(N为循环卷积的循环次数),最后将每次循环成的新序列组成一个矩阵V。
(3)相乘:
将x(n)移位后组成的矩阵V与第二个序列h(n)对应相乘,即得循环卷积结果。
第四章实验代码及结果
4.1线性卷积的MATLAB设计源程序
1.线环卷积源程序:
functiony=conv(x1,x2);%定义一个函数
x1=input('x1=');%输入序列x1
x2=input('x2=');%输入序列x2
N1=length(x1);%定义x1的长度
M=length(x2);%定义x2的长度
L=N1+M-1;%序列的长度
for(n=1:
L)%n取1、2、……L,每个值都执行for循环中的代码一次
y(n)=0;
for(m=1:
M)%m取1、2、……M,每个值都执行for循环中的代码一次
k=n-m+1;
if(k>=1&k<=N1)
y(n)=y(n)+x2(m)*x1(k);%定义序列y(n)
end
end
end
y1=conv(x1,x2);%x1和x2进行卷积
nx1=0:
N1-1;%定义nx1取值
nx2=0:
M-1;%定义nx2取值
ny=0:
L-1;%定义ny的取值
subplot(2,3,1);%画出卷积结果图
stem(nx1,x1,'.k');xlabel('n');ylabel('x1(n)');gridon;
title('序列x1')%命名x轴,y轴
subplot(2,3,2);
stem(nx2,x2,'.k');xlabel('n');ylabel('x2(n)');gridon;
title('序列x2')
subplot(2,3,3);%画出运行结果图形
stem(ny,y,'.k');xlabel('n');ylabel('y(n)');gridon;
title('线性卷积')
subplot(2,3,4);
stem(y1');xlabel('n');ylabel('y1');gridon;
title('conv直接卷积')%对图形进行命名
运行程序,输入序列x1和x2
X1=[-123-5]
X2=[67-10412]
线性卷积结果为:
运行结果如下图所示:
图1现行卷积运行结果
4.2循环卷积的MATLAB设计源程序
1.循环卷积源程序:
x1=input('x1=');%输入序列x1
x2=input('x2=');%输入序列x2
N=input('N=');%输入点数N
xn1=length(x1);%定义x1的长度
xxn1=0:
xn1-1;%定义xxn1取值
subplot(3,1,1);%画出运行结果图形
stem(xxn1,x1,'.');
title('x2');
xn2=length(x2);%定义x2的长度
xxn2=0:
xn2-1;%定义xxn2取值
subplot(3,1,2);%画出循环卷积图
stem(xxn2,x2,'.');
title('x2');%命名为x2
if(length(x1)>N);
x1=[x1,zeros(1,N-length(x1))];%把序列x1按点数扩展,不足补零
x2=[x2,zeros(1,N-length(x2))];%把序列x1按点数扩展,不足补零
m=0:
N-1;
x=zeros(N,N);%N行N列矩阵
forn=0:
N-1%n取1、2、……N-1,每个值都执行for循环中的代码一次
x(:
n+1)=x2(mod((n-m),N)+1);
end;
yn=x1*x;
subplot(3,1,3);%画出运行结果图形
stem(m,yn,'r','.');
title('序列x1和序列x2的循环卷积结果');%图形命名
运行程序,输入序列x1,x2
x1=[-123-5]
x2=[67-10412]
N=10
循环卷积结果如图2:
图2:
N=10时循环卷积运行结果图
当输入序列x1=[-123-5],x2=[67-10412],N=8时。
结果如图3
图3:
N=8时循环卷积运行结果图
4.3分析两类卷积关系
循环卷积是线性卷积进行循环移位后的结果,当循环卷积的点数N>=线性卷积两个信号长度的和减1,则循环卷积与线性卷积的结果是一样的。
假设lfm信号长度是N,lfm_back长度是N,循环卷积的长度是L,则L应该>=2*N-1.
4.4动态演示基于重叠相加法的长序列快速卷积
1.重叠相加法快速卷积源程序如下:
N=8;%分段的长度,也就是做fft的长度
h=[1,3,2,1];%系统冲击响应h(n)
fori=0:
9%定义x(n)
x(i+1)=5-i;
end
fori=10:
18
x(i+1)=i-15;
end
Lenx=length(x);
M=length(h);
M1=M-1;%重叠部分的长度
L=N-M1;%不重叠部分的长度
h=fft(h,N);
K=ceil(Lenx/L);%分的段数
fori=Lenx:
K*L-1%将x(n)补成长度为K*L的序列
x(i+1)=0;
end
Y=zeros(K,N);%保存结果矩阵初始化
YY=zeros(1,(K-1)*L+N);%最终结果矩阵初始化
fork=0:
K-1
xk=[x(k*L+1:
k*L+L),zeros(1,M1)];
Y(k+1,:
)=(ifft(fft(xk).*h));
YY(k*L+1:
k*L+N)=YY(k*L+1:
k*L+N)+Y(k+1,:
)
end
运行后结果如下:
4.5用MATLAB设计一个卷积演示界面
(1)启动MATLABR2010a
在正确完成MATLAB的安装并启动计算机之后,选择“开始”|“所有程序”|MATLAB|R2010a|MATLABR2010a命令,或者直接双击桌面上的MATLAB的快捷方式图标
,启动MATLABR2010a。
(2)MATLABR2010a的主界面
MATLAB的默认窗口如图4所示,其中包括主菜单栏、工具栏、命令窗口、历史命令窗口、工作区浏览器和当前路径窗口等。
图4:
MATLAB默认窗口
(3)点击工具栏的
按钮,将弹出以下的菜单,如图5。
图5:
MATLAB窗口
在空白处写下所要实现的卷积源程序代码,如图6。
图6:
程序输入窗口
(4)源程序代码写好后,此时按下F5按钮,将弹出以下的菜单,如图7。
图7:
保存程序窗口
点击保存按钮,将弹出以下界面,如图8。
图8:
运行程序窗口
(5)输入X1=[-123-5],X2=[67-10412]后,按下Enter键:
出现以下结果:
同时弹出以下的运行界面,如图9
图9:
程序运行结果图
第五章收获与体会
总结本次数字信号处理课程设计,我受益匪浅。
首先就是方案的确定。
由于这个学期我学习了数字信号处理这门课程,课程中我了解到要实现两信号的卷积,可以通过定义来实现,也可以通过DFT来计算线性卷积。
对于有限长序列,存在两种形式的卷积:
线性卷积与循环卷积。
由于循环卷积可以采用DFT的快速算法——快速傅里叶变换进行运算,运算速度上有很大的优越性。
其中,设计线性卷积有4个步骤,翻转、移位、相乘、求和,而循环卷积则是通过循环移位后得到的矩阵与序列相乘。
根据上数字信号处理课上老师讲的求法,画出了思路的流程图,然后根据流程图写出程序,事半功倍。
将结果与直接调用MATLAB自带的函数比较,结果显示,自己设计的程序是正确的。
通过这次课程设计,我对线性卷积和循环的定义、原理、以及实现方法都有了深入的认识。
同时也对MATLAB软件产生了更加浓厚的兴趣。
在做完本次课程设计要求的线性卷积之后,我运用了同样的思路,设计出了循环卷积,算是对本次课程设计的一个扩展,同时也提高了自己的编程水平和对MATLAB的运用。
本次课程设计,检验了自己的能力,加强了逻辑思维的能力,不过我也发现了自身存在的一些问题,比如在MATLAB软件的应用上还有一些功能不懂如何运用的地方,但是是在老师和同学的帮助下,我认真学习,并且懂得了许多以前不懂的MATLAB的运用。
还有很多MATLAB的强大功能,希望能在日后好好学习,取得更好的成绩,也希望日后老师能不厌其烦的指导我,给于我更大的支持。
致
本次课程设计,我非常的感贾朝川老师在课程设计期间给了我很多的指导与帮助,首先是全面的为我们讲解课程设计中的一些注意事项,然后在我遇到不懂的程序思路问题上提醒了我如何解决,并且在时间上督促我们按时完成相应的进度,保证了我们课程设计能够按时完成。
还要感金星老师,感他提出要求我们能够在做完自己课题之后做一些相关的扩展,是因为金星老师的监督,才让我有想法去做课程设计的扩展,并运行成功。
最后感振老师,在问问题的时候能够耐心的回答我们,并鼓励我们多看书。
最后,再次衷心地感所有关心、支持、帮助过我的老师、同学和亲友!
参考文献
[1]高西全,丁玉美等.数字信号处理(第三版)[M].:
电子科技大学,2008.5
[2]高西全,丁玉美.数字信号处理(2版)[M].:
电子科技大学,2001
[3]薛山编.MATLAB基础教程[M].:
清华大学,2010.10
[4]王宏编.MATLAB6.5及其在信号处理中的应用[M].:
清华大学,2004
[5]海涛,邓樱等.MATLAB6.1基础及应用技巧[M].:
国防工业,2002