基于MATLAB的卷积演示系统论文Word文档格式.docx
《基于MATLAB的卷积演示系统论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的卷积演示系统论文Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
2.1卷积的定义5
2.2线性卷积的运算5
2.3循环卷积的运算6
三设计内容与分析8
3.1设计内容8
3.2线性卷积的分析8
3.3循环卷积的分析8
四实验代码及结果10
4.1线性卷积的MATLAB设计源程序10
4.3分析两类卷积关系14
4.4动态演示基于重叠相加法的长序列快速卷积14
4.5用MATLAB设计一个卷积演示界面17
五收获与体会21
参考文献22
附录23
一背景
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。
将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
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,'
x2(n)'
序列x2'
)
subplot(2,3,3);
%画出运行结果图形
stem(ny,y,'
y(n)'
线性卷积'
subplot(2,3,4);
stem(y1'
y1'
conv直接卷积'
)%对图形进行命名
运行程序,输入序列x1和x2
X1=[-123-5]
X2=[67-10412]
线性卷积结果为:
运行结果如下图4-1所示:
图4-1现行卷积运行结果
4.2循环卷积的MATLAB设计源程序
1.循环卷积源程序:
%输入序列x1
%输入序列x2
N=input('
N='
%输入点数N
xn1=length(x1);
%定义x1的长度
xxn1=0:
xn1-1;
%定义xxn1取值
subplot(3,1,1);
%画出运行结果图形
stem(xxn1,x1,'
.'
x2'
xn2=length(x2);
%定义x2的长度
xxn2=0:
xn2-1;
%定义xxn2取值
subplot(3,1,2);
%画出循环卷积图
stem(xxn2,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'
'
序列x1和序列x2的循环卷积结果'
%图形命名
运行程序,输入序列x1,x2
x1=[-123-5]
x2=[67-10412]
N=10
循环卷积结果如下图4-2:
图4-2N=10时循环卷积运行结果图
当输入序列x1=[-123-5],x2=[67-10412],N=8时。
结果如下图4-3:
图4-3N=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;
fori=10:
18
x(i+1)=i-15;
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;
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,:
运行后结果如下:
4.5用MATLAB设计一个卷积演示界面
(1)启动MATLABR2010a
在正确完成MATLAB的安装并启动计算机之后,选择“开始”|“所有程序”|MATLAB|R2010a|MATLABR2010a命令,或者直接双击桌面上的MATLAB的快捷方式图标
,启动MATLABR2010a。
(2)MATLABR2010a的主界面
MATLAB的默认窗口如图4所示,其中包括主菜单栏、工具栏、命令窗口、历史命令窗口、工作区浏览器和当前路径窗口等。
图4-4MATLAB默认窗口
(3)点击工具栏的
按钮,将弹出以下的菜单,如图4-5:
图4-5MATLAB窗口
在空白处写下所要实现的卷积源程序代码,如下图4-6:
图4-6程序输入窗口
(4)源程序代码写好后,此时按下F5按钮,将弹出以下的菜单,如图4-7:
图4-7保存程序窗口
点击保存按钮,将弹出以下界面,如图8。
图4-8运行程序窗口
(5)输入X1=[-123-5],X2=[67-10412]后,按下Enter键:
出现以下结果:
同时弹出以下的运行界面,如图9
图4-9程序运行结果图
五收获与体会
总结本次数字信号处理课程论文,我受益匪浅。
首先就是方案的确定。
由于这个学期我学习了数字信号处理这门课程,课程中我了解到要实现两信号的卷积,可以通过定义来实现,也可以通过DFT来计算线性卷积。
对于有限长序列,存在两种形式的卷积:
线性卷积与循环卷积。
由于循环卷积可以采用DFT的快速算法——快速傅里叶变换进行运算,运算速度上有很大的优越性。
其中,设计线性卷积有4个步骤,翻转、移位、相乘、求和,而循环卷积则是通过循环移位后得到的矩阵与序列相乘。
根据上数字信号处理课上老师讲的求法,画出了思路的流程图,然后根据流程图写出程序,事半功倍。
将结果与直接调用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
附录
L)%n取1、2、