subplot(3,1,3);
ezplot(f3,[-2*pi,2*pi]); grid on;
title('f(2-t)');
9
实验二 离散信号与系统的时域分析
一、实验目的
1.学会用MATLAB表示常用离散信号的方法; 2.学会用MATLAB实现离散信号卷积的方法; 3. 学会用MATLAB求解离散系统的单位响应; 4. 学会用MATLAB求解离散系统的零状态响应; 二、实验原理
1.离散信号的MATLAB表示
表示离散时间信号f(k)需要两个行向量,一个是表示序号k=[ ],一个是表示相应函数值f=[ ],画图命令是stem。 例2-1正弦序列信号 正弦序列信号可直接调用MATLAB函数cos,例cos(?k??),当
2?/?是整数或分数时,才是周期信号。画cos(k?/8??),cos(2k)波形程序是:
k=0:40;
subplot(2,1,1)
stem(k,cos(k*pi/8),'filled') title('cos(k*pi/8)') subplot(2,1,2)
stem(k,cos(2*k),'filled') title('cos(2*k)')
?1k?0例2-2 单位序列信号 ?(k)??
0k?0?本题先建立一个画单位序列?(k?k0)的M函数文件,画图时调用。M文件建立方法:file / new / m-file 在文件编辑窗输入程序,保存文件名用函数名。
function dwxulie(k1,k2,k0) % k1 , k2 是画图时间范围,k0是脉冲位置 k=k1:k2; n=length(k); f=zeros(1,n);
f(1,-k0-k1+1)=1; stem(k,f,'filled') axis([k1,k2,0,1.5]) title('单位序列δ(k)') 保存文件名dwxulie.m
画图时在命令窗口调用,例:dwxulie(-5,5,0) 例2-3 单位阶跃序列信号
?(k)???1k?0
?0k?010
本题也可先建立一个画单位阶跃序列?(k?k0)的M函数文件,画图时调用。 function jyxulie(k1,k2,k0) k=k1:-k0-1; kk=-k0:k2; n=length(k); nn=length(kk) u=zeros(1,n);
uu=ones(1,nn); stem(kk,uu,'filled') hold on
stem(k,u,'filled') hold off
title('单位阶跃序列') axis([k1 k2 0 1.5]) 保存文件名jyxulie.m
画图时在命令窗口调用,例:jyxulie(-3,8,0)
例2-4 实指数序列信号 f(k)?cak ,c、 a是实数。 建立一个画实指数序列的M函数文件,画图时调用。 function dszsu(c,a,k1,k2) %c:指数序列的幅度 %a:指数序列的底数
%k1:绘制序列的起始序号 %k2:绘制序列的终止序号 k=k1:k2; x=c*(a.^k); stem(k,x,'filled') hold on
plot([k1,k2],[0,0]) hold off
调用该函数画信号:f5k3k1(k)?(4)?(k) ,f2(k)?(?4)?(k)波形。 dszsu(1,5/4,0,40) dszsu(1,-3/4,0,40)
2 .离散信号的卷积和
两个有限长序列f1,f2卷积可调用MATLAB函数conv,调用格式是f=conv(f1,f2), 是卷积结果,但不显示时间序号,可自编一个函数dconv给出f和k,并画图。 function [f,k]=dconv(f1,f2,k1,k2) %The function of compute f=f1*f2
% f: 卷积和序列f(k)对应的非零样值向量
11
f
% k: 序列f(k)的对应序号向量 % f1: 序列f1(k)非零样值向量 % f2: 序列f2(k)的非零样值向量 % k1: 序列f1(k)的对应序号向量 % k2: 序列f2(k)的对应序号向量 f=conv(f1,f2) %计算序列f1与f2的卷积和f k0=k1(1)+k2(1); %计算序列f非零样值的起点位置 k3=length(f1)+length(f2)-2; %计算卷积和f的非零样值的宽度
k=k0:k0+k3 %确定卷积和f非零样值的序号向量 subplot(2,2,1) stem(k1,f1) %在子图1绘序列f1(k)时域波形图 title('f1(k)') xlabel('k') ylabel('f1(k)') subplot(2,2,2) stem(k2,f2) %在图2绘序列f2(k)时波形图 title('f1(k)') xlabel('k') ylabel('f2(k)') subplot(2,2,3) stem(k,f); %在子图3绘序列f(k)的波形图 title('f(k)f1(k)与f2(k)的卷积和f(k)') xlabel('k') ylabel('f(k)')
h=get(gca,'position'); h(3)=2.5*h(3);
set(gca,'position',h) %将第三个子图的横坐标范围扩为原来的2.5倍 例2-5求卷积和,
f1(k)??(k?1)?2?(k)??(k?1)f2(k)??(k?2)??(k?1)??(k)??(k?1)??(k?2)
f1=[1 2 1];
k1=[-1 0 1]; f2=ones(1,5); k2=-2:2;
[f, k]=dconv(f1,f2,k1,k2)
由运行结果知,f的长度等于f1和f2长度之和减一, f的起点是f1和f2的起点之和,f的终点是f1和f2的终点之和。 3. 离散系统的单位响应
MATLAB提供画系统单位响应函数impz,调用格式是 impz(b,a) 式中b和a是表示离散系统的行向量;
impz(b,a,n) 式中b和a是表示离散系统的行向量,时间范围是0~n;
impz(b,a,n1,n2) 时间范围是n1~n2 ;y=impz(b,a,n1,n2) 由y给出数值序列;
12