实验十一 离散信号时域分析的MATLAB实现
PAGE
PAGE 60
实验十一 离散信号时域分析的MATLAB实现
一、实验目的
熟悉MATLAB编程方法、常用语句和可视化绘图技术;
掌握序列时域运算的MATLAB编程方法。
二、实验原理
在用MATLAB表示离散信号并将其可视化时,由于矩阵元素个数是有限的,因此无法表示无限长序列;另外,离散信号无法进行符号运算。在MATLAB中,绘制离散序列波形图的专用命令为stem( )。其格式有:
(1)stem(k,f)
在图形窗口中,绘制出样值顶部为空心圆的序列f(k)波形图。
(2)stem(k,f,’fill’)
在图形窗口中,绘制出样值顶部为实心圆的序列f(k)波形图。
下面介绍离散序列的MATLAB表示、基本运算(相加、相乘、平移、反转、尺度变换)、卷积和的实现及其图形显示方法。
1.单位序列?(k)
单位序列的定义:
下面为绘制?(k-k0)波形图的子程序:
function impseq(k1,k2,k0) %单位序列?(k-k0),k0为时移量
图11-1k=k1:k2; %k1,k2为序列的起止序列号
图11-1
n=length(k);
x=zeros(1,n);
x(1,k0-k1+1)=1; %在k0时刻信号赋值为1
stem(k,x,'fill')
axis([k1,k2,0,1.1])
title('单位序列d(k-k0)')
输入如下命令,则可获得单位序列?(k-3)的波形图,如图11-1所示。
impseq(-1,5,3)
2.单位阶跃序列?(k)
单位序列的定义:
下面为绘制?(k-k0)波形图的MATLAB子程序。
function stepseq(k1,k2,k0) %单位阶跃序列,k0为时移量
k=k1:k0-1; %k1,k2为序列的起止序列号
kk=length(k);
图11-2x=zeros(1,kk);
图11-2
stem(k,x,'fill') %绘出k1~k0-1的波形(0值)
hold on
n=k0:k2;
nn=length(n);
x=ones(1,nn); %k0后信号赋值为1
stem(n,x,'fill') %绘出k0~k2的波形(1值)
hold off
axis([k1,k2,0,1.1])
title('单位阶跃序列')
运行如下命令,则可获得单位序列?(k-3)的波形图,如图11-2所示。
stepseq(-1,10,3)
3.序列的相加(减)、相乘运算
对序列向量f1(k)、f2(k)相加或相乘,可以通过补零的方式使f1(k)、f2(k)成为具有相同维数的序列向量s1(k)、s2(k),然后对s1(k)、s2(k)相加或相乘。因此,序列向量f1(k)、f2(k)的维数可以不同。以下函数可实现序列向量f1(k)、f2(k)的相加或相乘运算。
function [f,k]=sigadd(f1,k1,f2,k2)
%实现序列f1,f2的相加,相减,相乘,可据实际需要作选择
%f1,k1;f2,k2是参加运算的序列向量及其时间向量
%f,k作为返回的和(差,积)序列及其时间向量
%将f1,f2转换成等长序列s1,s2
k=min(min(k1),min(k2)):max(max(k1),max(k2));
s1=zeros(1,length(k)); s2=s1; %初始化序列
s1(find((k>=min(k1))&(k<=max(k1))==1))=f1;
s2(find((k>=min(k2))&(k<=max(k2))==1))=f2;
f=s1+s2; %序列相加
% f=s1-s2; %序列相减
% f=s1.*s2; %序列相乘
stem(k,f,'fill')
axis([(min(min(k1),min(k2))-1),(max(max(k1),max(k2))+1),(min(f)-0.5),(max(f)+0.5)])
例11-1.已知序列。编写M文件求。
解:运行如下M文件,可实现,结果如图11-1所示。
图11-1k1=-1:3;
图11-1
f1=[-3 2 3 1 2];
k2=-1:1;
kk=length(k2);
f2=ones(1,kk);
subplot(2,2,1);stem(k1,f1,'fill');title('f1(k)');
subplot(2,2,2);stem(k2,f2,'fill');title('f2(k)');
subplot(2,2,3);[f,k]=sigadd(f1,k1,f2,k2);title('f1(k)+f2(k)')
若要实现序列f1(