MATLAB实验答案(桂电)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一 MATLAB入门(1)
1.实验目的:
(1)了解MATLAB的体系结构与特点,熟悉其集成开发环境。

(2)熟悉MATLAB界面窗口的功能和使用方法。

(3)熟悉MATLAB的帮助系统及使用方法。

(4)了解MATLAB的的数据类型、基本形式和数组的产生方法。

(5)掌握MATLAB基本的数学运算操作。

2.实验原理
(1)MATLAB简介
MATLAB是美国MathWorks公司开发的高性能的科学与工程计算软件。

它在数值
计算、自动控制、信号处理、神经网络、优化计算、小波分析、图像处理等领域有着
广泛的用途。

近年来, MATLAB在国内高等院校、科研院所的应用逐渐普及,成为广
大科研、工程技术人员必备的工具之一。

MATLAB具有矩阵和数组运算方便、编程效
率极高、易学易用、可扩充性强和移植性好等优点,俗称为“草稿纸式的科学计算语言”。

它把工程技术人员从繁琐的程序代码编写工作中解放出来,可以快速地验证自
己的模型和算法。

经过几十年的扩充和完善,MATLAB已经发展成为集科学计算、可视化和编程于一体的高性能的科学计算语言和软件开发环境,整套软件由MATLAB开发环境、MATLAB语言、MATLAB数学函数库、MATLAB图形处理系统和MATLAB应用程序接口(API)等五大部分组成。

MATLAB的主要特点包括强大的计算能力(尤其是矩阵计算能力)、方便的绘
图功能及仿真能力、极高的编程效率。

另外,MATLAB还附带了大量的专用工具箱,用
于解决各种特定领域的问题。

通过学习软件的基本操作及其编程方法,体会和逐步掌
握它在矩阵运算、信号处理等方面的功能及其具体应用。

通过本课程实验的学习,要求学生初步掌握MATLAB的使用方法,初步掌握M文件的编写和运行方法,初步将MATLAB运用于数字信号处理中。

循序渐进地培养学生运用所学知识分析和解决问题的能力。

(2)MATLAB的工作界面(Desktop)与操作
MATLAB 安装成功后,第一次启动时,主界面如下图(不同版本可能有差异)所示:
其中
① 是命令窗口(Command Window ),是MATLAB 的主窗口,默认位于MATLAB
界面的右侧,用于输入命令、运行命令并显示运行结果。

② 是历史命令窗(Command History ),位于MATLAB 界面的左下侧,默认为
前台显示。

历史命令窗用于保存用户输入过的所有的命令,为用户下一次使用同一个命令提供方便。

③ 是当前目录浏览器(Current Directory ),位于MATLAB 界面的左上侧,默认为前台显示。

该窗口用于显示当前目录和目录中的所有文件及文件的相关信息,如类型,大小等。

④ 是工作空间窗(Workspace ),默认位于MATLAB 界面左上侧的 后台。

可以通过点击左上方的“Workspace ”按钮使之在前台展现。





MATLAB提供了方便实用的功能键用于编辑、修改命令窗口中当前和以前输入的命令行。

这些功能键如下表所示:
命令窗口中常用的功能键
(3)MATLAB的帮助系统
MATLAB提供了强大而完善的帮助系统,包括命令行帮助、联机帮助和演示帮助。

要学会使用MATLAB,必须充分利用其帮助系统,尤其是命令行帮助功能。

命令行帮助
可以通过help命令获得,其格式为:
help 或help 目录名/目录名/函数名/主题名/数学符号(全英文)
第一种格式在命令窗直接输入help,不带任何参数,此时,将显示MATLAB的
分类目录和对目录的简要说明;第二种格式可以显示具体目录所包含的命令和函数,
或者具体的命令、函数、符号或某个主题的详细信息。

例如,在命令窗口键入:help sin,将会显示关于正弦函数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=[1 3 5]。

矩阵的产生:矩阵元素放在一对方括号[]中,同一行元素用逗号或空格隔开,不
同行用分号隔开。

例如 A=[1 2;3,4]。

iiii )数组的引用:一维数组用单下标引用,比如x(2);矩阵用双下标或单下标引用均可,比如 A(1,2)与A (3)指的是同一个元素。

除此以外,还有其他引用方式。

3.实验内容及其步骤
本次实验需要完成以下内容: (1) 常用窗口的基本操作
注意:1)所有输入在英文输入状态下进行;2)表达式后加上分号“;”,则计算结果不显示,这种方法可以加速程序运行速度;表达式后无分号,计算结果马上显示在命令窗口中。

在命令窗输入一条算式并计算,将计算结果赋给变量x ,执行以下操作: ① 查看变量x 的值;
② 清除命令窗口的显示(清屏); ③ 调出刚才输入的算式,修改并重新计算; ④ 清除变量x
参考:x =2*4+3/4-3.^2 (2) 向量产生
产生一个行向量,元素全为1;产生一个列向量,元素全为0;产生一个元素为偶数的向量;
参考:a=ones(1,5); b=zeros(6,1); c=2:2:12;
(3) 输入简单的矩阵并计算:
要点:英文标点;矩阵元素放在“[]”之中,每一行的元素间用逗号或空格隔开,不同的行以分号“;”或回车来分割;
1234
A
,2413
B
,并计算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) 复数产生和运算:
已知1
3
4z i ,2
4
3z i ,求1z 的模和幅角,计算
1
2
z z 。

参考: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)已知12345
678i i A
i i
,12563
478i i B
i i
,计算C=A*B ,求C 的实部,虚部,
模和相角。

(real , imag , abs , angle )
实验二 MATLAB入门(2)
1.实验目的:
(1)掌握基本的绘图方法。

(2)掌握M文件的编写和运行方法。

(3)熟悉MATLAB的搜索路径及添加搜索路径的方法。

2.实验原理
(1)二维图形的绘制与标注
MATLAB提供了强大的绘图功能,便于数据的可视化操作。

其中,二维图形的绘
制与标注是最基本也是最常用的绘图操作。

下面介绍所涉及的函数及其用法。

1)p lot
函数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~π之间的波形,颜色为绿色,
线型为虚线。

t=0:0.01:pi;
plot(t,sin(t),'g--');
plot(x1,y1,x2,y2)于同一坐标系内分别x1,y1和x2,y2画波形;
例3:以下命令在同一坐标系内画sin和cos函数的波形并指定颜色和线型。

t=0:0.01:pi;
plot(t,sin(t),'g--',t,cos(t), 'r-');
plot(x1,y1,s1,x2,y2,s2)于同一坐标系内分别x1,y1和x2,y2画波形,并指定线型、颜色等
例4:以下命令在同一坐标系内画sin和cos函数的波形,指定颜色和线型。

t=0:0.01:pi;
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 以下命令在同一图形窗口的三个子图中分别画图:
t=0:0.01:pi;n=0:10;
subplot(311);plot(t,sin(t));
subplot(312);plot(t,cos(t));
subplot(313);stem(n,cos(pi*n/3));
4)用于图形标注的函数
①xlabel,ylabel,title 坐标轴与图形名称标注
调用格式为:xlabel(s),ylabel(s),title(s),s为字符变量或常数。

例如:xlabel(‘t’),ylabel(‘y’),title(‘waveform of cos’)
②axis 坐标范围控制,调用格式为:
axis([xmin xmax ymin ymax])
例如:axis([-2 3 -3 3])
③text 添加文本注释,格式为
text(x,y,s) 在坐标(x,y)处添加文本注释s,s是字符串。

例如:text(0.5,1,’maxpoint’);
④legend 给多条曲线标注,同一坐标系中有多条曲线时,用legend区分它们。

调用格式:legend(str1,str2,…),str1,str2,…,均为字符串
例如:legend(‘sin’,’cos’);
(2)M文件的编写与运行
MATLAB有两种运行方式:命令行运行方式和M文件运行方式。

前者是在命令窗的
提示符“》”后直接输入命令或计算表达式,回车后MATLAB即执行运算并可以显示运行结果,这种方式适合实现一些简单的功能,如简单计算和绘图等;后一种方式中,M
文件是用MATLAB语言编写的程序文件,其扩展名为.m,在MATLAB的M文件编辑器中
输入、编辑和调试,生成后在命令窗口中运行该程序,与运行MATLAB其他命令相似。

从形式上来讲,M文件可以分成M脚本(M script)文件和M函数(M function)两类。

脚本文件就是一系列MATLAB语句、命令的罗列、组合,运行脚本文件时,MATLAB 依次执行文件中的每一行语句,与操作系统中批处理文件的运行方式相似。

M函数文件和脚本文件的主要区别在于格式的不同:M函数文件第一行为函数定义行,以关键字“function”(通常为蓝色字体)开头,而脚本文件无此定义行;函数文件定义行的一般格式如下:
function [y1,y2,y3,…] = myfun(x1,x2,x3,…)
即定义行由关键字function,输出变量y1,y2,y3,…,函数名myfun和输入变量x1,x2,x3,…四部分组成。

其中关键字和函数名不能省略,输入变量和输出变量可以有多个,也可以一个都没有。

没有输入输出变量时,中括号,等号和小括号均可以省略。

以下是M脚本文件和M函数文件的示例:
%This is an M script sample。

clear;
x = -pi:0.1:pi;
y1 = sin(x);
y2 = cos(x);
plot(x,y1,x,y2);
title('cosine and sine functions');
xlabel('time');
ylabel('Amplitude');
legend('y = cos(x)','y = sin(x)');
grid on;
%This is an M function sample.
function [y,pos] = findmax(a)
% findMax find the max value of matrix a togeter with its position
% y = findmax(a):find the max value of matrix a
% [y,pos] = findmax(a):find the max value of matrix a,get its position % as well in pos
[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;3,4];% 调用前需要给输入变量赋具体值
[mx,ps]=findmax(a)
完成对findmax的调用,两个输出值分别赋给mx和ps两个变量。

(3)MATLAB的搜索路径及设置
M文件运行时,MATLAB按照事先设置好的路径搜索顺序来寻找M文件,如果要执行的文件不在MATLAB的搜索路径中,就无法执行。

利用MATLAB主界面File菜单中的“set path”可以将需要的目录、文件夹添加到MATLAB的搜索路径中,也可以设置新的搜索顺序。

或者利用函数addpath,path,和pathtool设置搜索路径。

3.实验内容及其步骤
(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 命令获得。

4. 实验用MATLAB 函数介绍
在实验过程中用到的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)绘制振荡曲线4sin 3t y e t 及其包络线40t
y e 的图形,其中t 的取值范
围是[0,5],并进行相应的标注。

(3)编写一个函数文件,实现以下功能:输入一个数组,对其元素进行从大到小的排列,将排序后的数组输出;求数组元素的最大值并求出它在原数组中的位置。

实验三
实验四
deltaN(1,0,5)
实验五
figure
clear;
N=15;
b=1; % b差分方程右边x的系数向量
a=[1 -0.8]; % a差分方程左边y的系数向量
[h,n] =impz(b,a,N); %h:求解单位样值响应
subplot(211);stem(h);
xlabel('n');ylabel('h');title('实际值');
h1=0.8.^n;
subplot(212);stem(h1);
xlabel('n');ylabel('h');title('理论值');
figure
y0=2;
x0=0;
x1=zeros(1,N);
z0=filtic(b,a,y0,x0); %求初始状态z0;
y=filter(b,a,x1,z0);
subplot(211);stem(y);
xlabel('n');ylabel('y');title('实际值');
y1=1.6.*0.8.^n;
subplot(212);stem(y1);
xlabel('n');ylabel('y');title('理论值');
figure
x=ones(1,N); %阶跃信号输入
y=conv(h,x); %卷积法求阶跃响应
subplot(311);stem(y);
axis([0 30 0 5]);
xlabel('n');ylabel('y');title('实际值1'); y1=filter(b,a,x);
subplot(312);stem(y1);
xlabel('n');ylabel('y');title('实际值2'); y2=5-4*0.8.^n;
subplot(313);stem(y2);
xlabel('n');ylabel('y');title('理论值');
实验六
figure;
t = 0:0.0002:1;
f0 =13;
xa = cos(2*pi*f0*t);
subplot(311);
plot(t,xa);
xlabel('t'),ylabel('xa');
title('f0=13 x_{a}(t)');
subplot(312);
f1=10;
T=1/f1;
nT=0:T:1;
xs=cos(2*pi*f0*nT);
n = 0:length(nT)-1;
stem(n,xs);
xlabel('t'),ylabel('xs');
title('sample sequence x(n) using 10hz');
ta = 0:0.0002:1;
f0 =13;
xa = cos(2*pi*f0*ta); %原始连续信号
f1=10; %采样频率
T=1/f1;
nT=(0:T:1)';%nT
xs=cos(2*pi*f0*nT);
t = linspace(-0.5,1.5,500)';
ya = sinc((1/T)*t(:,ones(size(nT)))-(1/T)*nT(:,ones(size(t)))')*xs;
%ya:利用矩阵乘实现h(t-nT)和x(nT)的乘积和,其中h(t)=sinc(f1*t),采用
t(:,ones(size(nT)))和nT(:,ones(size(t)))’将两个时间向量统一为同等大小矩阵subplot(313);
plot(nT,xs,'o',t,ya,ta,xa); title('x_{a}(t)');
实验七
clear;
x= [1 2 3 4];
w=linspace(-pi,pi,500);
X=freqz(x,1,w);
subplot(211),plot(w,abs(X)); xlabel('w'),ylabel('y');
title('abs(X)');
subplot(212),plot(w,angle(X) );
clear;
N=10000;
n=linspace(0,100,N);
w=linspace(-pi,pi,500);
x=0.5.^n.*ones(1,N);
X=freqz(x,1,w);
subplot(211),plot(w,abs(X)); xlabel('w'),ylabel('y');
X1 = fft(x,16);%16?FFT
X2
=freqz(x,1,16,'whole');%??DTFT? DFT
subplot(211);plot(X1,'o'); xlabel('w'),ylabel('y');
title('X1 = f f t (x,16)'); hold on;
subplot(212),plot(X2,'+');
function y =
circconv(x1,x2,N)
K = length(x1);
M = length(x2);
L = K+M-1;
x1 = x1(:).';
x2 =x2(:).';
y1=conv(x1,x2);
if N >=L
y = [y1,zeros(1,N-L)]; function
y=circshift(x,m)
% y=x((n-m))
N = length(x)
if abs(m)>N
m= rem(m,N);
end
n=0:N-1;
n=0:3;
N=4;
x1=[1 2 3 4];
x2=[4 3 2 1];
y=circconv(x1,x2,N);
subplot(211),stem(n,y)
;
xlabel('n'),ylabel('x'
);
title('y=circconv(x1,x
2,N);');
X1=fft(x1,N);
X2=fft(x2,N);
X=X1.*X2;
clear;
N=10000;
n=linspace(0,100,N);
w=linspace(-pi,pi,500);
x=0.5.^n.*ones(1,N);
X=freqz(x,1,w);
subplot(211),plot(w,abs(X)); xlabel('w'),ylabel('y');
title('abs(X)');
subplot(212),plot(w,angle(X)); xlabel('w'),ylabel('y');
title('angle(X)');
实验八
clear;
M=5;
b=ones(1,5)/M;
a=1;
[H,w]=freqz(b,a,500);
subplot(211),plot(w,abs(H));
xlabel('w'),ylabel('y');title('abs(H)'); subplot(212),plot(w,angle(H));
xlabel('w'),ylabel('y');title('angle(H)' );
clear;
b=[1 -8.5 12.4 -21];
b1=[b,37,fliplr(b)];
n1=0:length(b1)-1;
[H,w]=freqz(b1,1,500); subplot(411);stem(n1,b1); subplot(412);plot(w,abs(H));
clear;
b=[1 -8.5 12.4 -21];
b2=[b,37,37,fliplr(b)];
n2=0:length(b2)-1;
[H,w]=freqz(b2,1,500); subplot(411);stem(n2,b2); subplot(412);plot(w,abs(H));
clear;
b=[1 -8.5 12.4 -21];
b4=[b,-fliplr(b)];
n4=0:length(b4)-1;
[H,w]=freqz(b4,1,500); subplot(411);stem(n4,b4); subplot(412);plot(w,abs(H));
clear;
a=-0.5;
c=[1 -a];
[H,w]=freqz(c,1,500);
subplot(211);plot(w,abs(H));
xlabel('w'),ylabel('y');title('a<0,abs(H)'); subplot(212);plot(w,angle(H));
clear;
a=0.5;
c=[1 a];
[H,w]=freqz(c,1,500);
subplot(211);plot(w,abs(H));
xlabel('w'),ylabel('y');title('a>0,abs(H)'); subplot(212);plot(w,angle(H));
xlabel('w'),ylabel('y');title('a>0,angle(H))');
实验九
clear;
fp=30;
fs=50;
Ap=1;
As=30;
Fs=150;
wp=2*pi*fp;
ws=2*pi*fs;
[N,Wn]=buttord(wp,ws,Ap,As,'s'); [b,a]=butter(N,Wn,'low','s'); [bz,az]=impinvar(b,a,Fs);
num=50;
n=0:49;
f1=15;
f2=45;
x=cos(2*pi*f1*n/Fs)+2*cos(2*pi*f2*n/Fs); y=filter(bz,az,x);
subplot(411),stem(n,x);
[X,w]=freqz(x,1,num);
subplot(412),plot(w,abs(X));
clear;
fs1=30;
fp1=40;
fp2=75;
fs2=100;
Ap=0.5;
As=40;
Fs=300;
ws1=2*pi*fs1;
wp1=2*pi*fp1;
wp2=2*pi*fp2;
ws2=2*pi*fs2;
ws=[ws1 ws2];
wp=[wp1 wp2];
[N,Wn]=cheb1ord(wp,ws,Ap,As,'s');
实验十
figure(1);
wp=0.5*pi;ws=0.66*pi;
wdelta=ws-wp;
N=ceil(3.11*pi/wdelta)
Nw=2*N+1;
wc=(ws+wp)/2;
win=hanning(Nw);
b=fir1(Nw-1,wc/pi,win)
freqz(b,1,512)
figure(2);
f=[0 0.125 0.125 0.250 0.250 0.500 0.500 0.750 0.750 1.00]; m=[1 1 0.5 0.5 0.25 0.25 1/6 1/6 0.125 0.125];
b=fir2(60,f,m);
[h,w]=freqz(b);
plot(f,m,w/pi,abs(h))
grid on;
legend('理想滤波器','设计滤波器');
figure(3);
clear;
f=[0, 0.4 0.4 0.65 0.65 1];
m=[1 1 0 0 1 1];
b1=fir2(34,f,m,chebwin(35,50));
[h1,w]=freqz(b1);
subplot(211),plot(f,m,w/pi,abs(h1));
grid on;
legend('理想滤波器','设计滤波器');
b2=fir2(34,f,m);
[h2,w]=freqz(b2);
subplot(212),plot(f,m,w/pi,abs(h2)); grid on;
legend('理想滤波器','设计滤波器');
综合实验。

相关文档
最新文档