MATLAB论文 1245352张洋.docx
- 文档编号:5232125
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:11
- 大小:75.23KB
MATLAB论文 1245352张洋.docx
《MATLAB论文 1245352张洋.docx》由会员分享,可在线阅读,更多相关《MATLAB论文 1245352张洋.docx(11页珍藏版)》请在冰豆网上搜索。
MATLAB论文1245352张洋
《MATLAB语言》课程论文
用MATLAB实现卷积运算
姓名:
张洋
学号:
12010245352
专业:
电子信息工程
班级:
2010级电子班
指导老师:
汤全武
学院:
物理电气信息学院
完成日期:
2010年12月27日
用MATLAB实现卷积运算
(张洋120102453522010级电子班)
【摘要】数字信号处理技术的核心算法是离散傅立叶变换(DFT),是DFT使信号在数字域和频域都实现了离散化,从而可以用通用计算机处理离散信号。
离散傅立叶变换,在通信、语音处理、图象处理、雷达、医学影像等各个领域得到广泛的应用,但是这都是以卷积和相关运算、对连续信号和序列进行谱分析为基础的。
卷积分为循环卷积、线性卷积等。
本文分析了在什么情况下能用循环卷积运算代替线性卷积运算并给出了相关程序代码,本文实现了在MATLAB中对任意输入的两序列进行循环卷积,序列可以通过键盘输入,最后显示结果和波形。
【关键字】卷积;循环卷积;傅里叶变换;MATLAB
一问题的提出
信号与系统是电子信息专业的一门十分重要的专业基础课,而且对其他自然学科和工程领域的科研和工程人员也是十分重要的。
数字信号处理技术是在信号与系统的基础上进一步发展起来的。
对数字信号的处理需要利用计算机或专用处理设备,如数字信号处理器(DSP)或专用集成电路(ASIC)等。
数字信号处理技术及设备具有灵活、精确、抗干扰强、设备尺寸小、造价低、速度快等突出优点,这些都是模拟信号处理技术与设备所无法比拟的。
MATLAB是一个高性能的科学计算软件,广泛应用于数学计算、系统仿真、可视化、科学和工程绘图等,因此MATLAB已经成为国际上最流行的科学与工程计算的软件工具。
现在的MATLAB已经不仅仅是一个“矩阵实验室”了,它已经成为一种具有广泛应用前景的全新的计算机高级编程语言了,有人称它为“第四代”计算机语言,它在国内外高校和研究部门正扮演着重要的角色。
MATLAB语言是一种简单、高效、功能极强的高级语言,具有强大的矩阵运算能力和极高的编程效率,而且功能也越来越强大,不断适应新的要求提出新的解决方法。
可以预见,在科学运算、自动控制与科学绘图领域MATLAB语言将长期保持独一无二的地位。
本系统设计就是利用MATLAB软件来完成数字信号的处理,因此本系统设计是基于MATLAB软件实现任意两个序列的循环卷积。
二卷积的概念与原理
卷积原理
信号的卷积是针对时域信号处理的一种分析方法。
信号的卷积一般用于求取信号通过某系统后的响应。
在信号与系统中,我们通常求取某系统的单位冲激响应,所求得的h(n)可作为系统的时域表征。
任意系统的系统响应可用卷积的方法求得:
(1)
卷积运算
设两个序列为x(n)和h(n),则x(n)和h(n)的卷积和定义为:
(2)
其中,把卷积和用*来表示。
卷积和的运算在图形上可以分为四步:
反折、移位、相乘、相加。
反折:
先将变量坐标m上作出x(m)和h(m),将h(m)以m=0的垂直轴为对称轴反折成h(-m)。
移位:
将h(-m)移位n,即得h(n-m)。
当n为正整数时,右移n位。
当n位负整数时,左移n位。
相乘:
再将h(n-m)和x(m)的相同m值的对应点相乘。
相加:
把以上所有对应点的乘积叠加起来,即得y(n)值。
对于两个时限信号,按照上述的五个步骤,作卷积积分运算时,关键是正确确定不同情况下的积分限。
只要正确地确定了积分限都能得到正确定积分结果。
在MATLAB的内部有函数conv可以很容易地完成两个信号的卷积积分运算。
其语法为:
yn=conv(x,h)。
其中x和h分别是两个作卷积运算的信号,yn为卷积结果。
在MATLAB窗口输入以下内容:
>>x=[20710];
>>h=[5-1313];
>>yn=conv(x,h)
在屏幕上显示结果如下:
yn=10-2416911121130
有时候,做卷积运算的两个序列,可能有一个序列或者两个序列都非常长,甚至是无限长,MATLAB处理这样的序列时,总是把它看作是一个有限长序列,具体长度由编程者确定。
实际上,在信号与系统分析中所遇到的无限长序列,通常都是满足绝对可积条件的信号。
因此,对信号采取这种取部分处理尽管存在误差,但是通过选择合理的信号长度,这种误差是能够减小到可以接受的程度的。
循环卷积
循环卷积也称为圆周卷积。
线性卷积是求离散系统响应的主要方法之一。
循环卷积的计算速度要远远快于线性卷积,如果选择循环卷积的长度C≥N1+N2-1,则可以用循环卷积代替线性卷积。
方法如下:
(1)定义循环卷积的长度:
选择
;
(2)将两个序列的长度都补足为C;
将长为N1的序列x(n)延长到C,补C-N1个零;
将长为N2的序列h(n)延长到C,补C-N2个零;
(3)反转x(n),周期延拓为序列x~(n),取主周期;
(4)循环位移:
与线性卷积不同,循环卷积运算中采用的是循环移位,有限长序列x(n)的循环移位定义为:
(3)
其含义如下:
①x((n+m))N表示x(n)的周期延拓序列x~(n)的移位:
(4)
②x((n+m))NRN(n)表示对移位的周期序列x((n+m))N取主值序列,所以f(n)仍然是一个长度为N的有限长序列。
(5)将序列x与h进行循环移位生成的矩阵H的转置矩阵相乘,即完成将x(m)和h(n-m)所有对应项相乘之后相加,完成循环卷积。
三利用MATLAB实现任意两序列的循环卷积
时域的圆周卷积在频域上相当于两序列的DFT相乘,而DFT又有多种快速算法,因此与线性卷积相比,计算速度可以大大提高。
实现循环卷积的几种方法
本系统设计用了三种方式来实现任意两个序列的循环卷积,分别是定义法、直接调用MTALAB内部函数法、快速卷积法。
定义法
根据循环卷积的定义及运算步骤:
反折、移位、相乘、相加,用MATLAB语言编写出的程序代码如下。
%循环卷积实现原理:
y(n)=sum(x1(m)*x2((n-m)modN))
clear;closeall;
x1=input('请输入序列x1=');
x2=input('请输入序列x2=');
N=input('请输入循环卷积的长度N=');
xn1=length(x1);
xxn1=0:
xn1-1;
subplot(3,1,1);
stem(xxn1,x1,'.');
title('序列x1');
xn2=length(x2);
xxn2=0:
xn2-1;
subplot(3,1,2);
stem(xxn2,x2,'.');
title('序列x2');
if(length(x1)>N)
error('N输入错误:
N的长度必须大于输入序列x1的长度');
end
if(length(x2)>N)
error('N输入错误:
N的长度必须大于输入序列x2的长度');
end
x1=[x1,zeros(1,N-length(x1))];
x2=[x2,zeros(1,N-length(x2))];
m=0:
N-1;
x=zeros(N,N);
forn=0:
N-1
x(:
n+1)=x2(mod((n-m),N)+1)';
end;
yn=x1*x;
subplot(3,1,3);
stem(m,yn,'r','.');
title('序列x1和序列x2的循环卷积结果');
定义法程序的流程图如下:
将以上程序保存为juanji.m文件,在MATLAB中输入序列x1=[230-56],序列x2=[11901037],循环卷积的长度N=20得到结果如图3所示。
图1定义法实现的任意两序列循环卷积结果
直接调用MTALAB内部函数法
用MATLAB语言编写出的程序代码如下。
clear;closeall;
x1=input('请输入序列x1=');
x2=input('请输入序列x2=');
N=input('请输入循环卷积的长度N=');
y=conv(x1,x2);%x1与x2线性卷积
subplot(2,1,1);%画图的位置在2行2列这个矩阵的的第1行1列处
n=0:
length(y)-1;
stem(n,y,'.');%画图
title('序列x1与序列x2的线性卷积结果');%标题
xlabel('n');ylabel('y(n)');%x,y轴
x11=fft(x1,N);%对x1傅立叶变换
x12=fft(x2,N);%对x2傅立叶变换
y11=x11.*x12;%乘
y1=ifft(y11,N);%逆傅立叶变换
subplot(2,1,2);
n=0:
length(y1)-1;
stem(n,y1,'.');
title('循环卷积结果');
xlabel('n');ylabel('y1(n)');
将以上程序保存为hanshu.m文件,在MATLAB中输入序列x1=[615-635701],序列x2=[712943206],输入循环卷积的长度N=25得到结果如图4所示。
图2直接调用MTALAB内部函数法实现的任意两序列循环卷积结果
快速卷积法
先将输入的两个序列x1和x2周期延拓到C点,其中C≥N1+N2-1,N1为x1的长度,N2为x2的长度;C值取为2的整数幂,以便使用基-2FFT算法。
根据信号在时域与频域的关系,可以用FFT计算线性卷积。
方法如下:
(1)定义长度:
选择
。
(2)求两个要卷积序列的N点频谱函数:
求
求
(3)将两个频谱函数相乘
求
(4)对乘积进行IFFT变换
求
图3快速卷积结构图
下面给出主要部分快速卷积的程序代码。
clear;closeall;
x1=input('请输入序列x1=');
x2=input('请输入序列x2=');
xn1=length(x1);
xn2=length(x2);
L=pow2(nextpow2(xn1+xn2-1));%取L为大于等于且最接近(xn1+xn2-1)的2的正次幂
xn1=[xn1zeros(1,L-length(xn1))];
xn2=[xn2zeros(1,L-length(xn2))];
%根据DFT公式得到以下DFT程序代码%
n=0:
L-1;%n的行向量
k=0:
L-1;%k的行向量
WN=exp(-j*2*pi/L);%Wn因子
nk=n'*k;%产生一个含nk值的L乘L维矩阵
WNnk=WN.^nk;%DFT矩阵
Xk=xn*WNnk;%DFT系数的行向量
%根据IDFT公式得到以下IDFT程序代码%
n=0:
L-1;%n的行向量
k=0:
L-1;%k的行向量
WN=exp(-j*2*pi/L);%Wn因子
nk=n'*k;%产生一个含nk值得L乘L维矩阵
WNnk=WN.^(-nk);%IDFT矩阵
Yn=(yn*WNnk)/L;%IDFT的行向量
根据快速卷积结构编写完整的程序代码后在MATLAB中运行以下输入数据:
运行如下:
X1=[456];
X2=[789];
m=0:
length(yn)-1;
stem(m,yn,’.’);
结果为:
yn=28671189354
几种算法性能比较
使用快速卷积法来执行程序也就是直接使用DFT和IDFT进行运算。
每个DFT的运算量为N2次复数乘法和N(N-1)次复数加法,DFT的运算量与N2成正比,当N很大时运算量的很可观的。
FFT运算具有速度快,计算量小等优点。
根据信号在时域与频域的关系可以用FFT计算线性卷积。
根据只要进行二次FFT,一次IFFT就可以完成快速卷积的运算。
在x(n)、h(n)两序列的长度比较接近或者相等的情况,当序列的长度C≥32时,上述计算卷积的方法比直接计算线性卷积有明显的优越性,长度值越大越明显。
四结论
时间过得飞快为期两周的数字信号处理实训就要结束了,刚开始数字信号处理实训的时候对MATLAB只有一点点了解只懂得怎样建立工程和简单的程序编写。
再加上我所做的题目是关于循环卷积的,一开始我在网络上和图书馆资料库查找资料时发现关于循环卷积的资料非常少。
但是后来进过耐心仔细的查找终于找到了一些关于循环卷积的解释。
原来循环卷积就是圆周卷积,因为在数字信号处理课程上只有圆周卷积的而没有循环卷积的说法。
因此,我把关键词变为圆周卷积之后找到了比用循环卷积作为关键词更多的资料,因而对于循环卷积的理解开始加深并且慢慢懂得了在MATLAB中如何编程。
刚开始我采用了MATLAB内部自带的函数来编写程序,经过指导老师检查之后要求要自己编写程序。
一开始我感到比较迷茫不知从何下手,后来根据循环卷积公式和运算步骤来编写程序,但是,第一个程序代码编写完成后运行,发现结果不对。
在仔细分析代码后发现有一给序列的部分代码和另一个序列的代码一样了。
因此,造成输出结果有误。
虽然本次实训的基本部分已经做出来了,但是由于之前花费了比较多的时间。
因此,后面没有时间继续做其他的发挥,而且MATLAB绝大多数的功能都没有使用到,只有以后再自己慢慢学会使用这些功能了。
通过两个星期的实训,我的综合能力有了一定的提高,编程水平更上了一个新的台阶。
对于数字信号处理技术的理解与利用有了进一步加深,对卷积的求解与算法掌握得更为深刻,最终能实现利用MATLAB语言完成从键盘输入任意两个序列实现循环卷积。
线性卷积是分析数学中一种重要的运算。
卷积与傅里叶变换有着密切的关系。
利用这点性质,即两函数的傅里叶变换的乘积等于它们卷积后的傅里叶变换,能使傅里叶分析中许多问题的处理得到简化。
五课程体会
经过一学期紧张而有序的学习,在忙碌之余也得到了颇多的收获,我深深的体会到MATLAB语言比同类程序语言方便更简洁易懂,进行程序设计,简单易学,编程效率高,在开理论课的同时也开设了实验课,目的在于把课堂上学到的知识运用到实际中来。
首先汤全武老师在课堂上讲到的知识十分重要,我们学会编程后,在实验课上亲身体会到了MATLA的优越性,感受而别深切!
对于MATLAB的学习,匆匆而过,回首汤全武老师给我们上的每一节课都让我倍感怀念,他时时刻刻抓紧我们的学业,悉心指导我们完成每一次作业和实验,汤全武老师严谨的治学态度,孜孜不倦的敬业精神,为人师表的高尚风范,极大的激发着我对MATLAB语言的兴趣和主动性,在此像汤全武老师表示衷心的感谢。
【参考文献】
[1]程佩青.数字信号处理教程[M].北京:
清华大学出版社,2000
[2]蒋志凯.数字滤波与卡尔曼滤波[M].北京:
中国科学技术出版社,1993
[3]楼顺天.基于MATLAB的系统分析与设计-信号处理[M].西安:
西安电子科技大学出版社,1998.
[4]胡广书.数字信号处理:
理论、算法与实现[M].北京:
清华大学出版社,1997.
[5]余成波、杨菁.数字信号处理及MATLAB实现[M].北京:
清华大学出版社,1999.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB论文 1245352张洋 MATLAB 论文 1245352