xxxx大学实验报告
学生姓名 _xxx_ 学 号_xxxxxxx_ 年级班级_xxxxxxx_ 实验项目_xxxxxxxx_ 实验时间_xxxxxxxxx_
实验二
一、实验目的:
1. 充分熟悉复指数函数find、sigshift、sigfold函数的使用; 2. 熟悉序列的加、减、乘、除、移位、折叠的计算; 3. 能够画出结果的图形。 二、实验步骤:
1. 用help查找find、sigshift、sigfold函数的使用情况; 2. 编辑并生成函数sigadd.m(序列相加)
function [y,n] = sigadd(x1,n1,x2,n2) % 实现 y(n) = x1(n)+x2(n) % [y,n] = sigadd(x1,n1,x2,n2)
% y = 在包含n1 和 n2 的n点上求序列和 % x1 = 在 n1上的第一序列
% x2 = 在 n2上的第二序列(n2可与 n1不等)
n = min(min(n1),min(n2)):max(max(n1),max(n2)); % y(n)的长度 y1 = zeros(1,length(n)); y2 = y1; % 初始化
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % 具有y的长度的 x1 y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % 具有y的长度的x2 y = y1+y2; % 序列相加.
3. 编辑并生成函数sigmult.m(序列相乘)
function [y,n] = sigmult(x1,n1,x2,n2) % 实现 y(n) = x1(n)*x2(n) % [y,n] = sigmult(x1,n1,x2,n2)
% y = 在n区间上的乘积序列,n 包含 n1 和 n2 % x1 = 在 n1上的第一序列
% x2 = 在 n2上的第二序列(n2可与 n1不等)
n = min(min(n1),min(n2)):max(max(n1),max(n2)); % y(n)的长度
y1 = zeros(1,length(n)); y2 = y1; %初始化
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % 具有y的长度的 x1 y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % 具有y的长度的 x2 y = y1 .* y2; % 序列相乘 4. 编辑并生成函数sigshift.m(序列移位)
function [y,n] = sigshift(x,m,n0) % 实现 y(n) = x(n-n0) % [y,n] = sigshift(x,m,n0)
n = m+n0; y = x;
5. 编辑并生成函数sigfold.m(序列折叠)
function [y,n] = sigfold(x,n) % 实现 y(n) = x(-n) % [y,n] = sigfold(x,n) y = fliplr(x); n = -fliplr(n);
6. 编辑并生成实现两序列相乘和相加程序
clc;
clear;
x1=[0,1,2,3,4,3,2,1,0];n1=-2:6; x2=[2,2,0,0,0,-2,-2]; n2=2:8; [y1,n]=sigmult(x1,n1,x2,n2); [y2,n]=sigadd(x1,n1,x2,n2);
subplot(2,2,1);stem(n1,x1);title('序列x1') xlabel('n');ylabel('x1(n)');
subplot(2,2,2);stem(n2,x2);title('序列x2') xlabel('n');ylabel('x2(n)');
subplot(2,2,3);stem(n,y1);title('两序列相乘') xlabel('n');ylabel('y1(n)');
subplot(2,2,4);stem(n,y2);title('两序列相加') xlabel('n');ylabel('y2(n)');
运行以上程序得到的图形:
体会:相加或相乘时,两序列尺度要保持一致。 7. 改变坐标尺度重新画图,使图形更加直观;