实验三 信号与系统数字信号部分1Word文档格式.docx
《实验三 信号与系统数字信号部分1Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验三 信号与系统数字信号部分1Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
subplot(2,2,4);
plot(t,ft3);
时移'
f(t)、f(2t)、f(-2t)和f(2-2t)的波形如图1所示。
图1信号的尺度变换、翻转和时移
2.信号的微分和积分
连续信号的微分可用diff函数来计算,连续信号的定积分可用quad函数或quad8函数来计算。
其调用格式为:
y=diff(x)/h
其中x为待微分的信号,h为步长,y为信号x的微分。
y=quad(‘function-name’,a,b)
其中function-name为被积函数名,a、b为积分区间的下限和上限,y为积分后信号。
quad和quad8都是积分函数,只是采用的积分方法不同而已。
quad采用较低次的可塑性递回辛普森积分法则,quad8采用可塑性递回八段Newton-Cotes积分法则,quad8不管是在精度上还是在速度上都明显高于quad。
例2如图2所示的三角波脉冲信号f(t),试利用MATLAB绘制和的波形。
为了使用quad函数来计算三角波脉冲信号f(t)的积分,将f(t)编写成MATLAB的函数文件,函数名为ft_tri.m。
此函数文件如下:
functionyt=ft_tri(t)
yt=tripuls(t,4,0.5);
利用diff和quad函数,并调用ft_tri.m即可计算三角波脉冲信号f(t)的微分、积分。
程序如下:
h=0.001;
h:
y1=diff(ft_tri(t))/h;
subplot(1,2,1);
plot(t(1:
length(t)-1),y1);
信号的微分'
0.1:
forx=1:
length(t)
y2(x)=quad('
ft_tri'
-3,t(x));
end
subplot(1,2,2);
plot(t,y2);
信号的积分'
程序运行结果如图2所示。
图2信号的微分和积分
3.信号的差分和迭分
离散序列的差分为:
,用diff函数实现,其调用格式为y=diff(f)。
离散序列的迭分是,与信号的相加运算不同,迭分运算把k1到k2之间的所有样本加起来,在MATLAB中用sum函数实现,其调用格式为y=sum(f(k1:
k2))。
例3计算指数信号的能量。
解:
离散信号的能量定义为
根据上式,计算能量的程序如下:
k=0:
10;
fk=(-1.6).^k;
E=sum(abs(fk).^2)
E=
1.9838e+004
4.系统的冲激动响应和阶跃响应
若系统的微分方程或传递函数为:
对于物理上可实现的系统,。
一般情况下,系数a0=1,若不为1则分子分母可以同时除以a0。
由微分方程和传递函数的关系可知,传递函数和微分方程中的系数ai和bi是严格对应的,因此,两种形式给出系统函数都可以用下面的方法解决。
y=ipulse(b,a),用于绘制向量a和b定义的LTI(线性时不变)系统的冲激响应。
y=step(b,a),用于绘制向量a和b定义的LTI(线性时不变)系统的阶跃响应。
其中,a和b表示由系统微分方程中的ai和bi组成的系数向量。
例4求系统的冲激响应和阶跃响应。
a=[746];
b=[11];
impulse(b,a);
%冲激响应
冲激响应'
xlabel('
时间'
ylabel('
幅值'
step(b,a);
%阶跃响应
阶跃响应'
系统的冲激响应和阶跃响应如图3所示。
图3系统的冲激响应和阶跃响应
5.系统的零状态响应
LTI连续系统以常系数微分方程描述,系统的零状态响应可通过求解初始状态为零的微分方程得到。
MATLAB提供的零状态响应函数为lsim,其调用格式为:
y=lsim(sys,f,t)
其中,t是系统零状态响应的抽样点,f是输入信号,sys是LTI(线性时不变)系统的模型,可以是微分方程、差分方程或状态空间方程。
在求解微分方程时,LTI(线性时不变)系统的模型sys要借助函数tf来获得,其调用格式为:
sys=tf(b,a)
其中,a、b分别对应系统函数中输出和输入的系数向量。
例5已知系统。
求当输入信号为时,该系统的零状态响应。
sys=tf([1],[1277]);
t=1:
0.01:
5;
f=10*sin(2*pi*t);
y=lsim(sys,f,t);
plot(t,y);
系统的零状态响应如图9-11所示。
图5零状态响应
6离散系统的零状态响应
离散系统可以用差分方程来描述:
其中,、分别表示离散系统的输入和输出,n表示差分方程的阶数。
已知差分方程的n个初始状态和输入,就可以利用迭代计算法来计算系统的输出。
在零初始状态下,MATLAB工具箱提供了一个filter函数来计算差分方程的零状态响应,其调用格式如下:
y=filter(b,a,f)
其中,b、a分别是差分方程输入和输出各阶差分的系数所组成的向量,f为输入序列,y为输出序列。
注意:
输出序列和输入序列的长度应当相等。
例6已知某LTI系统的输入输出关系为:
,输入信号为,其中,是随机信号。
试用MATLAB编程求解系统的零状态响应。
随机信号可以由rand函数产生,假设M=5。
则程序如下:
R=51;
%信号长度
d=rand(1,R)-0.5;
%产生[-0.50.5]的随机数
R-1;
s=2*k.*(0.9.^k);
f=s+d;
subplot(1,2,1)
stem(k,f);
输入信号f(k)'
axis([05008]);
M=5;
b=ones(M,1)/M;
a=1;
y=filter(b,a,f);
subplot(1,2,2)
stem(k,y);
系统响应y(k)'
);
axis([05008]);
该系统的零状态响应如图6所示。
图6离散系统的零状态响应
7离散系统的冲激响应
在MATLAB中,可以用impz函数来求解系统的冲激响应,其调用格式为:
h=impz(b,a,k)
其中,b、a分别是差分方程输入、输出的系数向量,k表示输出序列的时间取值范围,h就是系统的单位冲激响应。
例7某离散系统的差分方程为,初始条件为y[0]=0,y[1]=1,求其冲激响应、零状态响应和完全响应。
k=-10:
20;
a=[6-51];
b=[1];
subplot(1,3,1),impz(b,a,k);
%冲激响应
kj=0:
30;
fk=cos(kj*pi/2);
yf=filter(b,a,fk);
%零状态响应
subplot(1,3,2),stem(kj,yf);
零状态响应'
axis([030-0.150.2]);
%完全响应
y
(1)=0;
y
(2)=1;
%初值
form=3:
length(kj);
y(m)=(1/6)*(5*y(m-1)-y(m-2)+fk(m));
subplot(1,3,3),stem(kj,y);
完全响应'
axis([030-0.151.1]);
程序运行结果如图7所示。
图7离散系统的冲激响应、零状态响应和完全响应
8卷和运算
卷和是计算离散系统零状态响应的强有力的工具之一,卷和函数conv的调用格式为:
c=conv(a,b)
其中,序列c的时间起点为两个向量a、b的时间起点之和,终点为两两个向量a、b的时间终点之和,长度为a、b长度之和减1。
例8已知序列x[k]={1,2,3,4;
k=0,1,2,3},y[k]={1,1,1,1,1;
k=0,1,2,3,4},计算x[k]*y[k],并绘制卷和的结果。
x=[1234];
y=[11111];
z=conv(x,y)
7%z的时间起点为0+0,终点为3+4
stem(k,z)
k=
01234567
z=
1361010974
程序运行结果如图8所示:
图9-14离散信号的卷和运算结果
9信号的分解与合成
周期信号按照傅里叶级数可以分解成三角函数的线性组合:
其中,w为基波频率。
N为截断位置,当N选取较大时,信号的傅里叶级数就是原信号的较好的近似。
分解和合成的程序如下:
function[A_sym,B_sym]=CTFShchsym;
%设定函数名及参数
%Nf=6谐波的阶数;
Nn输出数据的准确位数;
tao=τ
%A_sym:
第1元素是直流项,其后元素依次是1,2,3,…次谐波cos项的展开系数
%B_sym:
第2,3,4,·
·
元素依次是1,2,3,…次谐波sin项的展开系数
symstnkx%说明为符号变量
tao=1;
T=5;
a=0.5;
ifnargin<
4;
Nf=6;
end%设定默认参数的个数及默认值
Nn=32;
x=time_fun_x(t);
A0=int(x,t,-a,T-a)/T;
%求三角函数展开系数a0=A0
As=int(2*x*cos(2*pi*n*t/T)/T,t,-a,T-a);
%求三角函数展开系数an=As
Bs=int(2*x*sin(2*pi*n*t/T)/T,t,-a,T-a);
%求三角函数展开系数bn=Bs
A_sym
(1)=double(vpa(A0,Nn));
%获取数组A0所对应的ASCII码数值数组
fork=1:
Nf
A_sym(k+1)=double(vpa(subs(As,n,k),Nn));
%获取数组A所对应的ASCII码数值数组
B_sym(k+1)=double(vpa(subs(Bs,n,k),Nn));
%获取数组B所对应的ASCII码数值数组
ifnargout==0%没有输入参数
c=A_sym;
disp(c);
%disp(c)输出系数an(n=0,1,2,3,…)
d=B_sym;
disp(d);
%disp(d)函数输出系数bn(n=0,1,2,3,…)
t=-8*a:
T-a;
f1=c
(1)+c
(2).*cos(2*pi*1*t/5)+0.*sin(2*pi*1*t/5);
%基波
f2=c(3).*cos(2*pi*2*t/5)+0.*sin(2*pi*2*t/5);
%2次谐波
f3=c(4).*cos(2*pi*3*t/5)+0.*sin(2*pi*3*t/5);
%3次谐