实验 (一) 项目名称: 信号的MATLAB 表示及系统的时域分析 一.实验目的和要求
1掌握函数的向量表示法
2.熟悉常见连续信号和离散信号的表示
3.掌握信号的常见运算函数,实现信号的时域运算
4.掌握连续时间信号和离散时间信号的卷积原理及其matlab实现 5.掌握连续时间系统响应的原理及其matlab实现 6.掌握离散系统单位脉冲响应的求解;
二.实验原理
1.向量表示法
Matlab的信号处理工具箱有大量的函数可用于产生信号,函数中大部分要求用矢量来表示时间。如:t=0:0.005:1;表明该矢量抽样频率为200Hz。
Matlab可以精确表示离散时间信号,对连续时间信号只能近似表示。因此应选择足够小的抽样间隔Ts,以保证反映信号的全部细节。
2.熟悉常见连续信号和离散信号的表示
3.常见的信号运算函数——用符号运算可以较快地实现连续信号地时域运算和变换。 1) 相加:
S=symadd(f1,f2); Ezplot(s)
该符号运算命令表示两连续信号的相加,然后用ezplot命令绘制出其结果波形图。 2) 相乘
w=symmul(f1,f2) ezplot(w)
该符号运算命令表示两连续信号的相乘,然后用ezplot命令绘制出其结果波形图。 3) 时移
y=subs(f,t,t-t0) ezplot(y)
该符号运算命令来实现连续信号的平移,subs命令将连续时间信号中的时间变量t用t-t0替换,然后用ezplot命令绘制出其结果波形图
4) 反褶
y=subs(f,t,-t) ezplot(y)
该符号运算命令实现连续信号的反褶及其结果的可视化。 5) 尺度变换
y=subs(f,t,a*t) ezplot(y)
该符号运算命令实现连续信号的尺度变换及其结果的可视化。 4.卷积运算
A.离散时间信号的卷积和运算
Matlab提供了用于求两个有限时间区间非零的离散时间序列卷积和的专用函数conv。 其调用格式为:x=conv(x1,x2)
上式中,输入参量x1、 x2分别为包含序列x1(n)和x2(n)的所有非零样值点的行向量;输出参量x为返回序列x(n)=x1(n) * x2(n) 的所有非零样值点的行向量。向量x的长度为两个卷积向量长度之和减1。
B.连续时间信号的卷积运算
Matlab的库函数conv()只能计算离散序列f1与f2的卷积和,构造函数sconv()实现两连续函数的卷积积分。
f1与f2的卷积函数构造的思路如下:
1) 将f1(t)与f2(t)以时间间隔λ进行抽样,得到离散序列f1(kλ)和f2(kλ); 2) 构造与f1(kλ) 和f2(kλ)相对应的时间向量k1和k2; 3) 调用conv()函数计算卷积积分f(t)的近似向量f(kλ); 4) 构造f(kλ)对应的时间向量K。 具体代码如下:
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非零样值的时间量 subplot(2,2,1)
plot(k1,f1) %在子图1绘出f1(t)的时域波形图 title(‘f1(t)') xlabel(‘t') ylabel(‘f1(t)')
subplot(2,2,2)
plot(k2,f2) %在子图2绘出f2(t)的时域波形图 title(‘f2(t)') xlabel(‘t') ylabel(‘f2(t)')
subplot(2,2,3)
plot(k,f) %画卷积f(t)的时域波形图 h=get(gca,‘position’) h(3)=2.5*h(3)
set(gca,‘position’,h) %将第三个子图的横坐标范围扩为原来的2.5倍 title(‘f(t)=f1(t)*f2(t)') xlabel(‘t’) ylabel(‘f(t)’)
5.连续时间系统的响应
A.连续时间系统零状态响应的MATLAB实现
Matlab库函数中的lsim()能对微分方程描述的LIT连续时间系统响应进行仿真。该函数能绘制连续时间系统在指定的任意时间范围内系统响应的时域波形图,还能求出连续时间系统在指定的任意时间范围内系统响应的数值解。
函数lsim()的调用格式:lsim(b,a,x,t)
该调用格式中,a和b是由描述系统的微分方程左边和右边系数构成的两个行向量;x和t是表示输入信号的行向量,其中t为输入信号时间范围的向量,x为输入信号在向量t定义的时间点上的抽样值。
B.连续时间系统冲激响应的MATLAB实现
MATLAB为用户提供了专门用于连续系统冲激响应并绘制其时域波形的impulse函数。 函数impulse()的调用格式:impulse(b,a) C.连续时间系统冲激响应的MATLAB实现
MATLAB为用户提供了专门用于连续系统冲激响应并绘制其时域波形的step函数。 函数step()的调用格式:step(b,a) 6.离散时间系统的响应
求解差分方程最常用的方法是迭代解法,也是实现数字滤波器的一种基本方法。用x(n)与y(n)分别表示系统的激励和响应,差分方程通式为:
a0y(k)?a1y(k-1)???aNy(k-N)?b0x(k)?b1x(k-1)???bNx(k-N)
A.离散时间系统零状态响应的MATLAB实现
Matlab库函数中的filter()能对差分方程描述的LIT系统响应进行仿真。 函数filter()的调用格式:filter (b,a,f)
该调用格式中,b和a是差分方程左边和右边的系数向量;f表示输入序列,y表示输出序列。
B.离散时间系统单位脉冲响应的MATLAB实现
MATLAB为用户提供了专门用于离散系统单位脉冲响应并绘制其时域波形的impz函
数。
函数impz()的调用格式:impz(b,a,k)
三.实验内容
1.设f(t)=(t+2)(u(t+2)-u(t))+2*(u(t)-u(t-2))。请用Matlab绘出下列信号的时域波形。 (1)f(t) (2) f(3t) (3)f(t-3)u(t-3) (4)f(3-t) 2.已知f1(t)?u(t?)u(?t,2)f2(t)?0.5t[u(t)?u(t?2)]试用Matlab计算
f(t)?f1(t)?f2(t),并绘出f1(t),f2(t)及f(t)的函数波形。
3. 已知描述连续时间系统的微分方程和激励信号分别为
y''(t)?5y'(t)?6y(t)?6x(t),x(t)?10cos(2t)u(t)
试用Matlab求该系统的零状态响应,并绘制其时域仿真波形。 4.已知描述连续时间系统的微分方程为
y''(t)?6y'(t)?8y(t)?x'(t)试求系统的冲激响应和阶跃响应,并绘出时域仿
真波形。
5.已知x1[k]=[1,1,0,1,0,1],x2[k]=[1,1,0,1,0,1,1,0,1,1]用Matlab计算离散卷积和y(k)=x1(k)*x2(k),并绘出x(k)和y(k)的时域波形。 6. 已知描述离散系统的差分方程为
y(n)-0.6y(n-1)+0.8y(n-2)=x(n)-3x(n-1) 试利用Matlab绘出该系统单位序列响应的时域波形
四.实验总结