当前位置:文档之家› 用MATL新编实现常用的离散时间信号及其时域运算

用MATL新编实现常用的离散时间信号及其时域运算

用M A T L新编实现常用的离散时间信号及其
时域运算
公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-
实验四用MATLAB实现常用的离散时间信号及其时域运算
——
摘要:在MATLAB中,只能用向量来表示离散时间信号。

与连续信号不同,离散时
间信号无法用符号运算来表示。

用适当的MATLAB语句表示出信号后,就可以利用MATLAB的绘图命令stem来绘出直观的信号波形图,stem是专门用于绘制离散时
间信号的。

在MATLAB中离散序列的时域运算和变换不能用符号运算来实现,而必
须用向量表示的方法,即在MATLAB中离散序列的相加、相乘需表示成两个向量的
相加、相乘,因而参加运算的两序列向量必须有相同的维数。

一、实验目的:(1)学习MATLAB语言及其常用指令;
(2)学习和掌握用MATLAB语言产生离散时间信号的编程方法;
(3)通过编程绘制出离散时间信号的波形,加深理解信号的时域运
算。

二、实验内容:(1)运用MATLAB的绘图指令绘制离散时间信号;
(2)用MATLAB语言实现离散时间信号的时域运算。

三、实验原理:(1)单位阶跃序列和单位样值序列。

离散时间信号只在某些离散的瞬时给出信号的值,因此,它是时间上不连续的
序列。

单位阶跃序列和单位样值序列在离散时间信号与系统的分析中是两个非
常典型的序列,分别记为u(n)和δ(n)。

它们的定义分别如下:
1 n≥0 1 n≥0
u(n)= δ(n)=
0 n<0 0 n≠0
若单位阶跃序列的起始点为n0,单位样值序列出现在n0时刻,则表达式分别为:
1 n≥n0 1 n=n0
u(n-n0)= δ(n-n0)=
0 n<n0 0 n≠n0
应注意,离散时间的单位阶跃序列与连续时间的单位阶跃信号的异同,以及离散时间的单位样值序列与连续时间的单位冲激信号的异同。

(2)离散时间信号的时域运算。

与连续时间系统的研究类似,在离散系统分析中,经常遇到离散时间信号的运算,包括两信号的相加、相乘以及序列自身的移位、反褶、尺度等等,也需要了解在运算过程中序列的表达式以及对应的波形的变化。

序列x(n)的移位:x(n-n0)
序列x(n)的反褶:x(-n)
序列x(n)的尺度变换:x(an)
两序列x1(n)与x2(n)的相加减:x1(n) ±x2(n)
两序列与的相乘:x1(n) ·x2(n)
(3)学习如何使用MATLAB语言产生离散时间信号并对离散时间信号进行时域运算。

四、实验任务:
(1)编制用于产生下列信号的通用程序,要求对于任意给定的参数都能实现所要求的信号。

调试并运行这些通用的程序。

①x(n)=Aδ(n-n0)
程序:function un(t1,t2,t0)
t=t1:t2;
n=length(t);
tt=t1:t2;
n1=length(tt);
f=zeros(1,n);
f(1,t0-t1+1)=3;
stem(t,f),grid on
title('μ¥3÷Do')
axis([t1,t2 4])
②x(n)=A[u(n-m1)-u(n-m2)]
程序:function unn(t1,t2,A)
t=t1:t2;
n=length(t);
f=[zeros(1,t1-1),A*ones(1,t2-t1),zeros(1,1)];
stem(t,f);grid on
axis([t1 t2 4])
(2)已知离散序列波形。

①f(k-2)u(k);
u(k)可以直接调用stepseq函数,离散序列的平移编程如下:function[f,k]=lspy(ff,kk,k0)
k=kk+k0;
f=ff;
离散序列的相乘程序为:
function [f,k]=lsxc(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;
stem(k,f)
axis([(min(min(k1),min(k2))-
1),(max(max(k1),max(k2))+1),(min(f),(max(f)+])则该离散信号的编程如下:
m2=1;
m3=1;
m4=4;
t=t1:t2;
y1=(stepseq(m1,t1,t2)-stepseq(m2,t1,t2));
y2=(stepseq(m3,t1,t2)-stepseq(m4,t1,t2));
f=y1.*(t+3)+3*y2;
[f1,k]=lspy(f,t,2);
f2=stepseq(0,-7,7);
[f3,k1]=lsxc(f1,f2,k,t);
stem(k1,f3),grid on
title('f(k-2)*u(k)');
axis([t1 t2 -1 4])
②f(-k+2);
:t1=-7;
t2=7;
m1=-3;
m2=1;
m3=1;
m4=4;
t=t1:t2;
y1=(stepseq(m1,t1,t2)-stepseq(m2,t1,t2)); y2=(stepseq(m3,t1,t2)-stepseq(m4,t1,t2)); f=y1.*(t+3)+3*y2;
[f1,k]=lspy(f,t,2);
[f2,k1]=lsfz(f1,k);
stem(k1,f2),grid on
title('f(-k+2))');
axis([t1 t2 -1 4])
③f(k-2)u(k-2)
t1=-7;
t2=7;
m1=-3;
m2=1;
m3=1;m4=4;
t=t1:t2;
y1=(stepseq(m1,t1,t2)-stepseq(m2,t1,t2));
y2=(stepseq(m3,t1,t2)-stepseq(m4,t1,t2));
f=y1.*(t+3)+3*y2;
[f1,k]=lspy(f,t,2);
f2=stepseq(2,-7,7);
[f3,k1]=lsxc(f1,f2,k,t)
stem(k1,f3),grid on
title('f(k-2)*u(k-2)');
axis([t1 t2 -1 4])
五.思考题
程序如下:
function [f,k]=lsxc(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;
stem(k,f)
axis([(min(min(k1),min(k2))-
1),(max(max(k1),max(k2))+1),(min(f),(max(f)+])
六、实验总结
通过这次试验不仅了解了许多常用函数,例如相加相乘、反折、平移,还学习和掌握了用MATLAB语言产生离散时间信号的编程方法,同时加深了对离散信号时域算法的理解,受益匪浅!!!。

相关主题