资源描述
信号与系统
实验指导书
合肥师范学院物理与电子工程系
2011年8月
目 录
实验一 熟悉MATLAB软件 3
实验二 连续时间信号的运算 8
实验三 连续LTI系统的时域分析 11
实验四 连续系统的频域分析 17
实验五 信号抽样与恢复 25
实验六 信号的复频域分析 28
实验七 连续时间系统的复频域分析 31
实验一 熟悉MATLAB软件
一、实验目的
(1) 熟悉MATLAB主界面,并学会简单的菜单操作。
(2) 学会简单的矩阵输入与信号输入
(3) 掌握用MATLAB常用函数来产生信号并实现信号的可视化方法。
二、实验原理
1. 直接输入法创建矩阵
从键盘直接输入矩阵时,按矩阵行的顺序输入矩阵各元素,输入过程必须遵循以下规则:
a.矩阵的所有元素必须放在方括号“[]”内:
b.矩阵元素之间必须用逗号“,”或空格格开;
c.矩阵行与行之间必须用分号“;”或回车符格开。
2. 向量的生成
a. 利用冒号“:”运算生成向量,其语句格式有两种:
A=m:n
B=m:p:n
第一种格式用于生成步长为1的均匀等分向量,m和n分别代表向量的起始值和终止值,n>m 。第二种格式用于生成步长为p的均匀等分的向量。
b. 利用函数linspace()生成向量,linspace()的调用格式为:
A=linspace(m,n)
B=linspace(m,n,s)
第一种格式生成从起始值m开始到终止值n之间的线性等分的100元素的行向量。第二种格式生成从起始值m开始到终止值n之间的s个线性等分点的行向量。
3. 二维曲线的绘制plot()函数
plot()函数是将各个数据点通过连折线的方式来绘制二维图形的,其命令格式有以下几种:
a. plot(y)当y为向量时,以y的序号作为X轴,按向量y的值绘制曲线。
b. plot(x,y)x,y均为向量时,以x向量作为X轴,向量y作为Y轴绘制曲线。
c. plot(x,y1,’option1’,x,y2,’option2’,……)以公共的x向量作为X轴,分别以向量y1,y2……的数据绘制多条曲线,每条曲线的属性由相应的‘option’来确定。Option选项可以是表示曲线颜色的字符、表示线型格式的符号和表示数据点的标记,各个选项有的可以连在一起使用。
d. plot(x1,y1,’option1’,x2,y2,’option2’,……)分别以向量x1,x2,……作为X轴,以y1,y2,……的数据绘制多条曲线,每条曲线的属性由相应的选项‘option’来确定。
符号
颜色
符号
线型
符号
标记
符号
标记
‘b’
蓝色
‘-’
实线
‘.’
点
‘d’
◇
‘g’
绿色
‘:’
虚线
‘o’
圆圈
‘ˇ’
▽
‘m’
品红
-.
点画线
‘x’
叉号
‘^’
△
‘c’
青色
‘--’
双画线
‘+’
加号
‘<’
左三角
‘k’
黑色
‘none’
无线
‘*’
星号
‘>’
右三角
‘r’
红色
‘s’
□
‘p’
五角星
‘y’
黄色
‘h’
六角星
表1plot函数中option选项的取值和含义
三、实验内容
1. 熟悉简单的矩阵和向量输入
1)从屏幕上输入矩阵A=[1 2 3;4 5 6;7 8 9]或A=[1,2,3;4,5,6;7,8,9]观察输出结果。
2)从屏幕上输入向量x=0:0.1:1和y=linspace(0,1,10)观察输出结果,注意区别。
3)再试着输入一些矩阵,矩阵中的元素可为任意数值表达式,但注意矩阵中各行各列的元素个数需分别相等,否则会给出出错信息。
2.基本矩阵运算
1)矩阵加减乘除和乘方运算
a.输入A=[1 2 3;4 5 6],B=[2 4 6;1 2 3],C=[2;3;4],求X=A+B,Y=A-B,Z=A*C观察结果。
b.输入A=[1 1 1;2 2 2;3 3 3],求A^2。
c.解线性方程组,输入A=[2 3 1;1 -2 2;3 -1 -3],B=[11;3;8],计算C=A\B,D=B’/A’。
2)数组乘除和乘方运算
输入A=[1 2 3;4 5 6],B=[2 4 6;1 2 3]求C=A.*B,D=A./B,E=A.\B,F=A.^B。再输入一些数组,进行类似运算。
3. 验证下列程序
MATLAB提供了许多函数用于常用函数的产生,如阶跃信号,脉冲信号,指数信号、正弦信号和周期方波等,这些函数都是信号处理的基础。
从严格意义上讲,MATLAB并不能处理连续信号。在MATLAB中是用连续信号在等间隔时间的样值来近似表示连续信号的。当取样时间间隔足够小时,这些离散的样点就能够狠好地近似出连续信号。
表示连续时间信号有两种方法,一是数值法,二是符号法。数值法是定义某一时间范围和取样时间间隔,然后调用该函数计算这些点的函数值,得到两组数值矢量,可用绘图语句画出其波形;符号法是利用MATLAB的符号运算功能,需定义符号变量和符号函数,运算结果是符号表达的解析式,也可用绘图语句画出其波形图。
例1-1指数信号 指数信号在MATLAB中用exp函数表示。
如,调用格式为 ft=A*exp(a*t) 程序是
A=1; a=-0.4;
t=0:0.01:10; %定义时间点
ft=A*exp(a*t); %计算这些点的函数值
plot(t,ft); %画图命令,用直线段连接函数值表示曲线
grid on; %在图上画方格
例1-2 正弦信号 正弦信号在MATLAB中用 sin 函数表示。
调用格式为 ft=A*sin(w*t+phi)
A=1; w=2*pi; phi=pi/6;
t=0:0.01:8; %定义时间点
ft=A*sin(w*t+phi); %计算这些点的函数值
plot(t,ft); %画图命令
grid on; %在图上画方格
例1-3 抽样信号 抽样信号Sa(t)=sin(t)/t在MATLAB中用 sinc 函数表示。
定义为
t=-3*pi:pi/100:3*pi;
ft=sinc(t/pi);
plot(t,ft);
grid on;
axis([-10,10,-0.5,1.2]); %定义画图范围,横轴,纵轴
title('抽样信号') %定义图的标题名字
例1-4 三角信号 三角信号在MATLAB中用 tripuls 函数表示。
调用格式为 ft=tripuls(t,width,skew),产生幅度为1,宽度为width,且以0为中心左右各展开width/2大小,斜度为skew的三角波。width的默认值是1,skew的取值范围是-1~+1之间。一般最大幅度1出现在t=(width/2)*skew的横坐标位置。
t=-3:0.01:3;
ft=tripuls(t,4,0.5);
plot(t,ft); grid on;
axis([-3,3,-0.5,1.5]);
例1-5 虚指数信号 调用格式是f=exp((j*w)*t)
t=0:0.01:15;
w=pi/4;
X=exp(j*w*t);
Xr=real(X); %取实部
Xi=imag(X); %取虚部
Xa=abs(X); %取模
Xn=angle(X); %取相位
subplot(2,2,1),plot(t,Xr),axis([0,15,-(max(Xa)+0.5),max(Xa)+0.5]),
title('实部');
subplot(2,2,3),plot(t,Xi),axis([0,15,-(max(Xa)+0.5),max(Xa)+0.5]),
title('虚部');
subplot(2,2,2), plot(t,Xa),axis([0,15,0,max(Xa)+1]),title('模');
subplot(2,2,4),plot(t,Xn),axis([0,15,-(max(Xn)+1),max(Xn)+1]),title('相角');
%subplot(m,n,i) 命令是建立m行n列画图窗口,并指定画图位置i
例1-6 复指数信号 调用格式是f=exp((a+j*b)*t)
t=0:0.01:3;
a=-1;b=10;
f=exp((a+j*b)*t);
subplot(2,2,1),plot(t,real(f)),title('实部')
subplot(2,2,3),plot(t,imag(f)),title('虚部')
subplot(2,2,2),plot(t,abs(f)),title('模')
subplot(2,2,4),plot(t,angle(f)),title('相角')
例1-7 矩形脉冲信号 矩形脉冲信号可用rectpuls函数产生,
调用格式为y=rectpuls(t,width),幅度是1,宽度是width,以t=0为对称中心。
t=-2:0.01:2;
width=1;
ft=2*rectpuls(t,width);
plot(t,ft)
grid on;
例1-8 单位阶跃信号 单位阶跃信号u(t)用“t>=0”产生,调用格式为ft=(t>=0)
t=-1:0.01:5;
ft=(t>=0);
plot(t,ft); grid on;
axis([-1,5,-0.5,1.5]);
四、程序设计实验
编制程序,生成如下连续信号:
(1) (2)
五、实验预习要求
(1)预习实验原理
(2)熟悉实验程序
(3)思考程序设计实验部分程序的编写
六、实验报告要求
(1)在MATLAB中输入程序,验证实验结果,并将实验结果输出。
(2)对于程序设计实验,要求通过对验证性实验的练习,自行编制完整的实验程序,实现对信号的模拟,并得出实验结果。
(3)在实验报告中写出完整的自编程序,并给出实验结果。
七、思考题
(1)冲激信号与阶跃信号各有什么特性,在本实验的程序中是如何实现冲激信号的特性的?
(2)书中实验sinc(x)函数的程序是调用MATLAB中的sinc(x)函数,如果用正弦函数实现,sinc(x)=sin(x)/x,程序如何编写?
实验二 连续时间信号的运算
一、实验目的
1.掌握符号函数的绘制。
2.熟悉信号的时域运算和变换及MATLAB实现。
3.利用卷积生成新的波形,建立波形间的联系。
二、实验原理
(一)、符号对象的创建
1.定义符号变量
声明符号变量的语句是:syms 变量名列表 其中各个变量名用空格分隔。或者用:sym(’变量名’)来创建符号变量。
2.定义符号表达式和符号方程
符号表达式和符号方程的创建方式相同,都可以使用f= sym(’变量名’)或者f=’表达式’来创建,它们的区别是符号表达式不包含等号“=”,而符号方程必须带等号。
(二)、符号函数的可视化
MATLAB提供了ezplot()函数绘制符号函数的图形,绘制一维函数的调用格式有一下几种:
a、ezplot(f) 对于符号函数f=f(x),按照默认的x的范围:-2*pi<x<2*pi,在图形窗口中绘制出f=f(x)。
b、ezplot(f,[a,b]) 在图形窗口中绘制出f=f(x)的图形,x的范围由[a,b]确定。
(三)、连续信号的时域运算与时域变换
1.相加 连续信号的相加,是指两信号对应时刻值相加,可以使用下列命令得到符号函数f1与符号函数f2的和信号的符号函数。
s=symadd(f1,f2)或s=f1+f2
2.相乘 连续信号的相乘,是指两信号对应时刻值相乘,可以使用下列命令得到符号函数f1与符号函数f2的积信号的符号函数。
w=symmul(f1,f2)或w=f1*f2
3.平移 对于连续信号f(t),信号f(t-t0)是原信号在t轴平移的结果,可以使用subs命令将连续信号中的时间变量t用t-t0替换:
y=subs(f,t,t0)
4.反褶 反褶是将信号f(t)中的自变量t换为-t,同样可以使用subs命令来实现:
y=subs(f,t,-t)
5.比例变换 比例变换是将信号f(t)中的自变量t换为at,当a>1时,信号f’(at)沿横轴压缩到原来的1/a;当a<1时,信号f(at)沿横轴展宽到原来的a倍。同样可以使用subs命令来实现:
y=subs(f,t,a*t)
(四)、连续时间信号卷积及MATLAB实现
连续时间信号f1(t)和f2(t)的卷积积分定义为:
用MATLAB实现卷积积分的过程如下:
1)将连续信号f1(t)和f2(t)以时间间隔△进行取样,得到离散序列f1(k△)和f2(k△);
2)构造与f1(k△)和f2(k△)相对应的时间向量k1和k2;
3)调用conv()函数计算卷积积分f(t)的近似向量f(n△);
4)构造f(n△)对应的时间向量k。
下面是利用MATLAB实现连续信号卷积的通用函数sconv(),该程序在计算出卷积积分的数值近似的同时,还绘出f(t)的时域波形图。建立如下的m文件:
function [f,k]=sconv(f1,f2,k1,k2,p)
%计算连续信号卷积积分f(t)=f1(t)*f2(t)
%f:卷积积分f(t)对应的非零样值向量
%k:f(t)的对应时间向量
%f1:f1(t)的非零样值向量
%f2:f2(t)的非零样值向量
%k1:f1(t)的对应时间向量
%k2:序列f2(t)的对应时间向量
%p:取样时间间隔
f=conv(f1,f2); %计算序列f1和f2的卷积和f
f=f*p;
k0=k1(1)+k2(1); %计算序列f非零样值的起点位置
k3=length(f1)+length(f2)-2; %计算卷积和f的非零样值的宽度
k=k0:p:k3*p; %确定卷积和f非零样值的时间向量
%在第一个子图画图f1(t)的波形
subplot(2,2,1);plot(k1,f1);title(‘f1(t)’);xlabel(‘t’);ylabel(‘f1(t)’);
%在第二个子图画图f2(t)的波形
subplot(2,2,2);plot(k2,f2);title(‘f2(t)’);xlabel(‘t’);ylabel(‘f2 (t)’);
%画卷积f(t)的波形
subplot(2,2,3);plot(k,f);
%将第三个子图的横坐标范围扩为原来的2.5倍
h=get(gca,’position’);
h(3)=2.5*h(3);
set(gca,’position’,h); title(‘f(t)=f1(t)*f2(t)’);xlabel(‘t’);ylabel(‘f (t)’);
三、实验内容
1.连续信号的时域运算和时域变换
1)设信号f(t)=(1+t/2)*[u(t+2)-u(t-2)],求f(t+2),f(t-2),f(-t),f(2t)和f(-3t-2),并画出其时域波形。(MATTLAB符号数学函数Heaviside表示阶跃信号)
2)已知信号f1(t)=(-t+4)[u(t)-u(t-4)]和信号f2(t)=sin(2*pi*t),求f3(t)=f1(t)+f2(t)和f4(t)=f1(t)×f2(t),并画出波形。
2.连续信号的卷积计算
1)两个连续信号f1(t)和f2(t)的图形如下,用MATLAB计算卷积f(t)=f1(t)*f2(t),并绘出f(t)的时域波形。
2)用MATLAB计算信号f1(t)=e-2tu(t)和f2(t)=e-tu(t)的卷积,并绘出f(t)的时域波形。
四、实验预习要求
(1)预习实验原理
(2)熟悉实验程序
(3)思考程序设计实验部分程序的编写
五、实验报告要求
(1)在MATLAB中输入程序,验证实验结果,并将实验结果输出。
(2)对于程序设计实验,要求通过对验证性实验的练习,自行编制完整的实验程序,实现对信号的模拟,并得出实验结果。
(3)在实验报告中写出完整的自编程序,并给出实验结果。
六、思考题
1.subplot()函数的功能是什么?
2.创建的连续信号卷积函数sconv(),对参数p对结果有什么影响?
实验三 连续LTI系统的时域分析
一、实验目的
(1)熟悉连续LTI系统的典型激励信号下的响应及其特征。
(2)掌握连续LTI系统单位冲激响应的求解方法。
(3)重点掌握用卷积法计算连续时间系统的零状态响应。
(4)熟悉MATLAB相关函数的调用格式及作用。
(5)会用MATLAB对系统进行时域分析。
二、实验原理
在MATLAB中LTI系统控制中,系统的描述常用sys对象来描述,这时sys即表示LTI系统。无论连续还是离散系统都可以采用系统函数、零极点和状态变量的方法进行描述。MATLAB中常用下面函数创建LTI系统对象sys
sys=tf(num,den) %创建连续系统对象sys,num为系统函数分子多项式的描述,den为系统函数分母多项式的描述。
sys=tf(num,den,ts) %创建离散系统对象sys,num为系统函数分子多项式的描述,den为系统函数分母多项式的描述。ts为取样间隔,当ts=-1,表示取样间隔未定。
sys=zpk(z,p,k) %创建离散系统对象sys,其中z向量表示此系统零点,p向量表示此系统极点,k表示系统增益H0。
sys=zpk(z,p,k,ts) %创建离散系统对象sys,其中z向量表示此系统零点,p向量表示此系统极点,k表示系统增益H0。ts为取样间隔,当ts=-1,表示取样间隔未定。
sys=ss(A,B,C,D) %创建连续系统对象sys,此系统用状态变量描述。
sys=ss(A,B,C,D,ts) %创建离散系统对象sys,此系统用状态变量描述。ts为取样间隔,当ts=-1,表示取样间隔未定。
连续时间系统线性非时变系统(LTI)可以用如下的线性常系统微分方程来描述:
其中,,系统的初始条件为。
系统的响应一般包括两个部分,即由当前输入所产生的响应(零状态响应)和由历史输入(初始状态)所产生的响应(零输入响应)。对于低阶系统,一般可以通过解析的方法得到响应。但对于高阶系统,手工计算就比较困难,这时MATLAB强大的计算功能就能比较容易地确定系统的各种响应,如冲激响应、阶跃响应、零输入响应、零状态响应、全响应等。
1.直接求解法
在MATLAB中,要求以系统向量的形式输入系统的微分方程。因此,在使用前必须对系统的微分方程进行变换,得到其传递函数。其分别用向量a和b表示分母多项式和分子多项式的系数(按照s的降幂排列)。涉及到的MATLAB函数有:impulse(冲激响应函数)、step(阶跃响应函数)、initial(初始状态响应函数),lsim(任意输入的系统响应函数)等。调用格式如下:
initial(sys,x0,t)
其中sys为输入的状态空间模型;x0为给定的初始状态;t为指定仿真计算状态响应的时间区间变量(数组)。
step(sys,t)
其中sys为输入的状态空间模型,t为指定仿真计算状态响应的时间区间变量(数组)。
lsim(sys,u,t,x0)
其中sys为输入的状态空间模型,t为时间坐标数组,u是输入信号u(t)对应于时间坐标数组t的各时刻输入信号采样值组成的数组,是求解系统响应必须给定的;x0是初始状态向量,当输入的sys为传递函数模型时,x0不起作用,可以缺省。
2.卷积计算法
根据系统的单位冲激响应,利用卷积计算的方法,也可以计算任意输入状态下系统的零状态响应。设一个线性零状态系统,已知系统的单位冲激相应为h(t),当系统的激励信号为f(t)时,系统的零状态响应为:
也可简单记为
由于计算机采用的是数值计算,因此系统的零状态响应也可用离散序列卷积和近似为:
式中、和分别对用以T为时间间隔对连续时间信号、和进行采样所得到的离散序列。
【例一】求系统的冲激响应和阶跃响应。
(1)系统的冲激响应的MATLAB程序如下:
b=[3,9];a=[1,6,8];
sys=tf(b,a);
t=0:0.1:10;
y=impulse(sys,t);
plot(t,y) ;
xlabel(‘时间(t)’) ;ylabel(‘y(t)’) ;title(‘单位冲激响应’);
系统的冲激响应曲线如图所示:
(2)系统的阶跃响应的MATLAB程序如下:
b=[3,9];a=[1,6,8];
sys=tf(b,a);
t=0:0.1:10;
y=step(sys,t);
plot(t,y) ;
xlabel(‘时间(t)’) ;ylabel(‘y(t)’) ;title(‘单位阶跃响应’);
系统的阶跃响应曲线如图所示:
【例二】求系统的全响应。
(1)系统在正弦激励下的零状态响应。
MATLAB程序如下:
b=[1] ;a=[1,0,1] ;
sys=tf(b,a) ;
t=0 :0.1 :10 ;
x=cos(t);
y=lsim(sys,x,t) ;
plot(t,y) ;
xlabel(‘时间’);ylabel(‘y(t)’) ;title(‘零状态响应’);
系统的零状态响应曲线如图所示。
(2)系统的全响应。
MATLAB程序如下:
b=[1] ;a=[1,0,1] ;
[A B C D]=tf2ss(b,a) ;
sys=ss(A,B,C,D);
t=0 :0.1 :10 ;
x=cos(t);zi=[-1,0] ;
y=lsim(sys,x,t,zi) ;
plot(t,y) ;
xlabel(‘时间’);ylabel(‘y(t)’) ;title(‘系统的响应’);
系统的全响应曲线如图所示。
【例三】已知某LTI系统的激励为,单位冲激响应为,试画出激励信号,单位冲激响应,系统零状态响应的图形。
MATLAB程序如下:
T=0.1;
t=0:T:10;
f=3.*t.*sin(t);
h=t.*exp(-2*t);
lf=length(f);
lh=length(h);
for k=1:lf+lh-1
y(k)=0;
for i=max(1,k-(lh-1)):min(k,lf)
y(k)=y(k)+f(i)*h(k-i+1);
end
yzsappr(k)=T*y(k);
end
subplot(3,1,1);
plot(t,f);title('f(t)');
subplot(3,1,2);
plot(t,h);title('h(t)');
subplot(3,1,3);
plot(t,yzsappr(1:length(t)));title('零状态响应近似结果');xlabel('时间');
系统的响应曲线如图所示。
三、程序设计
(1)计算下述系统在指数函数激励下的零状态响应。
(2)计算下述系统在冲激、阶跃、斜坡和正弦激励下的零状态响应。
(3)已知某线性时不变系统的动态方程式为:
系统的初始状态为,求系统的零输入响应。
四、实验预习要求
(1)预习实验原理。
(2)熟悉实验程序。
(3)思考程序设计实验部分程序的编写。
五、实验报告要求
(1)在MATLAB中输入程序,验证实验结果,并将实验结果存入指定存储区域中。
(2)对于程序设计实验,要求通过对验证性实验的练习,自行编制完整的实验程序,实现对信号的模拟,并得到实验结果。
(3)在实验报告中写出完整的自编程序,并给出实验结果。
六、思考题
(1)连续时间系统的数学模型有哪些?
(2)线性时不变系统的零状态响应是输入信号与冲激响应的卷积,其根据是什么?
实验四 连续系统的频域分析
一、实验目的
(1)掌握连续时间信号的傅里叶变换和傅里叶逆变换的实现方法。
(2)掌握傅里叶变换的数值计算方法和绘制信号频谱的方法。
二、实验原理
1.周期信号的分解
根据傅里叶级数的原理,任何周期信号都可以分解为三角级数的组合——称为的傅里叶级数。在误差确定的前提下,可以由一组三角函数的有限项叠加而得到。
例如一个方波信号可以分解为:
合成波形所包含的谐波分量越多,除间断点附近外,它越接近于原波形,在间断点附近,即使合成的波形所含谐波次数足够多,也任存在约的偏差,这就是吉布斯现象(Gibbs)。
2.连续时间信号傅里叶变换的数值计算
由傅里叶变换的公式:
当为时限信号时,上式中的取值可以认为是有限项,则有:
,其中
3.系统的频率特性
连续LTI系统的频率特性称为频率响应特性,是指在正弦信号激励作用下稳态响应随激励信号频率的变化而变化的情况,表示为
三、实验内容与方法
1.周期信号的分解
【例1】用正弦信号的叠加近似合成一个频率为的方波。
MATLAB程序如下:
clear all;
fs=10000;
t=[0:1/fs:0.1];
f0=50;sum=0;
subplot(211)
for n=1:2:9
plot(t,4/pi*1/n*sin(2*pi*n*f0*t),’k’);
hold on;
end
title(‘信号叠加前’);
subplot(212)
for n=1:2:9;
sum=sum+4/pi*1/n*sin(2*pi*n*f0*t);
end
plot(t,sum,’k’);
title(‘信号叠加后’);
产生的波形如图所示:
2.傅里叶变换和逆变换的实现
求傅里叶变换,可以调用fourier函数,调用格式为F=fourier(f,u,v),是关于u的函数f的傅里叶变换,返回函数F是关于v的函数。
求傅里叶逆变换,可以调用ifourier函数,调用格式为f=ifourier(F,v,u),是关于v的函数F的傅里叶逆变换,返回函数f是关于u的函数。
【例2】已知连续信号,通过程序完成其傅里叶变换。
MATLAB程序如下:
syms t;
f=fourier(exp(-2*abs(t)));
ezplot(f) ;
得到的傅里叶变换如图所示:
【例3】已知连续信号,通过程序完成其傅里叶逆变换。
MATLAB程序如下:
syms t w
ifourier(1/(1+w^2),t)
得到的结果为:ans =1/2*exp(-t)*heaviside(t)+1/2*exp(t)*heaviside(-t)
图形如图所示:
3.傅里叶变换的性质
举例联系傅里叶变换的时移特性和频移特性。
【例4】分别绘出信号和的频谱,求的频谱。
MATLAB程序如下:
r=0.02;t=-5:r:5;N=200;W=2*pi;k=-N:N;w=k*W/N;
f1=1/2*exp(-2*t).*stepfun(t,0);
F=r*f1*exp(-j*t'*w);
F1=abs(F);p1=angle(F);subplot(3,1,1);plot(t,f1);grid
xlabel('t');ylabel('f(t)');title('f(t)');subplot(3,1,2);
plot(w,F1);xlabel('w');grid;ylabel('F(jw)');subplot(3,1,3);
plot(w,p1*180/pi);grid;xlabel('w');ylabel('相位(度)');
再求信号的频谱,MATLAB程序如下:
%求的频谱
r=0.02;t=-5:r:5;N=200;W=2*pi;k=-N:N;w=k*W/N;
f1=1/2*exp(-2*(t-1)).*stepfun(t,1);
F=r*f1*exp(-j*t'*w);
F1=abs(F);p1=angle(F);subplot(3,1,1);plot(t,f1);grid
xlabel('t');ylabel('f(t)');title('f(t-1)');subplot(3,1,2);
plot(w,F1);xlabel('w');grid;ylabel('F(jw)的模');subplot(3,1,3);
plot(w,p1*180/pi);grid;xlabel('w');ylabel('相位(度)');
【例5】傅里叶变换的频移特性:信号为门信号,绘出信号和信号的频谱,并与原信号的频谱图进行比较。
(1),求其频谱可以采用数值就算得方法。MATLAB程序如下:
R=0.02;t=-2:R:2;
f=stepfun(t,-1)-stepfun(t,1);
W1=2*pi*5;%频率宽度
N=500;k=0:N;W=k*W1/N;%采样数为N,W为频率正半轴的采样点
F=f*exp(-j*t'*W)*R;%求F(jw)
F=real(F);
W=[-fliplr(W),W(2:501)];%形成负半轴及正半轴的2N+1个频率点W
F=[fliplr(F),F(2:501)];%形成对应于W的F(jw)的值
subplot(2,1,1);plot(t,f);
xlabel('t');ylabel('f(t)');axis([-2,2,-0.5,2]);
title('f(t)=u(t+1)-u(t-1)');subplot(2,1,2);plot(W,F);
xlabel('W');ylabel('F(W)'); title('f(t)的傅里叶变换');
(2)得到,的频谱的MATLAB程序如下:
R=0.02;t=-2:R:2;
f=stepfun(t,-1)-stepfun(t,1);
f1=f.*exp(-j*10*t) ;f2=f.exp*(j*10*t)
W1=2*pi*5;
N=500;
k=-N :N ;
W=k*W1/N;
F1=f1*exp(-j*t'*W)*R;
F2=f2*exp(-j*t'*W)*R;
F1=real(F1);F2=real(F2);
subplot(2,1,1);plot(W,F1);
xlabel('W');ylabel('F1(W)');title('频谱F1(jw)');
subplot(2,1,2);plot(W,F2);
xlabel('W');ylabel('F2(W)');title('频谱F2(jw)');
得到的傅里叶变换的频移特性如图所示:
四、程序设计实验
(1)方波的合成实验。用5项谐波合成一个频率为,幅值为3的方波,写出MATLAB程序,给出实验的结果。
(2)编写程序,画出信号,以及信号的频谱图。
五、实验预习要求
(1)预习实验原理。
(2)熟悉实验程序。
(3)思考课程设计实验部分程序的编写。
六、实验报告要求
(1)在MATLAB中输入程序,验证实验结果,并将实验结果存入指定存储区域中。
(2)对于程序设计实验,要求通过对验证性实验的练习,自行编制完整的实验程序,实现对信号的模拟,并得出实验结果。
(3)在实验报告中写出完整的自编程序,并给出实验结果。
七、思考题
(1)傅里叶级数是什么?非周期傅里叶变换的定义是什么?
(2)将信号进行分解成谐波函数,次谐波时能否得到原波形?如不能会存在多少误差?
(3)常数和阶跃函数是否能够直接利用傅里叶变换定义公式进行变换?为什么不能?
实验五 信号抽样与恢复
一、实验目的
1、学会用MATLAB实现连续信号的采样和重建。
2、巩固抽样定理的内容。
二、实验原理
1.抽样定理
若是带限信号,带宽为, 经采样后的频谱就是将的频谱 在频率轴上以采样频率为间隔进行周期延拓。因此,当时,不会发生频率混叠;而当 < 时将发生频率混叠。
2.信号重建
经采样后得到信号经理想低通则可得到重建信号,即:
=*
其中:==,。
所以:
=*=*
=
上式表明,连续信号可以展开成抽样函数的无穷级数。
利用MATLAB中的来表示,有 ,所以可以得到在MATLAB中信号由重建的表达式如下:
=
我们选取信号=作为被采样信号,当采样频率=2时,称为临界采样。我们取理想低通的截止频率=。下面程序实现对信号=的采样及由该采样信号恢复重建:
例5-1 Sa(t)的临界采样及信号重构;
wm=1; %信号带宽
wc=wm; %滤波器截止频率
Ts=pi/wm; %采样间隔
ws=2*pi/Ts; %采样角频率
n=-100:100; %时域采样电数
nTs=n*Ts %时域采样点
f=sinc(nTs/pi);
Dt=0.005;t=-15:Dt:15;
fa=f*Ts*wc/pi*sinc((wc/pi)*(ones(length(nTs),1)*t-nTs'*ones(1,length(t)))); %信号重构
t1=-15:0.5:15;
f1=sinc(t1/pi);
subplot(211);
stem(t1,f1);
xlabel('kTs');
ylabel('f(kTs)');
title('sa(t)=sinc(t/pi)的临界采样信号');
subplot(212);
plot(t,fa)
xlabel('t');
ylabel('fa(t)');
title('由sa(t)=sinc(t/pi)的临界采样信号重构sa(t)');
grid;
例5-2 Sa(t)的过采样及信号重构和绝对误差分析
程序和例4-1类似,将采样间隔改成Ts=0.7*pi/wm , 滤波器截止频率该成wc=1.1*wm ,
添加一个误差函数
wm=1;
wc=1.1*wm;
Ts=0.7*pi/wm;
ws=2*pi/Ts;
n=-100:100;
nTs=n*Ts
f=sinc(nTs/pi);
Dt=0.005;t=-15
展开阅读全文