MATLAB信号处理Word文件下载.docx
《MATLAB信号处理Word文件下载.docx》由会员分享,可在线阅读,更多相关《MATLAB信号处理Word文件下载.docx(42页珍藏版)》请在冰豆网上搜索。
↓
重新调入下一命令行
Ctrl+Home
光标移到命令窗顶部
←
光标左移一个字符
Ctrl+End
光标移到命令窗底部
→
光标右移一个字符
Esc
清除命令行
Ctrl+←
光标左移一个字
Delete
删除光标处字符
Ctrl+→
光标右移一个字
Backspace
删除光标处左边字符
Home
光标移到行首
clc
清除命令窗显示内容
clear
清除工作空间中的变量和函数
(3)MATLAB的帮助系统
MATLAB提供了强大而完善的帮助系统,包括命令行帮助、联机帮助和演示帮助。
要学会使用MATLAB,必须充分利用其帮助系统,尤其是命令行帮助功能。
命令行帮助可以通过help命令获得,其格式为:
help或help目录名/目录名/函数名/主题名/数学符号(全英文)
第一种格式在命令窗直接输入help,不带任何参数,此时,将显示MATLAB的分类目录和对目录的简要说明;
第二种格式可以显示具体目录所包含的命令和函数,或者具体的命令、函数、符号或某个主题的详细信息。
例如,在命令窗口键入:
helpsin,将会显示关于正弦函数sin的详细的帮助信息,通常包括函数的输入输出参数的含义、函数的调用格式以及函数使用实例等。
(4)MATLAB的数据类型、基本形式及产生方法
i)数据类型:
MATLAB中的数据类型主要有:
数值型(numerical),字符型(char),元胞型(cell),结构体型(structure)等,实验中涉及的主要是数值型和字符型。
与C语言不同的是,在MATLAB中使用变量时,不需要事先定义其数据类型,MATLAB会自动判定。
ii)数据基本形式:
数据、变量在MATLAB中的基本形式是数组(array),其中一维数组又称为向量(或矢量,vector),有行向量和列向量之分;
二维数组又称为矩阵(matrix),而标量则视为1×
1矩阵。
iii)数组的产生和引用:
产生数组的方法很多,下面介绍两种基本的方法。
一维数组的产生:
st:
step:
en,其中st和en分别为数组第一个和最后一个元素,step为相邻两个元素之间的差值。
例如x=1:
2:
5产生数组x=[135]。
矩阵的产生:
矩阵元素放在一对方括号[]中,同一行元素用逗号或空格隔开,不同行用分号隔开。
例如A=[12;
3,4]。
iiii)数组的引用:
一维数组用单下标引用,比如x
(2);
矩阵用双下标或单下标引用均可,比如A(1,2)与A(3)指的是同一个元素。
除此以外,还有其他引用方式。
3.实验内容及其步骤
本次实验需要完成以下内容:
(1)常用窗口的基本操作
注意:
1)所有输入在英文输入状态下进行;
2)表达式后加上分号“;
”,则计算结果不显示,这种方法可以加速程序运行速度;
表达式后无分号,计算结果马上显示在命令窗口中。
在命令窗输入一条算式并计算,将计算结果赋给变量x,执行以下操作:
1查看变量x的值;
2清除命令窗口的显示(清屏);
3调出刚才输入的算式,修改并重新计算;
4清除变量x
参考:
x=2*4+3/4-3.^2
(2)向量产生
产生一个行向量,元素全为1;
产生一个列向量,元素全为0;
产生一个元素为偶数的向量;
a=ones(1,5);
b=zeros(6,1);
c=2:
12;
(3)输入简单的矩阵并计算:
要点:
英文标点;
矩阵元素放在“[]”之中,每一行的元素间用逗号或空格隔开,不同的行以分号“;
”或回车来分割;
,
,并计算A*B,A.*B,A/B,A./B,比较结果有何不同。
A=[1,2;
3,4];
B=[2,4;
1,3];
A*B;
A.*B;
A/B;
A./B;
(4)复数产生和运算:
已知
,求
的模和幅角,计算
。
z1=3+4i;
z2=4+4i;
mg=abs(z1);
ang=angle(z2);
z=z1/z2;
4.实验用MATLAB函数介绍
在实验过程中用到的MATLAB指令(函数)有:
函数类:
ones,zeros,abs,angle等,具体调用格式参看“help”或者查阅相关书籍。
命令或运算符类:
clc,clear,help,lookfor,↑,↓,*,.*,.^,/,./,:
。
5.思考练习题
(1)MATLAB在处理数据运算过程中与其他高级语言有何不同。
(2)熟悉MATLAB的常用数学运算符号,比较几种乘法的运算符号有何不同。
(3)用help命令查看以下函数的功能和用法:
plot,stem,figure,subplot,axis,xlabel,ylabel,title,text,legend,sum。
(4)已知
,计算C=A*B,求C的实部,虚部,模和相角。
(real,imag,abs,angle)
实验二MATLAB入门
(2)
(1)掌握基本的绘图方法。
(2)掌握M文件的编写和运行方法。
(3)熟悉MATLAB的搜索路径及添加搜索路径的方法。
(1)二维图形的绘制与标注
MATLAB提供了强大的绘图功能,便于数据的可视化操作。
其中,二维图形的绘制与标注是最基本也是最常用的绘图操作。
下面介绍所涉及的函数及其用法。
1)plot
函数plot用于绘制连续函数的波形,其功能非常强大,可以同时绘制多条曲线,可以指定曲线的颜色、线型和数据点的形状。
调用格式如下:
plot(x,y)绘制x为横坐标,y为纵坐标的曲线,x、y可以是向量,也可以是矩阵;
例1:
以下两行命令运行后,将绘制sin函数在0~π之间的波形
t=0:
0.01:
pi;
plot(t,sin(t))
plot(x,y,s)绘制曲线,并指定线型、颜色、数据点形状,s为字符串
例2:
以下两行命令运行后,将绘制sin函数在0~π之间的波形,颜色为绿色,线型为虚线。
plot(t,sin(t),'
g--'
);
plot(x1,y1,x2,y2)于同一坐标系内分别x1,y1和x2,y2画波形;
例3:
以下命令在同一坐标系内画sin和cos函数的波形并指定颜色和线型。
t,cos(t),'
r-'
plot(x1,y1,s1,x2,y2,s2)于同一坐标系内分别x1,y1和x2,y2画波形,并指定线型、颜色等
例4:
以下命令在同一坐标系内画sin和cos函数的波形,指定颜色和线型。
plot(t,sin(t),t,cos(t));
2)stem
函数stem用于绘制离散序列的波形。
一般调用格式为:
stem(n,x)画出以n、x为坐标的图形。
例如n=0:
10;
x=cos(pi*n/3);
stem(n,x);
3)figure和subplot
函数figure用来产生新的图形窗口。
函数subplot用来将图形窗口切分为若干子窗口并激活其中某个子窗口用于当前绘图操作,一般和plot、stem等画图函数成对使用。
调用格式为
figure生成一个新的图形窗口。
subplot(mnk)或subplot(m,n,k)将图形窗口切分为m×
n的子图,并激活第k个用于绘图。
例5以下命令在同一图形窗口的三个子图中分别画图:
n=0:
subplot(311);
plot(t,sin(t));
subplot(312);
plot(t,cos(t));
subplot(313);
stem(n,cos(pi*n/3));
4)用于图形标注的函数
1xlabel,ylabel,title坐标轴与图形名称标注
调用格式为:
xlabel(s),ylabel(s),title(s),s为字符变量或常数。
例如:
xlabel(‘t’),ylabel(‘y’),title(‘waveformofcos’)
2axis坐标范围控制,调用格式为:
axis([xminxmaxyminymax])
axis([-23-33])
3text添加文本注释,格式为
text(x,y,s)在坐标(x,y)处添加文本注释s,s是字符串。
text(0.5,1,’maxpoint’);
4legend给多条曲线标注,同一坐标系中有多条曲线时,用legend区分它们。
调用格式:
legend(str1,str2,…),str1,str2,…,均为字符串
legend(‘sin’,’cos’);
(2)M文件的编写与运行
MATLAB有两种运行方式:
命令行运行方式和M文件运行方式。
前者是在命令窗的提示符“》”后直接输入命令或计算表达式,回车后MATLAB即执行运算并可以显示运行结果,这种方式适合实现一些简单的功能,如简单计算和绘图等;
后一种方式中,M文件是用MATLAB语言编写的程序文件,其扩展名为.m,在MATLAB的M文件编辑器中输入、编辑和调试,生成后在命令窗口中运行该程序,与运行MATLAB其他命令相似。
从形式上来讲,M文件可以分成M脚本(Mscript)文件和M函数(Mfunction)两类。
脚本文件就是一系列MATLAB语句、命令的罗列、组合,运行脚本文件时,MATLAB依次执行文件中的每一行语句,与操作系统中批处理文件的运行方式相似。
M函数文件和脚本文件的主要区别在于格式的不同:
M函数文件第一行为函数定义行,以关键字“function”(通常为蓝色字体)开头,而脚本文件无此定义行;
函数文件定义行的一般格式如下:
function[y1,y2,y3,…]=myfun(x1,x2,x3,…)
即定义行由关键字function,输出变量y1,y2,y3,…,函数名myfun和输入变量x1,x2,x3,…四部分组成。
其中关键字和函数名不能省略,输入变量和输出变量可以有多个,也可以一个都没有。
没有输入输出变量时,中括号,等号和小括号均可以省略。
以下是M脚本文件和M函数文件的示例:
%ThisisanMscriptsample。
clear;
x=-pi:
0.1:
y1=sin(x);
y2=cos(x);
plot(x,y1,x,y2);
title('
cosineandsinefunctions'
xlabel('
time'
ylabel('
Amplitude'
legend('
y=cos(x)'
'
y=sin(x)'
gridon;
%ThisisanMfunctionsample.
function[y,pos]=findmax(a)
%findMaxfindthemaxvalueofmatrixatogeterwithitsposition
%y=findmax(a):
findthemaxvalueofmatrixa
%[y,pos]=findmax(a):
findthemaxvalueofmatrixa,getitsposition%aswellinpos
[y,p]=max(a(:
));
[r,c]=ind2sub(size(a),p);
pos=[r,c];
1)M文件的编写与保存
将上述两段代码在MATLAB自带的文本编辑器里输入,并保存,就分别得到脚本文件和函数文件。
保存时要注意几点,一是文件名必须以字母开头,二是函数文件名应与函数名字相同,三是名字不能与MATLAB关键字相同,四是扩展名为“.m”。
2)M文件的运行
脚本文件的运行很简单,只要在命令窗口中输入文件名(不含扩展名)并回车即可;
比如,某脚本文件名为myfile.m,那么命令窗中输入myfile,并回车即可。
对函数文件,在命令窗中调用形式与该函数定义行的格式相同。
比如,对上述函数文件findmax,可以在命令窗口中输入:
a=[1,2;
%调用前需要给输入变量赋具体值
[mx,ps]=findmax(a)
完成对findmax的调用,两个输出值分别赋给mx和ps两个变量。
(3)MATLAB的搜索路径及设置
M文件运行时,MATLAB按照事先设置好的路径搜索顺序来寻找M文件,如果要执行的文件不在MATLAB的搜索路径中,就无法执行。
利用MATLAB主界面File菜单中的“setpath”可以将需要的目录、文件夹添加到MATLAB的搜索路径中,也可以设置新的搜索顺序。
或者利用函数addpath,path,和pathtool设置搜索路径。
(4)基本绘图操作
将一个图形窗口分为三个子窗口,在三个字窗口中分别画y=sin(t),y=cos(t)和y=cos(πn/3)的波形。
前两个为连续波形,第三个为离散波形。
对第二个图的横坐标、纵坐标进行标注。
(5)M文件的编写、调试及运行
M文件编写及运行:
分别用编写脚本文件和函数文件实现1+2+3+…+50。
提示:
1~50放在数组x中,x的生成语句为:
n=50;
x=[1:
n];
求和用sum函数,函数用法请利用help命令获得。
在实验过程中用到的MATLAB命令(函数)有:
plot,stem,subplot,xlabel,ylabel,title,text,legend,figure,axis,addpath,path,pathtool,sum,sin,cos,exp等,具体调用格式参看“help”或者查阅相关书籍。
另外,在具体的实验过程中也可以根据实际需要自己定义函数。
5.思考题
(1)用help命令查看plot的用法,回答以下问题:
1)plot函数中两个输入X和Y代表什么?
他们是标量、向量还是矩阵?
2)用plot绘图时,可以指定哪些线型和颜色?
(2)绘制振荡曲线
及其包络线
的图形,其中t的取值范围是
,并进行相应的标注。
(3)编写一个函数文件,实现以下功能:
输入一个数组,对其元素进行从大到小的排列,将排序后的数组输出;
求数组元素的最大值并求出它在原数组中的位置。
实验三连续信号的频域分析
(1)掌握周期信号分解和合成的方法。
(2)掌握非周期信号频谱分析方法。
(1)周期信号的分析与合成
周期为T的周期信号的傅里叶级数有三角型与指数型两种形式,分别表示为:
和
式子中,各系数的计算公式和相互关系如下:
傅里叶级数表明周期信号可以分解为正弦信号或虚指数的线性组合。
由三角型的系数可画出周期信号的单边幅度谱和相位谱,由指数型的系数可画出周期信号的双边谱,它们都是离散谱。
上述系数可以用MATLAB函数quad或quadl计算。
它们的调用格式为:
y=quad(FUN,A,B),和y=quadl(FUN,A,B)
其中,FUN是被积函数名或函数句柄;
A和B分别是积分区间的下限和上限。
比如,系数
可以如下计算:
,(T为信号周期)
PS:
quad:
采用递推自适应的Simpson法来计算,在低精度的非光滑曲线计算中是最有效的;
quad1:
采用递推自适应的Lobatto法来计算,在高精度的光滑曲线计算中更为高效;
例1求周期为4,幅度为1、脉冲宽度为2的对称矩形脉冲信号的三角型傅里叶级数。
T=4;
A=1;
tao=2;
w0=2*pi/T;
N=6;
f=@(n)(2*quad(@(t)(A*rectpuls(t,tao).*cos(n*w0*t)),-T/2,T/2)/T);
%@(n):
匿名函数,自定义matlab中的函数,表示随后跟随的是属于变量n的函数。
Matlab7以上版本才支持。
fork=1:
N
an(k)=f(k);
end
fun=@(t)(A*rectpuls(t,tao));
a0=quad(fun,-T/2,T/2)/T;
an=[a0,an];
nw0=w0*(0:
N);
stem(nw0,abs(an));
例2画出例1中前6次谐波合成的信号波形,要求画2个周期。
t=-T:
T;
N=6;
n=(0:
N).’;
ft=an*cos(w0*n*t);
plot(t,ft);
(2)非周期信号的频谱分析
非周期的频谱是连续谱,MATLAB通常用数值方法求其频谱,一种方法是利用DFT变换,另一种方法是利用函数quad和quadl。
调用格式参见上文。
其中,傅里叶变换为
,数值计算时,频率
处的频谱值为
例3求门宽为2的门函数的傅里叶变换,画出其幅度谱。
w1=-2*pi;
w2=-w1;
t1=-tao/2;
t2=-t1;
N=500;
wk=linspace(w1,w2,N);
%线性间隔向量生成函数
F=zeros(1,N);
Fw=@(w)(quad(@(t)(rectpuls(t,tao).*exp(-j*w*t)),t1,t2));
F(k)=Fw(wk(k));
plot(wk,abs(F));
(6)复习有关傅里叶级数和傅里叶变换的有关内容。
(7)求周期为5,幅度为2、脉冲宽度为2的对称矩形脉冲信号的三角型傅里叶级数,
i.画出其幅度谱(取前7次谐波)。
2)将前7次谐波叠加,画出合成的波形(画至少2个周期)。
提示:
参考例1,例2.
(8)求单边指数信号
的傅里叶变换,画出其在区间[-
]之间的幅度谱。
阶跃信号可使用heaviside(t)函数
rectpuls,cos,quad,quadl,plot,linspace,zeros,abs,exp.
(1)分析、对比实验内容1中合成波形和原周期信号波形之间的不同,简要说明原因,增多谐波个数,合成波形有什么变化?
(2)对实验过程中所涉及的问题进行分析,试编写和修改相应的程序,得出最终正确的结果和波形图,并对实验报告进行整理分析。
6.实验报告要求:
(1)明确实验目的以及实验的原理。
(2)通过实验总结利用MATLAB分析信号频谱的一般方法。
(3)完成思考题的内容,对实验结果及其波形图进行分析对比,总结主要结论。
实验四离散信号的时域分析
1.实验目的
(1)学习MATLAB在信号分析和系统分析中的应用;
(2)掌握MATLAB表示离散序列的方法、序列运算的MATLAB实现;
(1)离散信号的表示:
在MATLAB中,可以用向量(数组)来表示有限长序列,不过这样的向量并没有包含样本位置的信息,因此,需要用两个向量(数组)来表示一个有限长序列,其中一个向量表示序列的值,称为样本向量;
另一个向量表示样本的位置(即序列的序号),称为位置向量。
比如序列
在MATLAB中需要用以下两个向量来表示:
n=[-2,-1,0,1,2,3];
x=[2,1,-1,5,2];
其中向量n表示序号,向量x表示序列的值。
当不需要样本位置信息或者序列从n=0开始时,可以只用样本向量表示。
另外由于内存的限制,MATLAB无法表示无限长序列。
(2)离散信号的基本运算
信号相加:
序列相加是对应样本相加,如果两序列长度不等或者位置向量不同,则不能用算数运算符“+”直接实现相加,必须对位置向量和长度统一处理后再相加。
以下M函数可以实现任意两序列的相加运算:
function[y,n]=sigadd(f1,n1,f2,n2)
%[yn]=sigadd(f1,n1,f2,n2),Addtwosequences.
%Inputs:
%f1----thefirstsequence
%n1----indexvectoroff1
%f