实验一 时域离散信号的产生
一、实验目的
1、了解常用时域离散信号及其特点;
2、掌握 MATLAB 程序的编程方法;
3、熟悉 MATLAB 函数的调用方法。
二、实验原理
在时间轴上的离散点取值的信号,称为离散时间信号。离散时间信号只在某些离散的
瞬时给出函数值,而在其他时刻无定义。它是时间上不连续按一定先后次序排列的一组数的
集合,称为时间序列,用 x(n)表示,n 取整数代表时间的离散时刻。
( )
n
在 MATLAB 中用向量来表示一个有限长度的序列。
常用离散信号:
1、单位抽样序列
1
n
0
n
2、单位阶跃序列
1
n
0
n
3、实指数序列
0
0
0
0
( -
u n n
0
n-n )=
(
或
( )
u n
)
或
0
1 n=n
0 n
0
n
0
1
n
0
n
n
0
n
0
( )
x n
n
a
4、复指数序列
( )
x n
(
)
j
e
t
5、正(余)弦序列
( )
x n U
m
6、随机序列
sin(
)
n
0
在利用计算机进行系统的研究时,经常需要产生随机信号,MATLAB 提供一个工具
函数 rand 来产生随机信号。
7、周期序列
( )
x n
(
x n N
)
三、实验用函数
1、stem
功能:绘制二维图形。
调用格式:
1
stem(n,x);n 为横轴,x 为纵轴的线性图形。
2、length
功能:计算某一变量的长度或采样点数。
调用格式:
N=length(t);计算时间向量 t 的个数并赋给变量 N。
3、axis
功能:限定图形坐标的范围。
调用格式:
axis([x1,x2,y1,y2]);横坐标从 x1—x2,纵坐标从 y1—y2。
4、zeros
功能:产生一个全 0 序列。
调用格式:
x=zeros(1,n);产生 n 个 0 的序列。
5、ones
功能:产生一个全 1 序列。
调用格式:
y=ones(1,n);产生 n 个 1 的序列。
四、实验任务
1、调试部分例题程序,掌握 Matlab 基本操作方法。
例 1.1 用 Matlab 产生单位抽样序列。
%先建立函数 impseq(n1,n2,n0)
function [x,n]=impseq(n1,n2,n0)
n=[n1:n2];
x=[(n-n0)==0];
%编写主程序调用该函数
[x,n]=impseq(-2,8,2);
stem(n,x)
程序运行结果如图 1-1 所示:
图 1-1 单位抽样序列
2
例 1.2 实数指数序列(运算符“.^”)
Matlab 程序如下:
n=[0:10];
x=0.9.^n;
stem(n,x)
程序运行结果如图 1-2 所示
图 1-2 实数指数序列
例 1.3 复数指数序列(
( )
x n
e
( 0.1
j
0.3)
n
( 10
)
10)
n
x=exp(alpha*n);
Matlab 程序如下:
n=[-10:10];
real_x=real(x);
mag_x=abs(x);
subplot(2,2,1);
subplot(2,2,2);
subplot(2,2,3);
subplot(2,2,4);
程序运行结果如图 1-3 所示
alpha=-0.1+0.3*j;
image_x=imag(x);
phase_x=angle(x);
stem(n,real_x)
stem(n,image_x)
stem(n,mag_x)
stem(n,phase_x)
3
图 1-3 复数指数序列
sin(
)
n
)
0
例 1.4 正、余弦序列(
( )
x n U
m
Matlab 程序如下:
n=[0:10];
x=3*cos(0.1*pi*n+pi/3);
stem(n,x)
程序运行结果如图 1-4 所示
图 1-4 正、余弦序列
例 1.5 随机序列
rand(1,N)产生其元素在[0,1]之间均匀分布长度为 N 的随机序列
randn(1,N)产生均值为 0,方差为 1,长度为 N 的高斯随机序列
例 1.6 周期序列
如何生成周期序列
1、 将一个周期复制 p 次;
2、借助矩阵运算、matlab 下标能力。先生成一个包含 p 列 x(n)值的矩阵,然后用结构(:)
来把 p 列串接成一个长周期序列。因为这个结构只能用于列向,最后还需要做矩阵转置获得
所需序列。
Matlab 程序如下:
x=[1,2,3];
xn=x'*ones(1,3)
%一个 x(n)
%生成 p 列 x(n)
4
xn=xn(:)'
stem(xn)
程序运行的结果如图 1-5 所示
%将 p 列串接成长列序列并转置
图 1-5 周期序列
2、编写程序,完成下列函数波形:
1)利用 zeros 函数生成单位抽样序列;
思路:
利用 zeros 函数和抽样点直接赋值来产生单位抽样序列,假设范围取上-5 到 5
代码:
%用zeros函数和抽样点直接赋值来产生单位抽样序列:范围从-5到5
n0=0; %n0表示在该处产生冲激,n0的值可以根据需求变动
n1=-5;n2=5;
n=n1:n2;
x=zeros(1,length(n));%生成离散信号x(n)
x(n0-(n1)+1)=1; %在该处产生冲激
stem(n,x,'filled'); %绘制脉冲杆图,其中’filled’表示散点用实心圆表示
axis([n1,n2,0,1.1*max(x)]); %确定横坐标和纵坐标的取值范围,其中纵坐标
为了美观,处理为处在1.1*所能达到的最大值,
title('单位脉冲序'); %表格标题
xlabel('时间(n)'); %横坐标标题
ylabel('幅度x(n)'); %纵坐标标题
5
结果:
2)利用 zeros 函数和 ones 函数生成单位阶跃序列;
思路:利用 zeros 和 ones 函数来产生单位阶跃序列,其中 zeros 负责冲激点前的函数表示,
ones 负责冲激点及其后的函数表示
代码:
%用zeros和ones函数来产生单位阶跃序列
n0=0; % n0表示在该处产生单位阶跃的转折点,n0的取值可以根据需求变动
n1=-5;n2=5;
n=n1:n2;
x=[zeros(1,n0-n1),ones(1,n2-n0+1)];
stem(n,x,'filled');
axis([n1,n2,0,1.1*max(x)])
title('单位脉冲序');
xlabel('时间(n)');
ylabel('幅度x(n)');
结果:
6
实验二 离散序列的基本运算
一、实验目的
1、加强 MATLAB 运用。
2、了解离散时间序列在时域中的基本运算。
3、熟悉相关函数的使用方法,掌握离散序列运算程序的编写方法。
二、实验原理
离散序列的时域运算包括信号的相加、相乘,信号的时域变换包括信号的移位、反折、
倒相及尺度变换等。
在 MATLAB 中,序列的相加和相乘运算是两个向量之间的运算,因此参加运算的两个
序列必须具有相同的长度,否则不能直接进行运算,需要进行相应的处理后再进行运算。
三、实验用函数
1、find
功能:寻找非零元素的索引号。
调用格式:
find((n>=min(n1))&(n<=max(n1))):在符号关系运算条件的范围内寻找非零元素的索引
号。
2、fliplr
功能:对矩阵行元素进行左右翻转。
调用格式:
x1=fliplr(x):将 x 的行元素进行左右翻转,赋给变量 x1。
四、实验任务
1、理解序列运算的性质,了解函数语句的意义。
(1)信号的时域变换
1)序列移位
function [y,n]=sigshift(x,m,n0)
n=m+n0;
y=x;
2)序列反折
function [y,n]=sigfold(x,n)
y=fliplr(x);
n=-fliplr(n);
3)序列倒相
function [y,n]=sig3(x,n)
y=-x;
4)序列的尺度变换
function [x,n]=sig4(x,n0)
n=4*n0;
(2)序列的算术运算
1)序列相加
7