用 MATLAB 实现常用的离散时间信号及其时域运算
信息与通信工程学院
通信 131 班
2013136130
赵颖
摘要:
在 MATLAB 中,离散信号和连续信号是有一些区别的。离散信号只能用
向量来表示,与连续信号不同,连续信号即可以用向量表示,也可以用符号运算
表示。本实验用 MATLAB 实现常用的离散时间信号及其时域运算,运用 MATLAB
的绘图指令绘制离散时间信号。熟练掌握 MATLAB 软件的使用方法并学习离散信
号的 MATLAB 表示方式,实践与理论结合,巩固所学的知识。
一、引言
1、题目要求
学习用 MATLAB 语言产生离散时间信号并对离散时间信号进行时域运
算。
2、任务
(1)、编制用于产生下列信号的通用程序,要求对于任意给定的参数都能
实现所要求的信号。调试并运用这些通用程序,具体产生由指导教师指定的信号
并绘制信号波形。
a、
)(
nx
(
0nnA
)
b、
)(
nx
([
mnuA
1
)
(
mnu
2
)]
(2)、已知离散序列波形如图 1.2.1 所示,试用 MATLAB 绘出满足下列要
求的序列波形。
a、
(
kf
)()2
ku
b、
f
(
k
)2
c、
(
kf
()2
ku
)2
二、基本原理
图 1.2.1
离散时间信号在时间上是离散的,只是在某些不连续的瞬间给出特定
的函数值,因此,离散信号也可以由连续信号抽样得到。典型的离散信号包括:
单位样值信号 )(n 、单位阶跃序列
(
0nnu 、以及矩形序列等。
)
1、单位样值信号δ(n)
单位样值信号是持续时间无穷小、瞬间幅度无穷大、涵盖面积恒为
1 的理想信号,记为 )(n ,其数学表达式为:
t
)( dt
1
f
)(t
=
)(
t
(0
t
)0
单位样值信号的图形如 2.1.1 所示:
图 2.1.1
其对应代码为:
clc
clear
n=5;
x=zeros(1,n);
x(1)=1;
xn=0:n-1;
stem(xn,x,'fill')
axis([-5 5 0 2])
2、单位阶跃序列
单位阶跃信号是一种单边性极强的信号,记为
(
0nnu ,其数学表
)
达式为:
f
)(t
=
1
0
t>=0
t<0
单位阶跃信号的图形如图 2.2.1 所示:
图 2.2.1
其对应代码为:
clc
clear
n=10;
x=ones(1,n);
xn=0:n-1;
stem(xn,x,'filled')
axis([-5 5 0 2])
3、离散时间信号的时域运算
信号的时域运算包括信号的平移、反褶、尺度及信号的相加、相乘。
用 MATLAB 的符号运算命令来表示离散世间信号的时域运算,然后用 ezplot 命令
绘制出其结果波形图。
反褶:
f
)(
t
(
f
t
)
尺度:
f
)(
t
f
(
at
),
a
0
扩展
01;
位移:
f
)(
t
(
t
f
0t
)
0 t
0
,右移
0 t
0
,左移
信号相加减:
f
1
)(
t
f
2
)(
t
信号相乘:
f
1
)(
t
f
2
)(
t
三、实现方法
任务 1
1、
)(
nx
(
0nnA
)
运用单位冲激信号扩大 A 倍,向右平移 0n 个单位就得到该波形。
其波形如图 3.1.1
图 3.1.1
相关程序如下:
clear
clc
t1=input('起始位置 t1=');
t0=input('平移距离 t0=')';
t2=input('终止位置 t2=');
A=input('A=');
t=t1:0.01:t2;
n=length(t);
tt=t1:0.01:t0;
n1=length(tt);
f=zeros(1,n);
f(t0-1)=A;
f(n1)=1/0.01;
plot(t,f);
stem(t,f,'filled'),
grid on,
axis([t1 t2 -3
title('单位冲激信号')
(
mnu
2
)]
200])
2、
)(
nx
([
mnuA
1
)
运用单位阶跃信号扩大 A 倍的幅度,结合时域中的位移运算,就可以
得到该波形。其波形图如图 3.2.1
其相应代码如下:
图 3.2.1
clc
clear
t0=input('起始时刻 t0=');
t1=input('第一次跳变时刻 t1=');
t2=input('第二次跳变时刻 t2=');
t3=input('终止时刻 t3=');
A=input('A=');
t=t0:t3;
n=length(t);
tt=t1:t3;
n1=length(tt);
x=[zeros(1,n-n1),ones(1,n1)];
ttt=t2:t3;
n2=length(ttt);
y=[zeros(1,n-n2),ones(1,n2)];
z=A*(x-y);
stem(t,z)
grid on,
title('单位阶跃信号')
axis([t0, t3,min(z)-1,max(z)+1])
任务二
3、
(
kf
)()2
ku
f
(
k
)2
(
kf
()2
ku
)2
(1)、离散序列反褶函数(fanzhe.m)
function[f,k]=fanzhe(f1,k1)
f=fliplr(f1);
k=-fliplr(k1);
(2)、离散序列位移函数(pingyi.m)
function [f,k]=pingyi(ff,kk,k0)
k=kk+k0;
f=ff;
(3)、离散序列想成函数(xiangcheng.m)
function [f,k]=xiangcheng(f1,f2,k1,k2)
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;
Return
clear
clc
i=1;
for m=-3:4
if m<0
f(i)=m+3;
elseif(m==4)
f(i)=0;
else
f(i)=3;
end
i=i+1;
end
%f(k)
m=-3:4;
subplot(331),stem(m,f,'filled'),
grid on,
title('f(k)')
axis([min(m)-1,max(m)+1,min(f)-0.5,max(f)+1])
i=1;
for n=-4:6
if n<0
u(i)=0;
else
u(i)=1;
end
i=i+1;
end
n=-4:6
m=-3:4
%f(k-2)
[y1,k1]=pingyi(f,m,2);
subplot(332),stem(k1,y1,'filled'),
grid on,
axis([min(k1)-1,max(k1)+1,min(y1)-0.5,max(y1)+1])
title('f(k-2)')
%f(-k)
[y2,k2]=fanzhe(f,m);
subplot(333),stem(k2,y2,'filled'),
grid on,
axis([min(k2)-1,max(k2)+1,min(y2)-1,max(y2)+1])
title('f(-k)')
%u(k)
[y3,k3]=pingyi(u,n,0);
subplot(334),stem(k3,y3,'filled'),
grid on,
axis([min(k3)-1,max(k3)+1,min(y3)-1,max(y3)+1])
title('u(k)')
%u(k-2)
[y4,k4]=pingyi(u,n,2);
subplot(335),stem(k4,y4,'filled'),
grid on,
axis([min(k4)-1,max(k4)+1,min(y4)-1,max(y4)+1])
title('u(k-2)')
%f(k-2)u(k)
[y5,k5]=xiangcheng(y1,y3,k1,k3)
subplot(336),
stem(k5,y5,'filled'),
grid on,
title('f(k-2)u(n)')
axis([min(k5)-1,max(k5)+1,min(y5)-1,max(y5)+1])