《信号与系统》实验指导书
实验一 利用MATLAB进行信号的表示及运算
一、实验目的
1、学会用MATLAB表示常用连续或离散信号的方法; 2、学会用MATLAB进行信号基本运算的方法。
二、实验原理及内容
1、连续信号的MATLAB表示
MATLAB提供了大量的生成基本信号的函数。最常用的信号是正(余)弦信号,它是MATLAB的内部函数,即使不安装任何工具箱也可直接调用。
(1)指数信号
指数信号eat在MATLAB中用exp函数表示。首先,按照需要在一定时间范围内生成一些时间点,然后调用该函数计算这些点的函数值,最后画出其波形图即可。其程序及波形如下:
A=1;a=-0.4; t=0:0.001:10; ft=A*exp(a*t); plot(t,ft)
(2)正弦信号
正弦信号的产生方法与指数信号类似,其程序及波形如下: A=1; w0=2*pi; phi=pi/6; t=0:0.001:8; ft=A*sin(w0*t+phi); plot(t,ft)
axis([0,2,-1.2,1.2]); (3)抽样信号
抽样信号Sa(t)在MATLAB中用sinc函数表示,其定义为
sinc(t)?sin(?t)/(?t)
第 1 页 共 32 页
图1-2 正弦信号波形 图1-1 指数信号波形
《信号与系统》实验指导书
其程序及波形如下:
t=-3*pi:pi/100:3*pi; ft=sinc(t/pi); plot(t,ft);
axis([-10,10,-0.5,1.2]);
(4)矩形脉冲信号
矩形脉冲信号在MATLAB中可调用rectpuls函数产生,其调用格式为
y?rectpuls(t,width)
图1-3 抽样信号波形
用以产生一个幅度为1,宽度为width且以t=0为对称轴的矩形波。Width的默认值为1。其程序及波形如下:
t=0:0.001:4; T=1;
ft=rectpuls(t-2*T,T); plot(t,ft); axis([0,4,0,1.5])
(5)三角波脉冲信号
三角波脉冲信号在MATLAB中可调用tripuls函数产生,其调用格式为
y?tripuls(t,width,skew)
图1-4 矩形脉冲信号波形
用以产生一个幅度为1,宽度为width的三角波。其程序及波形如下:
t=-3:0.001:3; ft=tripuls(t,4,0.5); plot(t,ft);
第 2 页 共 32 页
图1-5 三角波信号波形
《信号与系统》实验指导书
2、离散信号的MATLAB表示 (1)指数序列
离散指数序列的形式为ak,可以用MATLAB中的数组幂运算a.?k实现。其程序及波形如下:
k=0:10;A=1;a=-0.6; fk=A*a.^k; stem(k,fk,’.’); axis([-1,11,-1,1.2]);
(2)正弦序列
离散正弦序列的MATLAB产生方法与连续信号相同,但图形显示方法不同,是用stem函数画出的。其程序及波形如下:
k=0:39; fk=sin(pi/6*k); stem(k,fk,’.’); axis([-1,40,-1.5,1.5])
(3)单位阶跃序列
单位阶跃序列是时间无限的序列,而计算机只能表示有限的序列,所以MATLAB只能在有限的时间范围内产生近似的单位阶跃序列。其程序及波形如下:
k=-50:50;
uk=[zeros(1,50),ones(1,51)]; stem(k,uk,'.'); axis([-60,60,0,1.5])
第 3 页 共 32 页
图1-8 单位阶跃序列信号波形 图1-7 正弦序列信号波形 图1-6 指数序列信号波形
《信号与系统》实验指导书
3、信号基本运算的MATLAB实现 (1)信号的尺度变换、翻转、平移
信号的尺度变换、翻转、平移运算,实际上是函数自变量的运算。在信号的尺度变换f(at)和f[Mk]中,函数的自变量乘以一个常数,在MATLAB中可用算术运算符“*”来实现。在信号翻转f(?t)和f[?k]运算中,函数的自变量乘以一个负号,在MATLAB中可以直接写出。在信号平移f(t?t0)和f[k?k0]运算中,在MATLAB中可用算术运算符“+”或“-”来实现。对于图1-5所示的三角波,f(2t)和f(2?2t)的程序和波形如下:
t=-3:0.001:3; ft=tripuls(t,4,0.5); subplot(3,1,1); plot(t,ft); title('f(t)');
ft1=tripuls(2*t,4,0.5); subplot(3,1,2); plot(t,ft1); title('f(2t)');
ft2=tripuls(2-2*t,4,0.5); subplot(3,1,3); plot(t,ft2); title('f(2-2t)')
(2)离散序列的差分与求和
离散序列的差分?f[k]?f[k]?f[k?1],在MATLAB中用diff函数来计算。离散序列的求和?f[k]运算与离散序列的相加运算不同,离散序列的相加运算是把不同离散序列进行相加,而离散序列的求和是将某时刻范围内的所有该序列值进行相加,在MATLAB中用sum函数来计算。
例1-1 用MATLAB计算指数信号(?0.6)ku[k](0?k?10)的能量。 解:离散信号的能量定义为
E?lim图1-9 信号的变换
N??k??N?Nf[k]
第 4 页 共 32 页