北京理工大学实验报告3北京理工大学信号与系统实验报告.docx
《北京理工大学实验报告3北京理工大学信号与系统实验报告.docx》由会员分享,可在线阅读,更多相关《北京理工大学实验报告3北京理工大学信号与系统实验报告.docx(26页珍藏版)》请在冰豆网上搜索。
北京理工大学实验报告3北京理工大学信号与系统实验报告
北京理工大学实验报告3北京理工大学信号与系统实验报告
本科实验报告
实验名称:
信号与系统实验
课程名称:
数字信号处理实验时间:
任课教师:
实验地点:
4-442实验教师:
实验类型:
□原理验证□综合设计□自主创新学生姓名:
学号/班级:
组号:
学院:
信息与电子学院同组搭档:
专业:
信息工程成绩:
实验一信号的时域描述与运算
一、实验目的
①掌握信号的MATLAB表示及其可视化方法。
②掌握信号基本时域运算的MATLAB实现方法。
③利用MATLAB分析常用信号,加深对信号时域特性的理解。
二、实验原理与方法
1.连续时间信号的MATLAB表示
连续时间信号指的是在连续时间范围内有定义的信号,即除了若干个不连续点外,在任何时刻信号都有定义。
在MATLAB中连续时间信号可以用两种方法来表示,即向量表示法和符号对象表示法。
从严格意义上来说,MATLAB并不能处理连续时间信号,在MATLAB中连续时间信号是用等时间间隔采样后的采样值来近似表示的,当采样间隔足够小时,这些采样值就可以很好地近似表示出连续时间信号,这种表示方法称为向量表示法。
表示一个连续时间信号需要使用两个向量,其中一个向量用于表示信号的时间范围,另一个向量表示连续时间信号在该时间范围内的采样值。
例如一个正弦信号可以表示如下:
>>t=0:
0.01:
10;>>x=sin(t);利用plot(t,x)命令可以绘制上述信号的时域波形,如图1所示。
如果连续时间信号可以用表达式来描述,则还可以采用符号表达式來表示信号。
例如对于上述正弦信号,可以用符号对象表示如下:
>>x=sin(t);>>ezplot(X);利用ezplot(x)命令可以绘制上述信号的时域波形
常用的信号产生函数函数名功能函数名功能heaviside单位阶跃函数rectpuls门函数sin正弦函数tripuls三角脉冲函数cos余弦函数square周期方波sincsinc函数sawtooth周期锯齿波或三角波exp指数函数
2.连续时间信号的时域运算对连续时间信号的运算包括两信号相加、相乘、微分、积分,以及位移、反转、尺度变换(尺度伸缩)等。
1)相加和相乘信号相加和相乘指两信号对应时刻的值相加和相乘,对于两个采用向量表示的可以直接使用算术运算的运算符“+”和“*”来计算,此时要求表示两信号的向量时间范围和采样间隔相同。
采用符号对象表示的两个信号,可以直接根据符号对象的运算规则运算。
2)微分和积分对于向量表示法表示的连续时间信号,可以通过数值计算的方法计算信号的微分和积分。
这里微分使用差分来近似求取的,由时间向量[]和采样值向量[]表示的连续时间信号,其微分可以通过下式求得
其中表示采样间隔。
MATLAB中用diff函数来计算差分。
连续时间信号的定积分可以由MATLAB的qud函数实现,调用格式为quad('function_name',a,b)其中,function_name为被积函数名,a、b为积分区间。
对于符号对象表示的连续时间信号,MATLAB提供了diff函数和quad函数分别用于求微分和积分。
3.离散时间信号的MATLAB表示离散时间信号仅在一些离散时刻有定义。
在MATLAB中离散时间信号需要使用两个向量来表示,其中一个向量用于表示离散的时间点,另一个向量表示在这些时间点上的值。
例如对于如下时间信号
采用MATLAB可以表示如下:
>>n=-3:
4;>>x=[-3
2-1
2
1-1
23];>>stem(n,x,'filled');>>xlabel('n');>>title('x(n)');Stem函数用于绘制离散时间信号波形,为了与我们表示离散时间信号的习惯相同,在绘图时一般需要添加‘filled’选项,以绘制实心的杆状图形。
上述命令绘制的信号时域波形如图3所示。
4.离散时间信号的时域运算离散时间信号的相加相乘是将两个信号对应的时间点上的值相加或相乘,可以直接使用算术运算的运算符“+”和“*”来计算。
离散时间信号的位移,则可看作是将表示时间的向量平移,而表示对应时间点上的值的向量不变。
离散时间信号的反转,则可以看作是将表示时间的向量和表示对应时间点上的值的向量以零点为基准点,一纵轴为对称轴反折,向量的反折可以利用MATLAB的fliplr函数实现。
三、实验内容
(1)、利用MATLAB绘制下列连续时间信号的波形:
1、>>t=0:
0.001:
10;>>x=(1-exp(-0.5*t)).*(heaviside(t));>>plot(t,x)0
1
23456789
1000.10.20.30.40.50.60.70.80.9
1
2、>>t=0:
0.001:
10;>>x=cos(pi*t).*(heaviside(t)-heaviside(t-2));>>plot(t,x)0
1
23456789
10-1-0.8-0.6-0.4-0.200.20.40.60.8
3、>>t=0:
0.001:
10;>>x=abs(t)/2.*cos(pi*t).*(heaviside(t+2)-heaviside(t-2));>>plot(t,x)0
1
23456789
10-0.6-0.4-0.200.20.40.60.8
14、>>t=0:
0.001:
10;>>x=exp(-t).*sin(2*pi*t).*(heaviside(t)-heaviside(t-3));>>plot(t,x)0
1
23456789
10-0.6-0.4-0.200.20.40.60.8
(2)、利用MATLAB绘制下列离散时间信号的波形:
1、>>x=heaviside(n-3);>>stem(n,x,'filled')
0
1
23456789
1000.10.20.30.40.50.60.70.80.9
2、>>x=(-1/2).^n.*heaviside(n);>>stem(n,x,'filled')
3、>>x=n.*(heaviside(n)-heaviside(t-5));>>stem(n,x,'filled')0
1
23456789
1000.5
1
1.5
2
2.533.54
4、>>x=sin(n*pi/2).*heaviside(n);>>stem(n,x,'filled')0
1
23456789
10-1-0.8-0.6-0.4-0.200.20.40.60.8
(3)、利用MATLAB生成并绘制连续周期矩形波信号,要求周期为2,峰值为3,显示三个周期波形。
>>t=0:
0.001:
6;>>x=square(t*pi).*3;>>plot(t,x)0
1
23456-3-2-10
1
23
(4)、已知信号,用MATLAB绘出下列信号的波形
1、>>t=0:
0.001:
10;>>x1=(-t+4).*(heaviside(t)-heaviside(t-4));>>x2=sin(2*pi*t);>>x3=x1+x2;plot(t,x3)0
1
23456789
10-10
1
2345
2、>>t=0:
0.001:
10;>>x1=(-t+4).*(heaviside(t)-heaviside(t-4));>>x2=sin(2*pi*t);>>x4=x1.*x2;plot(t,x4)0
1
23456789-4-3-2-10
1
23
3、symst;x1=(4-t)*(heaviside(t)-heaviside(t-4));x1=(4+t)*(heaviside(-t)-heaviside(t+4));x5=x1+x2;ezplot(t,x5);
5)、已知离散时间信号x(n)波形(),用MATLAB绘出x(n)、x(-n)、x(n+2)和x(n-2)的波形。
n=-3:
4;x=[0,1,2,3,3,3,3,0];n1=-fliplr(n);x1=fliplr(x);n2=n+2;n3=n-2;subplot(221);stem(n,x,'filled');subplot(222);stem(n1,x1,'filled');subplot(223);stem(n2,x,'filled');subplot(224);stem(n3,x,'filled');
(6)、有MATLAB编程绘制下列信号的时域波形,观察信号是否为周期信号?
若是周期信号,周期是多少?
若不是周期信号,请说明原因。
1、symst;x=1+cos(pi/4*t-pi/3)+2*cos(pi/2*t-pi/4)+cos(2*pi*t);ezplot(x,[-20,20]);-10-8-6-4-20
2468
10-3-2-10
1
2345
是周期信号T=8s
2、>>x=sin(t)+2*sin(pi*t);>>plot(t,x)-20-15-10-505
10
15
20-3-2-10
1
23
不是周期信号3、n=1:
20;x=2+3*sin(2*n/3*pi-pi/8);stem(n,x,'filled');
是周期信号T=3s4、n=1:
20;x=cos(n*pi/6)+sin(n*pi/3)+cos(n*pi/2);stem(n,x,'filled');
是周期信号T=12s
实验二LTI系统的时域分析
一、实验目的
1、掌握利用MATLAB对系统进行时域分析的方法。
2、掌握连续时间系统零状态响应、冲激响应和阶跃响应的求解方法。
3、掌握求解离散时间系统响应、单位抽样响应的方法。
4、加深对卷积积分和卷积和的理解。
掌握利用计算机进行卷积积分和卷积和计算的方法。
二、实验原理与方法
1、连续时间系统时域分析的MATLAB实现
(1)、连续时间系统的MATLAB表示
LTI连续系统通常可以由系统微分方程描述,设LTI因果系统的微分方程一般式为:
则在MATLAB里,可以建立系统模型如下:
b=[bM,bM-......b0];a=[aN,aN-1......a0];sys=tf(b,a);其中,tf是用于创建系统模型的函数,向量a与b的元素是以微分方程求导的降幂次序来排列的,如果有缺项,应用0补齐。
(2)、连续时间系统的零状态响应
零状态响应是指系统的初始状态为零,仅由输入信号引起的响应。
MATLAB提供了一个用于求解零状态响应的函数lism,其调用格式如下:
lsim(sys,x,t)绘出输入信号及响应的波形,x和t表示输入信号数值向量和时间向量。
y=
lsim(sys,x,t)这种调用格式不绘出波形,而是返回响应的数值向量。
(3)、连续时间系统的冲激响应与阶跃响应。
MATLAB提供了函数impluse来求指定时间范围内,由模型sys描述的连续时间系统的单位冲激响应。
其调用格式如下:
impulse(sys)在默认的时间范围内绘出系统冲激响应的时域波形。
impulse(sys,T)绘出系统在0-T范围内冲激响应的时域波形。
impulse(sys,ts:
tp:
te)绘出系统在ts-tp范围内,以tp为时间间隔取样的冲激响应的时域波形。
[y,t]=
impulse(…)该调用格式不绘出单位冲激响应波形,而是返回单位冲激响应的数值向量及其对应的时间向量。
函数step用于求解单位阶跃响应,函数step同样也有如下几种调用格式:
step(sys)step(sys,T)
step(sys,ts:
tp:
te)
[y,t]=step(…)
2、离散时间系统时域分析的MATLAB实现
(1)、离散时间系统的MATLAB表示。
LTI离散系统通常可以由系统差分方程描述,设描述系统的差分方程为:
则在MATLAB里,可以用如下两个向量来表示这个系统:
b=[b0,b1……,bM]a=[a0,a1……,aN]
(2)、离散时间系统对任意输入的响应。
MATLAB提供求LTI离散系统响应的专用函数fliter,该函数用于求取差分方程描述的离散时间系统在指定时间范围内对输入序列所产生的响应,其调用格式如下:
y=filter(b,a,x)
其中,x为输入序列,y为输出序列,x,y所对应的时间区间必须相同。
(3)、离散时间系统的单位抽样响应。
MATLAB提供了函数impz来求指定时间范围内,由向量b和a描述的离散时间系统的单位抽样响应。
其调用格式如下:
impz(b,a)在默认的时间范围内绘出系统抽样响应的时域波形。
。
impz(b,a,T)绘出系统在0-N范围内冲激响应的时域波形。
impz(b,a,ns:
ne)绘出系统在ns-ne范围的冲激响应的时域波形。
[y,n]=
impz(…)该调用格式不绘出单位冲激响应波形,而是返回单位冲激响应的数值向量及其对应的时间向量。
3、卷积和与卷积积分
(1)、离散时间序列的卷积和
卷积和是离散系统时域分析的基本方法之一,离散时间序列和的卷积和定义如下:
MATLAB提供了函数conv来求两个离散序列的卷积和。
其调用格式如下:
x=conv(x1,x2)
(2)、连续时间信号的卷积积分
卷积积分是连续系统时域分析的有效方法和工具之一,连续时间信号和的卷积积分定义如下:
用户可根据书上内容自定义一个用于计算卷积积分的通用函数sconv。
三、实验内容
1、已知描述模拟低通、高通、带通和带阻滤波器的微分方程如下,试采用MATLAB绘出各系统的单位冲激响应和单位阶跃响应波形。
>>a=[1sqrt
(2)
1];>>b=[1];>>sys=tf(b,a);>>impulse(sys)0
1
23456789
10-0.100.10.20.30.40.50.6ImpulseResponseTime(seconds)litude
>>a=[1sqrt
(2)
1];>>b=[100];>>sys=tf(b,a);>>impulse(sys)0
1
23456789-1.6-1.4-1.2-1-0.8-0.6-0.4-0.200.2Time(seconds)litude>>a=[1
1
1];>>b=[10];>>sys=tf(b,a);>>impulse(sys)0
2468
10
12-0.4-0.200.20.40.60.8
1Time(seconds)litude>>a=[1
1
1];>>b=[10
1];>>sys=tf(b,a);>>impulse(sys)0
2468
10
12-1-0.8-0.6-0.4-0.200.20.4Time(seconds)litude
2、已知某系统可以由微分方程描述
y(n)+y(n-1)+y(n-2)=x(n)①请利用MATLAB绘出该系统冲激响应和阶跃响应的时域波形;
②根据冲激响应的时域波形分析系统的稳定性;
③如果系统的输入为,求系统的零状态响应;>>a=[1
16];>>b=[1];>>sys=tf(b,a);>>impulse(sys)>>step(sys)
0
2468
10
12
14-0.2-0.100.10.20.30.40.5Time(seconds)litude0
2468
10
12
1400.050.10.150.20.250.30.35StepResponseTime(seconds)litude是稳定系统>>t=0:
0.01:
10;>>x=exp(-t);>>lsim(sys,x,t)0
1
23456789
10-0.200.20.40.60.8
1
1.2LinearSimulationResultsTime(seconds)litude3、已知描述离散系统的差分方程如下,试采用MATLAB绘出各系统的单位抽样响应,并根据单位抽样响应的时域波形分析系统的稳定性。
①y(n)+3y(n-1)+2y(n-2)=x(n)
>>a=[13
2];>>b=[1];>>impz(b,a)不是稳定系统5、采用MATLAB计算如下两个序列的卷积,并绘出图形
>>x1=[1
2
1
1];>>x2=[1
1
1
1
1];>>x=conv(x1,x2)x=
134554
2
16、已知某LTI离散系统,其单位抽样响应h(n)=sin(0.5n),n>=0,系统的输入为x(n)=sin(0.2n),n>=0,计算当n=0,1,2,…,40时系统的零状态响应y(n),绘出x(n),h(n)和y(n)时域波形。
>>n=0:
40;>>h=sin(0.5*n);>>x=sin(0.2*n);>>y=conv(h,x);>>subplot(311);>>stem(n,h,'filled');>>subplot(312);>>stem(n,x,'filled');>>subplot(313);>>stem(y,'filled');程序运行结果如下:
7、已知两个连续信号,是采用MATLAB求这两个信号的卷积
Sconv.mfunction[x,t]=sconv(x1,x2,t1,t2,dt)x=conv(x1,x2);x=x*dt;t0=t1
(1)+t2
(1);l=length(x1)+length(x2)-2;t=t0:
dt:
(t0+l*dt);end>>dt=0.001;>>t1=(-2):
dt:
2;>>t2=(-1):
dt:
1;>>x1=2.*(heaviside(t1+2)-heaviside(t1-2));>>x2=heaviside(t2+1)-heaviside(t2-1);>>subplot(221);>>plot(t1,x1);>>xlabel('t(s)');>>title('x_1(t)');>>subplot(222);>>plot(t2,x2);>>xlabel('t(s)');>>title('x_2(t)');>>[x,t]=sconv(x1,x2,t1,t2,dt);>>subplot(212);>>plot(t,x);>>xlabel('t(s)');>>title('x(t)=x_1(t)*x_2(t)
实验三信号频域分析
一、实验目的
①深入理解信号频谱的概念,掌握信号的频域分析方法。
②观察典型周期信号和非周期信号的频谱,掌握其频谱特性。
二、实验原理与方法
1、连续周期信号的频谱分析
如果周期信号满足狄里赫利条,就可以展开为傅里叶级数形式,即
(1)
(2)
式中,表示基波周期,为基波频率,表示任一个基波周期内的积分。
式
(1)和式
(2)定义为周期信号复指数形式的傅里叶级数,系数称为的傅里叶系数。
周期信号的傅里叶级数还可以由三角函数的线性组合来表示,即
(3)
其中:
(4)
式(3)中同频率的正弦项和余弦项可以合并,从而得到三角函数形式的傅里叶级数,即
(5)
其中:
(6)
可见,任何满足狄里赫利条的周期信号都可以表示成一组谐波关系的复指数函数或三角函数的叠加。
一般来说周期信号表示为傅里叶级数时需要无限多项才能完全逼近原信号,但在实际应用中经常采用有限项级数来替代,所选项数越多就越逼近原信号。
2、连续非周期信号的频谱分析
对于非周期连续时间信号,吸纳后的傅里叶变换和傅里叶逆变换定义为
(7)
(8)
式(7)和式(8)把信号的时域特性和频域特性联系起来,确立了非周期信号和频谱之间的关系。
采用MATLAB可以方便地求取非周期连续时间信号的傅里叶变换,这里我们介绍常用的集中方法。
(1)、符号运算法
MATLAB的符号数学工具箱提供了直接求解傅里叶变换和反变换的函数,fourier函数和ifourier函数,基本调用格式为X=fourier(x)X=ifourier(X)默认的时域变量为t,频域变量为w。
(2)、数值积分法
除了采用符号运算的方法外,我们还可以利用MATLAB的quad函数,采用数值积分的方法来进行连续信号的频谱分析,quad函数是一个用来计算数值积分的函数。
利用quad函数可以计算非周期连续时间信号的频谱。
Quad函数的一般调用格式为:
y=quad(fun,a,b)y=quad(fun,a,b,TOL,TRACE,p1,p2,…)其中fun指定被积函数,可以采用inline命令来创建,也可以通过传递函数句柄的形式来指定,a、b表示定积分的下限和上限,TOL表示允许的相对或绝对积分误差,TRACE表示以被积函数的点绘图形式来跟踪该函数的返回值,如果TOL和TRACE为空矩阵,则使用缺省值,“p1,p2,…”表示被积函数出时间t之外所需的其他额外输入参数。
(3)、数值近似法
我们还可以利用MATLAB的数值计算的方法近似计算连续时间傅里叶变换。
傅里叶变换可以由式(9)近似计算
(9)
当为时限信号,且足够小,式(9)可以演变为
(10)
而式(10)中求和部分又可以表示成一个行向量和一个列向量的乘积
(11)
式(11)可以很方便地利用MATLAB实现。
3、离散周期时间信号的频域分析
基波周期为N的周期序列可以用N个成谐波关系的复指数序列的加权和表示,即
(12)
这里k=<N>表示求和仅需包括一个周期内的N项,周期序列在一个周期内的求和与起点无关。
将周期序列表示成式(12)的形式,成为离散傅里叶级数,而系数则称为离散傅里叶系数。
离散傅里叶系数可以由式(13)确定。
(13)
傅里叶系数也称为的频谱系数,而且可以证明是以N为周期的离散频率序列。
这说明了周期的离散时间函数对应于频域为周期的离散频率。
这里,我们用周期N与傅里叶系数的乘积来表示周期离散时间信号的频谱,即
(14)
可以利用MATLAB提供的函数fft用来计算,调用格式为该函数返回一个周期内的值,其中x表示一个周期内的样本值。
4、离散非周期时间信号的频域分析
非周期序列可以表示成一组复指数序列的连续和
(15)
其中
(16)
式(16)称为的离散