时域分析的matlab实现

来源:互联网 发布:淘宝仿真金属狙击枪 编辑:程序博客网 时间:2024/05/16 09:44


1.连续时间系统的零状态响应

求解零初始条件微分方程数值解的函数lsim

调用形式: y=lsim(sys,f,t)


t表示计算系统响应的抽样点向量,f是系统输入信号向量,sys是LTI系统模型,用来表示微分方程,差分方程,状态方程。

在求解微分方程时,微分方程的LTI系统模型sys要借助MATLAB中的tf函数来获得,其调用形式为

sys=tf(b,a)

a3y'''(t)+a2y''(t)+a1y'(t)+a0y(t)=b3f'''(t)+b2f''(t)+b1f'(t)+b0f(t)


函数调用格式:

a=[a3,a2,a1,a0];

b=[b3,b2,b1,b0];

sys=tf(b,a);

即可获得LTI模型

系统输入信号是f(t)=10sin2*pi*t

微分方程为:

y''(t)+2y'(t)+100y(t)=f(t)



>> ts=0;te=5;dt=0.01;
>> sys=tf([1],[1 2 100]);
>> t=ts:dt:te;
>> f=10*sin(2*pi*t);
>> y=lsim(sys,f,t);
>> plot(t,y);xlabel('t(sec)');ylable('y(t)');grid on




2.连续时间系统的冲激响应和阶跃响应

求解系统冲激响应可应用系统工具箱提供的函数impulse,阶跃响应用step

y=impulse(sys,t);

y=step(sys,t);


>> ts=0;te=5;td=0.01;
>> t=ts:td:te;
>> sys=tf([10],[1 2 100])%左边和右边的顺序不能换,左边输入信号表达式,右边输出信号表达式


sys =
 
        10
  ---------------
  s^2 + 2 s + 100
 
Continuous-time transfer function.


>> y=impulse(sys,t)

>>plot(t,y);




3.离散时间系统的零状态响应

在零初始状态下,matlab的信号处理工具箱提供了一个filter函数,可以计算由差分方程描述的系统的响应,其调用形式为:

y=filter(b,a,f)

a=[a0 a1 a2 ...an],b=[b0,b1,....bn],a是输出的系数,b是输入的系数,f是输入信号


4.离散时间系统的冲激响应和阶跃响应

h=impz(b,a,k)

h=stepz(b,a,k)

y[k]+3y[k-1]+2y[k-2]=f[k]


>> k=0:10;
>> a=[1 3 2];b=[1];
>> h=impz(b,a,k)


>> subplot(2,1,1);stem(k,h);title('单位冲激响应的近似值');
>> grid on




5.卷积

计算系统零状态响应的有力工具,

计算两个离散序列卷积和的函数conv,调用形式:c=conv(a,b)

a,b分别为待卷积的两序列的向量表示,c是卷积结果。向量c的长度为向量a,b的长度之和减一

即length(c)=length(a)+length(b)-1

conv函数其实是利用前面介绍过的filter函数来实现的

>>open conv


已知序列x[n]={1,2,3,4;n=0,1,2,3},y[n]={1,1,1,1,1;n=0,1,2,3,4},利用matlab计算x[n]*y[n]并画出卷积结果。

>> x=[1,2,3,4];
>> y=[1,1,1,1,1];
>> z=conv(x,y);
>> subplot(3,1,1);stem(0:length(x)-1,x);ylabel('x[n]');
>> subplot(3,1,1);stem(0:length(x)-1,x);ylabel('x[n]');
>> subplot(3,1,2);stem(0:length(y)-1,y);ylabel('y[n]');
>> subplot(3,1,3);stem(0:length(z)-1,z);ylabel('z[n]');


conv函数也可以用来计算两个多项式的乘积



原创粉丝点击