基于MATLAB的卷积演示系统论文Word文档格式.docx

上传人:b****6 文档编号:20294269 上传时间:2023-01-21 格式:DOCX 页数:23 大小:454.25KB
下载 相关 举报
基于MATLAB的卷积演示系统论文Word文档格式.docx_第1页
第1页 / 共23页
基于MATLAB的卷积演示系统论文Word文档格式.docx_第2页
第2页 / 共23页
基于MATLAB的卷积演示系统论文Word文档格式.docx_第3页
第3页 / 共23页
基于MATLAB的卷积演示系统论文Word文档格式.docx_第4页
第4页 / 共23页
基于MATLAB的卷积演示系统论文Word文档格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

基于MATLAB的卷积演示系统论文Word文档格式.docx

《基于MATLAB的卷积演示系统论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的卷积演示系统论文Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。

基于MATLAB的卷积演示系统论文Word文档格式.docx

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、

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1