离散信号与系统的时域分析
离散信号的MATLAB表示
表示离散信号f(k)需要两个行向量,一个表示序号k = [ ],一个表示相应的函数值f = [ ], 画图命令是stem。
例2-1正弦信号序列(注意序列信号的周期性)
k = 0 : 40;
subplot( 2, 1, 1 ),
stem( k, cos( k * pi / 8 ), ‘filled’ ),
title( ‘cos(kpi/8)’ );
subplot( 2, 1, 2 ),
stem( k, cos( k * pi * 2 ), ‘filled’ ),
title( 'cos(kpi*2)’ );
例2-2单位序列信号δ(k)
编写函数δ(k)m文件
function danweixulie( k1, k2, k0 )%k1、k2为画图范围,k0为脉冲位置
k = k1:k2;
n = length( k );
f = zeros( 1, n );%生成零矩阵
f( 1, -k0 - k1 + 1 ) = 1;%对脉冲位置赋值为1
stem( k, f,‘filled’)
axis( [ k1, k2, 0, 1.5 ] )
title( ‘单位序列δ’)
实现函数danweixulie
danweixulie( -5, 5, 0)
例2-3单位阶跃信号ε(k)
编写函数ε(k)m文件
function jieyuexulie( k1, k2, k0 )
k_zero = k1: -k0-1;
k_one = -k0 : k2;
y_zero = zeros( 1, length( k_zero ) );
y_one = ones( 1, length( k_one ) );
stem(k_one,y_one)
hold on
stem(k_zero,y_zero)
hold off
title( ‘ε(k)’ )
axis( [ k1, k2, 0, 1.5 ] )
实现函数jieyuexulie
jieyuexulie( -3, 8, 0 )
例2-4实指数序列信号
实指数序列m文件
function zhishuxulie( k1, k2, c, a )%k1为起始,k2为终止,c幅度,a底数
k = k1 : k2;
x = c * ( a.^k );
stem( k, x,‘filled’)
hold on
plot( [ k1, k2 ], [ 0, 0 ] )
hold off
实现函数zhishuxulie
zhishuxulie( 0,40,1,5/4 )
离散信号的卷积和
两个有限长的序列f1,f2卷积可调用matlab里的conv,格式f=conv(f1,f2),f为卷积结果,但不显示时间序列,可自己编函数dconv将其显示出来
例2-5
编写dconv.m
function [f,k]=dconv(f1,f2,k1,k2)
%The function of compute f=f1f2
% f: 卷积和序列 f(k)对应的非零样值向量
% 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.5h(3);
set(gca,‘position’,h) %将第三个子图的横坐标范围扩为原来的 2.5 倍
运行
f1=[1 2 1];
k1=[-1 0 1];
f2=ones(1,5);
k2=-2:2;
[f, k]=dconv(f1,f2,k1,k2)
- 由运行结果和代码可以看出卷积f(k)的起点为f1与f2起点之和,终点为f1与f2终点之和,因此长度为f1与f2长度之和减1 *
离散系统的单位响应
MATLAB中系统响应函数impz
impz( b ,a )%b,a是离散系统的行向量
impz( b, a, n )%b,a是离散系统的行向量,n表示时间范围0~n
impz( b, a, n1, n2 )%时间范围n1~n2
y = impz( b, a, n1, n2 )%由y给出数值序列
例2-6
a=[1,-1,0.9];
b=[1];
impz(b,a)
%impz(b,a,60)
%impz(b,a,-10:40)
离散系统的零状态响应
例2-7
a = [ 1 -0.25 0.5 ];
b = [ 1 1 ];
t = 0 : 20;
x = ( 1/2 ).^t;
y = filter( b, a, x )%b为激励系数,a为响应系数,x为激励函数
subplot( 2, 1, 1 )
stem( t, x )
title( ‘输入序列’ )
subplot( 2, 1, 2 )
stem( t, y )
title( ‘响应序列’ )
课后习题
2
a=[ 2, -2, 1 ];
b=[ 1, 3, 2 ];
impz(b,a);
3
a = [ 1, 1, 0.25 ];
b = [ 1 ];
t = 0 : 15;%范围
x = ( t >= 0 );
y = filter( b, a, x )%b为激励系数,a为响应系数,x为激励函数
subplot( 2, 1, 1 )
stem( t, x )
title( ‘输入序列’ );
subplot( 2, 1, 2 )
stem( t, y )
title( ‘响应序列’ );