实验一  MATLAB 的基本操作、编程基础

28
实实MATLAB 实实实实实 实实实实 实实实实 1. 实实实实 matlab 6.5 实实实实2. 实实实实 matlab 6.5 实实实实实实实实实实实实实3. 实实 matlab 6.5 实实实实实实4. 实实实实 M-File 实实实 实实实 实实实 、、。 实实实实实实实 实实实实 实实实实实实实实实实实实实实实实实实实 、。

description

实验一  MATLAB 的基本操作、编程基础. 一、实验目的 1. 初步了解 matlab 6.5 应用环境; 2. 练习利用 matlab 6.5 中的命令或程序描述基本信号; 3. 练习 matlab 6.5 中的绘图方法; 4. 初步练习 M-File 的建立、保存、调用。. 二、实验原理与方法 各种信号、运算形式的数学描述及相应的命令或程序。. 涉及函数. 矩阵生成函数: 1 、 zeros ; 2 、 ones ; 3 、 rand ; 4 、 randn 。 - PowerPoint PPT Presentation

Transcript of 实验一  MATLAB 的基本操作、编程基础

实验一  MATLAB 的基本操作、编程基础

一、实验目的 1. 初步了解 matlab 6.5 应用环境; 2. 练习利用 matlab 6.5 中的命令或程序描述基本信号; 3. 练习 matlab 6.5 中的绘图方法; 4. 初步练习 M-File 的建立、保存、调用。

二、实验原理与方法 各种信号、运算形式的数学描述及相应的命令或程序。

涉及函数矩阵生成函数: 1 、 zeros ; 2 、 ones ; 3 、 rand ;

4 、 randn 。

画图函数: 1 、 figure ; 2 、 plot ; 3 、 subplot ;

4 、 stem ; 5 、 xlabel ; 6 、 ylabel ; 7 、 title ;

8 、 text ; 9 、 axis 。

数学运算函数: 1 、 min ; 2 、 max ; 3 、 abs ; 4 、

angle ; 5 、 cos ; 6 、 exp ; 7 、 conv 。

调试函数: error

其他函数: find fliplr

三、实验内容及步骤1. 启动 matlab 6.5 ,了解常用窗口及其作用;

1) 常用一维矩阵的生成 N=10 A=zeros(1,N) % 生成 1 行 N 列的全 0 矩阵 A=ones(1,N) % 生成 1 行 N 列的全 1 矩阵 A=randn(1,N) % 生成 1 行 N 列的随机矩阵

2) 简单一维矩阵的生成 x1=[1 2 3 0 0] x=0.123 y1=[1,2,3,4,5] y=123

2.MATLAB 编程基础请在命令窗口中输入蓝色部分 , 结合讲授进行理解

3) 利用冒号生成向量 a1=0:1:9 b1=0:9 t=-0.1:0.01:0.1

% 生成有 N 个元素的行向量 X, 其值在 a 与 b 之间线性分布 a=1; b=100; N=10; X=linspace(a,b,N)

% 生成有 N 个元素的行向量 Y, 其值在 10a 与 10b 之间等分分布 a=1; b=5; N=10; Y=logspace(a,b,N)

4) 基本语句格式 变量名列表 = 表达式; % 左边是返回值,右边是表达式的定义

请在命令窗口中输入蓝色部分 , 结合讲授进行理解

5)for 循环语句基本格式 for 循环变量 = 起始值 : 步长 : 终止值 循环体 end

例: for i=10:-1:1

y(i)=i;

end

y

执行后 y 的值为 y=

1 2 3 4 5 6 7 8 9 10

请在命令窗口中输入蓝色部分 , 结合讲授进行理解

6)while 循环语句基本格式 while 表达式 循环体 end

例: sum=0;i=0; while sum<100 i=i+1; sum=sum+i; end sum i

执行后 sum 的值为 sum= 105 i= 14

请在命令窗口中输入蓝色部分 , 结合讲授进行理解

7)if 语句基本格式 if 逻辑表达式 语句 end例: for i=1:10

a(i)=i;

if i>5

a(i)=10-i;

end

end

a执行后 a 的值为 a= 1 2 3 4 5 4 3 2 1 0

请在命令窗口中输入蓝色部分 ,

结合讲授进行理解

8)if-else 语句基本格式

例: if x>=1

y=10;

elseif x>-1 & x<1

y=0;

else

y=-10;

end

上述程序段的功能为?

请在命令窗口中输入蓝色部分 ,

结合讲授进行理解

9)switch 语句基本格式

switch 表达式 case 值 1

语句 1

case 值 2

语句 2

otherwise

语句 n

end

10)MATLAB 自定义函数( M-File )基本格式 先定义后保存再调用 定义 : 在 M-File 窗口中输入 function c =WAdd(a,b) % 函数定义行 c = a+b; % 函数体的语句 保存 : 保存在 work 文件夹中以便调用调用 : 在命令窗口中输入 a=1; b=1; c= WAdd(a,b) ;% 得到 c=2相关说明: 1. 写 M-file 的地方 : 在选择 File/New/M-file 后出现的窗口中; 2. function 是关键字; 3. M-file 的保存 : 一般应保存在 Matlab 工作目录中的 work 文件夹下。文件名是函数名字,如 WAdd.m ,否则无法调用。

请在命令窗口中输入蓝色部分 , 结合讲授进行理解

表示 x(n) ,一般应采用两个矢量,如

x1=[1 -1 3 2 0 4 5 2 1] % 产生序列 x1(n)nx1=[-3 -2 -1 0 1 2 3 4 5]

x2=[1,-1,3,2,0,4,5,2,1] % 产生序列 x2(n)nx2=-3:5

x3=[1,-1,3,2,0,4,5,2,1] ; % 产生序列 x3(n)nx3=[-3,-2,-1,0,1,2,3,4,5];x3nx3

3. 基本信号的表示、引用、图形描述

请在命令窗口中输入蓝色部分 , 结合讲授进行理解

注: 1. matlab 命令可在 command window 中直接输入 ;

2. 注意命令后有无“ ;” 的区别。 3. % 表示注释

练习X(1)=? Matlab 与 C , C++ 不同,矩阵 ( 向量 ) 坐标从 1

开始,而不是从零开始

% 单位取样序列 (1):δ(n)

N=8;

x=zeros(1,N);% x=0 0 0 0 0 0 0 0

x(1)=1;% x=1 0 0 0 0 0 0 0

% 单位取样序列 (2):δ(n)

N=8;

n=0:N-1;

x=[n==0];

% 移位单位取样序列 (3):δ(n-n0)

n1=0;n2=10;n0=5;

n=n1:n2;

x=[(n-n0)==0];% x=0 0 0 0 0 1 0 0 0 0 0

% 单位阶跃序列 (1):u(n)

N=10;

x=ones(1,N);% x=1 1 1 1 1 1 1 1 1 1

% 产生 n1=<n0=<n2 上的单位阶跃序列 (2):u(n-n0)

n1=0;n2=10;n0=5

n=n1:n2;

x=[(n-n0>=0)];% x=0 0 0 0 0 1 1 1 1 1 1

% 产生 x(n) = u(n-n0) 的 M-file 或自定义函数 ; n1≤n,n0 ≤ n2function [x,n] = stepseq(n0,n1,n2)if ((n0 < n1) | (n0 > n2) | (n1 > n2)) error(' 参数必须满足 n1 <= n0 <= n2')endn = [n1:n2]; x = [(n-n0) >= 0]; %x = [zeros(1,(n0-n1)), ones(1,(n2-n0+1))];

保存:调用:生成 u(n-8) ,区间为 0 到 20则 [x,n] = stepseq(8,0, 20)结果?调用:调用自定义函数产生单位阶跃序列 (2):u(n-5) 、 u(n-10)n1=0; n2=19; [x1,nx1] = stepseq(5,n1,n2) % u(n-5)[x2,nx2] = stepseq(10,n1,n2) % u(n-10)

% 实指数序列 :x(n)=anu(n)

% 正 ( 余 ) 弦序列 :x(n)=cos(wn+Φ)

% 周期序列

N=5;a=0.5;n=0:N-1;x=a.^n;% x=1.0000 0.5000 0.2500 0.1250 0.0625

N=5;w0=pi/4;Q=pi/3;n=0:N-1;x=cos(w0*n+Q);% x=0.5000 -0.2588 -0.8660 -0.9659 -0.5000

y=[x x x x];%4 个周期的序列

% 复指数序列 :x(n)=e(σ+jw)n

% 随机序列

N=3;sigma=0.5;w0=pi/4;n=0:N-1;x=exp((sigma+j*w0)*n);% x=1.0000 1.1658 + 1.1658i 0.0000 + 2.7183i % 这里的 i 和 j 为虚部标识。再如 : x=1+2j 或 y=1+2ix1=abs(x);% 序列 x 的幅值x2=angle(x);% 序列 x 的相位

N=5;rand(1,N);%N 点 , 在 [0,1] 上均匀分布randn(1,N);%N 点 , 均值为 0 方差为 1 的高斯随机序列 rand('state',0)

% 序列操作% 实现信号加的 M-file :y(n)=x1(n)+x2(n)

function [y,n] = sigadd(x1,n1,x2,n2)% implements y(n) = x1(n)+x2(n)

% -----------------------------

% [y,n] = sigadd(x1,n1,x2,n2)

% y = sum sequence over n, which includes n1 and n2

% x1 = first sequence over n1

% x2 = second sequence over n2 (n2 can be different from n1)

% 信号的长度一样才能相加 , 起点和止点一样才不会加错

n = min(min(n1),min(n2)):max(max(n1),max(n2)); % duration of y(n)

y1 = zeros(1,length(n)); y2 = y1; % initialization

y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 with duration of y

y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 with duration of y

y = y1+y2; % sequence addition

% 实现信号乘的 M-file : y(n)=x1(n) x2(n)

function [y,n] = sigmult(x1,n1,x2,n2)% implements y(n) = x1(n)*x2(n)

% -----------------------------

% [y,n] = sigmult(x1,n1,x2,n2)

% y = product sequence over n, which includes n1 and n2

% x1 = first sequence over n1

% x2 = second sequence over n2 (n2 can be different from n1)

% 信号的长度一样才能相乘 , 起点和止点一样才不会乘错n = min(min(n1),min(n2)):max(max(n1),max(n2)); % duration of y(n)

y1 = zeros(1,length(n)); y2 = y1;

y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 with duration of y

y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 with duration of y

y = y1 .* y2; % sequence multiplication

% 改变比例 :y(n)=ax(n)y=a*x;

% 移位的 M-file :y(n)=x(n-n0)function [y,n] = sigshift(x,m,n0)% implements y(n) = x(n-n0)% -------------------------% [y,n] = sigshift(x,m,n0)%

n = m+n0; y = x;

% 折叠的 M-file :y(n)=x(-n)function [y,n] = sigfold(x,n)% implements y(n) = x(-n)% -----------------------% [y,n] = sigfold(x,n)%

y = fliplr(x); n = -fliplr(n);

% 取样和 :

y=sum(x(n1:n2));

% 取样积y=prod(x(n1:n2));

% 信号能量Ex=sum(x.*conj(x));

Ex=sum(abs(x).^2);

% 信号功率Px=sum(abs(x).^2)/

N;

2

1

)()(n

nn

nxny

% 信号加、乘、移位、折叠例子 Exp1_1x1=[1 2 3 0 1 2 3];n1=[0 1 2 3 4 5 6];x2=[1 2 3 4 5];n2=-1:3;[z1,nz1]=sigadd(x1,n1,x2,n2); % 调用自定义相加函数[z2,nz2]=sigmult(x1,n1,x2,n2); % 调用自定义相乘函数[z3,nz3]=sigshift(x1,n1,3); % 调用自定义移位函数[z4,nz4]=sigfold(x1,n1); % 调用自定义反褶函数% 画图 , 红色 x 轴 , 蓝色 y 轴figure(1); % 调用第 1 个图形窗口subplot(221);stem(n1,x1);xlabel('n1');ylabel('x1');subplot(223);stem(n2,x2);xlabel('n2');ylabel('x2');subplot(222);stem(nz1,z1);xlabel('nz1');ylabel('z1=x1+x2');subplot(224);stem(nz2,z2);xlabel('nz2');ylabel('z2=x1*x2');figure(2); % 调用第 2 个图形窗口subplot(311);stem(n1,x1);xlabel('n1');ylabel('x1');subplot(312);stem(nz3,z3);xlabel('nz3');ylabel('z3=x1(n-3)');subplot(313);stem(nz4,z4);xlabel('nz4');ylabel('z4=x(-n)');

function [y,ny] = conv_m(x,nx,h,nh)% Modified convolution routine for signal processing% --------------------------------------------------% [y,ny] = conv_m(x,nx,h,nh)% y = convolution result% ny = support of y% x = first signal on support nx% nx = support of x% h = second signal on support nh% nh = support of h%

nyb = nx(1)+nh(1); % 卷积结果起点nye = nx(length(x)) + nh(length(h)); % 卷积结果止点ny = [nyb:nye]; y = conv(x,h);

% 卷积运算的 M-file:y(n)=x1(n)*x2(n)

% 卷积运算例子 : 已知 :h(n)=(0.9)nu(n),x(n)=u(n)-u(n-10).求 y(n)=h(n)*x(n).

n = -5:50;

u1 = stepseq(0,-5,50); %u(n)=u1(n)

u2=stepseq(10,-5,50); %u(n-10)=u2(n)

x = u1-u2; % input x(n)= u(n)-u(n-10)

h = ((0.9).^n).*u1; % 脉冲响应 h(n)

% 画图 , 红色 x 轴 , 蓝色 y 轴figure(1);

subplot(3,1,1);

stem(n,x); axis([ -5,50 , 0,2 ]);

title(' 输入序列 ');ylabel('x(n)');text(52,0,'n');

subplot(3,1,2);

stem(n,h); axis([-5,50,0,2])

title(' 脉冲响应 ');ylabel('h(n)'); text(52,0,'n'); % 调用卷积运算的 M-file求输出响应[y,ny] =conv_m(x,n,h,n); subplot(3,1,3);

stem(ny,y); axis([-5,50,0,8])

title(' 输出序列 ');ylabel('y(n)');text(52,0,'n');

1)gauspuls: 产生高斯调制的正弦脉冲yi=gauspuls(t,fc,bw); %fc 中心频率 ,bw带宽

2)gmonopuls: 产生高斯单脉冲y=gmonopuls(t,fc); %fc 中心频率

3) pulstran: 产生脉冲串y=pulstran(t,d,’func’); %func=gauspuls 或 rectpuls或 tripuls

4) rectpuls: 产生非周期矩形的取样信号

y=rectpuls(t);y=rectpuls(t,w);% 指定矩形的宽度

更多的信号产生函数

5) sawtooth: 产生锯齿波或三角波y=sawtooth(t);y=sawtooth(t,width);%0<width≤1

6) sinc: 产生 sinc 函数y=sinc(x);

7) square: 产生方波y=square(t);y=square(t,duty);%duty 指定占空比

8) tripuls: 产生非周期三角波的取样信号方波

y=tripuls(T);y= tripuls(T,w); %w 指宽度y= tripuls(T,w,s); %s 指斜度 -1<s<1

3. 画出以下各序列在给定区间的图形。1) x(n)=2δ(n+2)-δ(n-4)+δ(n) ,-5≤n≤5

2) x(n)=n[u(n)-u(n-10)]+10e-0.3(n-10)[u(n-10)-u(n-20)],

0≤n≤20

3) x(n)=2-cos(0.4πn)- cos(0.8πn), 0≤n≤50

4. 令 x(n)={1,2,3,4,5,6,7,6,5,4,3,2,1}, 画出下列序列的图形 1) x1(n)=2x(n-5)-3x(n-4)

2) x2(n)=x(3-n)-x(n)x(n-2)

3) xe(n) 和 xo(n) ---通过编写求 xe(n) 、 xo(n) 的 M-file来实现(需要给出测试函数 ) xe(n) 和 xo(n) 分别为 x(n) 的偶部和奇部五、实验报告要求 1. 简述实验目的及实验原理; 2.记录实验内容 3 、 4 的命令或程序及图形。