信号与系统实验报告.docx
《信号与系统实验报告.docx》由会员分享,可在线阅读,更多相关《信号与系统实验报告.docx(29页珍藏版)》请在冰豆网上搜索。
信号与系统实验报告
实验三 常见信号的MATLAB表示及运算
一、实验目的
1.熟悉常见信号的意义、特性及波形
2.学会使用MATLAB表示信号的方法并绘制信号波形
3.掌握使用MATLAB进行信号基本运算的指令
4.熟悉用MATLAB实现卷积积分的方法
二、实验原理
根据MATLAB的数值计算功能和符号运算功能,在MATLAB中,信号有两种表示方法,一种是用向量来表示,另一种则是用符号运算的方法。
在采用适当的MATLAB语句表示出信号后,就可以利用MATLAB中的绘图命令绘制出直观的信号波形了。
1.连续时间信号
从严格意义上讲,MATLAB并不能处理连续信号。
在MATLAB中,是用连续信号在等时间间隔点上的样值来近似表示的,当取样时间间隔足够小时,这些离散的样值就能较好地近似出连续信号。
在MATLAB中连续信号可用向量或符号运算功能来表示。
⑴向量表示法
对于连续时间信号,可以用两个行向量f和t来表示,其中向量t是用形如的命令定义的时间范围向量,其中,为信号起始时间,为终止时间,p为时间间隔。
向量f为连续信号在向量t所定义的时间点上的样值。
⑵符号运算表示法
如果一个信号或函数可以用符号表达式来表示,那么我们就可以用前面介绍的符号函数专用绘图命令ezplot()等函数来绘出信号的波形。
⑶常见信号的MATLAB表示
单位阶跃信号
单位阶跃信号的定义为:
方法一:
调用Heaviside(t)函数
首先定义函数Heaviside(t)的m函数文件,该文件名应与函数名同名即Heaviside.m。
%定义函数文件,函数名为Heaviside,输入变量为x,输出变量为y
functiony=Heaviside(t)
y=(t>0);%定义函数体,即函数所执行指令
%此处定义t>0时y=1,t<=0时y=0,注意与实际的阶跃信号定义的区别。
方法二:
数值计算法
在MATLAB中,有一个专门用于表示单位阶跃信号的函数,即stepfun()函数,它是用数值计算法表示的单位阶跃函数。
其调用格式为:
stepfun(t,t0)
其中,t是以向量形式表示的变量,t0表示信号发生突变的时刻,在t0以前,函数值小于零,t0以后函数值大于零。
有趣的是它同时还可以表示单位阶跃序列,这只要将自变量以及取样间隔设定为整数即可。
符号函数
符号函数的定义为:
在MATLAB中有专门用于表示符号函数的函数sign(),由于单位阶跃信号(t)和符号函数两者之间存在以下关系:
,因此,利用这个函数就可以很容易地生成单位阶跃信号。
2.离散时间信号
离散时间信号又叫离散时间序列,一般用表示,其中变量k为整数,代表离散的采样时间点(采样次数)。
在MATLAB中,离散信号的表示方法与连续信号不同,它无法用符号运算法来表示,而只能采用数值计算法表示,由于MATLAB中元素的个数是有限的,因此,MATLAB无法表示无限序列;另外,在绘制离散信号时必须使用专门绘制离散数据的命令,即stem()函数,而不能用plot()函数。
单位序列
单位序列)的定义为
单位阶跃序列
单位阶跃序列的定义为
3.卷积积分
两个信号的卷积定义为:
MATLAB中是利用conv函数来实现卷积的。
功能:
实现两个函数和的卷积。
格式:
g=conv(f1,f2)
说明:
f1=f1(t),f2=f2(t) 表示两个函数,g=g(t)表示两个函数的卷积结果。
三、实验内容
1.分别用MATLAB的向量表示法和符号运算功能,表示并绘出下列连续时间信号的波形:
⑴⑵
(1)t=-1:
0.01:
10;
t1=-1:
0.01:
-0.01;
t2=0:
0.01:
10;
f1=[zeros(1,length(t1)),ones(1,length(t2))];
f=(2-exp(-2*t)).*f1;
plot(t,f)
axis([-1,10,0,2.1])
symst;
f=sym('(2-exp(-2*t))*heaviside(t)');
ezplot(f,[-1,10]);
(2)
t=-2:
0.01:
8;
f=0.*(t<0)+cos(pi*t/2).*(t>0&t<4)+0.*(t>4);
plot(t,f)
symst;
f=sym('cos(pi*t/2)*[heaviside(t)-heaviside(t-4)]');
ezplot(f,[-2,8]);
2.分别用MATLAB表示并绘出下列离散时间信号的波形:
⑵ ⑶
(2)t=0:
8;
t1=-10:
15;
f=[zeros(1,10),t,zeros(1,7)];
stem(t1,f)
axis([-10,15,0,10]);
(3)t=0:
50;
t1=-10:
50;
f=[zeros(1,10),sin(t*pi/4)];
stem(t1,f)
axis([-10,50,-2,2])
3.已知两信号,,求卷积积分,并与例题比较。
t1=-1:
0.01:
0;
t2=0:
0.01:
1;
t3=-1:
0.01:
1;
f1=ones(size(t1));
f2=ones(size(t2));
g=conv(f1,f2);
subplot(3,1,1),plot(t1,f1);
subplot(3,1,2),plot(t2,f2);
subplot(3,1,3),plot(t3,g);
与例题相比较,g(t)的定义域不同,最大值对应的横坐标也不同。
4.已知,求两序列的卷积和。
N=4;
M=5;
L=N+M-1;
f1=[1,1,1,2];
f2=[1,2,3,4,5];
g=conv(f1,f2);
kf1=0:
N-1;
kf2=0:
M-1;
kg=0:
L-1;
subplot(1,3,1),stem(kf1,f1,'*k');xlabel('k');
ylabel('f1(k)');gridon
subplot(1,3,2),stem(kf2,f2,'*k');xlabel('k');
ylabel('f2(k)');gridon
subplot(1,3,3);stem(kg,g,'*k');xlabel('k');
ylabel('g(k)');gridon
实验心得:
第一次接触Mutlab这个绘图软件,觉得挺新奇的,同时,由于之前不太学信号与系统遇到一些不懂的问题,结合这些图对信号与系统有更好的了解。
实验四 连续时间信号的频域分析
一、 实验目的
1.熟悉傅里叶变换的性质
2.熟悉常见信号的傅里叶变换
3.了解傅里叶变换的MATLAB实现方法
二、 实验原理
从已知信号求出相应的频谱函数的数学表示为:
傅里叶反变换的定义为:
在MATLAB中实现傅里叶变换的方法有两种,一种是利用MATLAB中的SymbolicMathToolbox提供的专用函数直接求解函数的傅里叶变换和傅里叶反变换,另一种是傅里叶变换的数值计算实现法。
1.直接调用专用函数法
①在MATLAB中实现傅里叶变换的函数为:
F=fourier(f) 对f(t)进行傅里叶变换,其结果为F(w)
F=fourier(f,v) 对f(t)进行傅里叶变换,其结果为F(v)
F=fourier(f,u,v) 对f(u)进行傅里叶变换,其结果为F(v)
②傅里叶反变换
f=ifourier(F) 对F(w)进行傅里叶反变换,其结果为f(x)
f=ifourier(F,U) 对F(w)进行傅里叶反变换,其结果为f(u)
f=ifourier(F,v,u) 对F(v)进行傅里叶反变换,其结果为f(u)
注意:
(1)在调用函数fourier()及ifourier()之前,要用syms命令对所有需要用到的变量(如t,u,v,w)等进行说明,即要将这些变量说明成符号变量。
对fourier()中的f及ifourier()中的F也要用符号定义符sym将其说明为符号表达式。
(2)采用fourier()及fourier()得到的返回函数,仍然为符号表达式。
在对其作图时要用ezplot()函数,而不能用plot()函数。
(3)fourier()及fourier()函数的应用有很多局限性,如果在返回函数中含有δ(ω)等函数,则ezplot()函数也无法作出图来。
另外,在用fourier()函数对某些信号进行变换时,其返回函数如果包含一些不能直接表达的式子,则此时当然也就无法作图了。
这是fourier()函数的一个局限。
另一个局限是在很多场合,尽管原时间信号f(t)是连续的,但却不能表示成符号表达式,此时只能应用下面介绍的数值计算法来进行傅氏变换了,当然,大多数情况下,用数值计算法所求的频谱函数只是一种近似值。
2、傅里叶变换的数值计算实现法
严格说来,如果不使用symbolic工具箱,是不能分析连续时间信号的。
采用数值计算方法实现连续时间信号的傅里叶变换,实质上只是借助于MATLAB的强大数值计算功能,特别是其强大的矩阵运算能力而进行的一种近似计算。
傅里叶变换的数值计算实现法的原理如下:
对于连续时间信号f(t),其傅里叶变换为:
其中τ为取样间隔,如果f(t)是时限信号,或者当|t|大于某个给定值时,f(t)的值已经衰减得很厉害,可以近似地看成是时限信号,则上式中的n取值就是有限的,假定为N,有:
若对频率变量ω进行取样,得:
通常取:
,其中是要取的频率范围,或信号的频带宽度。
采用MATLAB实现上式时,其要点是要生成f(t)的N个样本值的向量,以及向量,两向量的内积(即两矩阵的乘积),结果即完成上式的傅里叶变换的数值计算。
注意:
时间取样间隔τ的确定,其依据是τ必须小于奈奎斯特(Nyquist)取样间隔。
如果f(t)不是严格的带限信号,则可以根据实际计算的精度要求来确定一个适当的频率为信号的带宽。
三、实验内容
1.编程实现求下列信号的幅度频谱
(1) 求出的频谱函数F1(jω),请将它与上面门宽为2的门函数的频谱进行比较,观察两者的特点,说明两者的关系。
(2)三角脉冲
(3)单边指数信号
(4)高斯信号
(1)symstw
Gt=sym('Heaviside(2*t+1)-Heaviside(2*t-1)');
Fw=fourier(Gt,t,w);
FFw=maple('convert',Fw,'piecewise');
FFP=abs(FFw);
ezplot(FFP,[-10*pi10*pi]);grid;
axis([-10*pi10*pi02.2])
与的频谱比较,的频谱函数F1(jω)最大值是其的1/2。
(2)
symstw;
Gt=sym('(1+t)*(Heaviside(t+1)-Heaviside(t))+(1-t)*(Heaviside(t)-Heaviside(t-1))');
Fw=fourier(Gt,t,w);
FFw=maple('convert',Fw,'piecewise');
FFP=abs(FFw);
ezplot(FFP,[-10*pi10*pi]);grid;
axis([-10*p