概述
For a model
with Nx states, Ny outputs, and Nu inputs:
a is an Nx-by-Nx real- or complex-valued matrix.
b is an Nx-by-Nu real- or complex-valued matrix.
c is an Ny-by-Nx real- or complex-valued matrix.
d is an Ny-by-Nu real- or complex-valued matrix.
To set D = 0 , set d to the scalar 0 (zero), regardless of the
dimension.
离散模型:
sys = ss(a,b,c,d,Ts) creates the discrete-time model
with sample time Ts (in seconds). Set Ts = -1 or Ts = [] to leave
the sample time unspecified.
1.3MATLAB tf2ss函数命令:
将传递函数模型转化为状态空间模型,单输入单输出系统转换如下:
利用该命令不仅可以转换SISO系统也可以转换MIMO系统,如下MISO系统也可以:
den= [0 2
3; 1 2 1];
num= [1 0.4 1];
[A,B,C,D] = tf2ss(den,num)
结果:
A =
-0.4000
-1.0000
1.0000
0
B =
1
0
C =
2.0000
3.0000
1.6000
0
D =
0
1
2、实例仿真
2.1假设工业过程某传递函数:
den= [1.5];
num= [1 5 1];
[A,B,C,D] = tf2ss(den,num)
结果:
a
=
x1
x2
x1
-5 -1
x2
1
0
b =
u1
x1
1
x2
0
c =
x1
x2
y1
0
1.5
d =
u1
y1
0
所以有:
2.2修改S-Function模板参数:
从结果可以看出,系统有两个状态,没有离散状态,输入1个,输出1个,无直通反馈,一种采用时间,打开模板,复制代码。
function[sys,x0,str,ts,simStateCompliance]
= sfuntmpl(t,x,u,flag)【一个主函数,需修改原函数名:sfuntmpl】
%SFUNTMPL General MATLAB S-Function Template
% With MATLAB S-functions, you
can define you own ordinary differential
% equations (ODEs), discrete
system equations, and/or just about
% any type of algorithm to be
used within a Simulink block diagram.
%
% The general form of an MATLAB
S-function syntax is:
%
[SYS,X0,STR,TS,SIMSTATECOMPLIANCE]
= SFUNC(T,X,U,FLAG,P1,...,Pn)
%
% What is returned by SFUNC at
a given point in time, T, depends on the
% value of the FLAG, the
current state vector, X, and the current
% input vector, U.
%
% FLAG
RESULT
DESCRIPTION
% -----
------
--------------------------------------------
% 0
[SIZES,X0,STR,TS]
Initialization, return system sizes in
SYS,
%
initial
state in X0, state ordering strings
%
in
STR, and sample times in TS.
% 1
DX
Return
continuous state derivatives in SYS.
% 2
DS
Update
discrete states SYS = X(n+1)
% 3
Y
Return
outputs in SYS.
% 4
TNEXT
Return
next time hit for variable step sample
%
time
in SYS.
% 5
Reserved
for future (root finding).
% 9
[]
Termination,
perform any cleanup SYS=[].
%
%
% The state vectors, X and X0
consists of continuous states followed
% by discrete
states.
%
% Optional parameters,
P1,...,Pn can be provided to the S-function and
% used during any FLAG
operation.
%
% When SFUNC is called with
FLAG = 0, the following information
% should be
returned:
%
%
SYS(1)
= Number of continuous states.
%
SYS(2)
= Number of discrete states.
%
SYS(3)
= Number of outputs.
%
SYS(4)
= Number of inputs.
%
Any
of the first four elements in SYS can be specified
%
as
-1 indicating that they are dynamically sized. The
%
actual
length for all other flags will be equal to the
%
length
of the input, U.
%
SYS(5)
= Reserved for root finding. Must be zero.
%
SYS(6)
= Direct feedthrough flag (1=yes, 0=no). The s-function
%
has
direct feedthrough if U is used during the FLAG=3
%
call.
Setting this to 0 is akin to making a promise that
%
U
will not be used during FLAG=3. If you break the promise
%
then
unpredictable results will occur.
%
SYS(7)
= Number of sample times. This is the number of rows in
TS.
%
%
%
X0
=
Initial state conditions or [] if no states.
%
%
STR
= State
ordering strings which is generally specified as [].
%
%
TS
=
An m-by-2 matrix containing the sample time
%
(period,
offset) information. Where m = number of sample
%
times.
The ordering of the sample times must be:
%
%
TS
= [0
0,
:
Continuous sample time.
%
0
1,
:
Continuous, but fixed in minor step
%
sample
time.
%
PERIOD
OFFSET, : Discrete sample time where
%
PERIOD
> 0 & OFFSET < PERIOD.
%
-2
0];
:
Variable step discrete sample time
%
where
FLAG=4 is used to get time of
%
next
hit.
%
%
There
can be more than one sample time providing
%
they
are ordered such that they are monotonically
%
increasing.
Only the needed sample times should be
%
specified
in TS. When specifying more than one
%
sample
time, you must check for sample hits explicitly by
%
seeing
if
%
abs(round((T-OFFSET)/PERIOD)
- (T-OFFSET)/PERIOD)
%
is
within a specified tolerance, generally 1e-8. This
%
tolerance
is dependent upon your model's sampling times
%
and
simulation time.
%
%
You
can also specify that the sample time of the S-function
%
is
inherited from the driving block. For functions which
%
change
during minor steps, this is done by
%
specifying
SYS(7) = 1 and TS = [-1 0]. For functions which
%
are
held during minor steps, this is done by specifying
%
SYS(7)
= 1 and TS = [-1 1].
%
%
SIMSTATECOMPLIANCE
= Specifices how to handle this block when saving and
%
restoring
the complete simulation state of the
%
model.
The allowed values are: 'DefaultSimState',
%
'HasNoSimState'
or 'DisallowSimState'. If this value
%
is
not speficified, then the block's compliance with
%
simState
feature is set to 'UknownSimState'.
% Copyright 1990-2010 The
MathWorks, Inc.
% $Revision: 1.18.2.5
$
%
% The following outlines the general structure of an
S-function.
%
switchflag,
%%%%%%%%%%%%%%%%%%
%
Initialization %
%%%%%%%%%%%%%%%%%%
case0,
[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
%%%%%%%%%%%%%%%
%
Derivatives %
%%%%%%%%%%%%%%%
case1,
sys=mdlDerivatives(t,x,u);
%%%%%%%%%%
%
Update %
%%%%%%%%%%
case2,
sys=mdlUpdate(t,x,u);
%%%%%%%%%%%
%
Outputs %
%%%%%%%%%%%
case3,
sys=mdlOutputs(t,x,u);
%%%%%%%%%%%%%%%%%%%%%%%
%
GetTimeOfNextVarHit %
%%%%%%%%%%%%%%%%%%%%%%%
case4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
%%%%%%%%%%%%%
%
Terminate %
%%%%%%%%%%%%%
case9,
sys=mdlTerminate(t,x,u);
%%%%%%%%%%%%%%%%%%%%
%
Unexpected flags %
%%%%%%%%%%%%%%%%%%%%
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag',
num2str(flag));
end
% end sfuntmpl
%
%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the
S-function.
%=============================================================================
%
function[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
%
% call simsizes for a sizes structure, fill it in and convert it to
a
% sizes array.
%
% Note that in this example, the values are hard coded.
This is not a
% recommended practice as the characteristics of the block are
typically
% defined by the S-function parameters.
%
sizes =
simsizes;【不要更改】
sizes.NumContStates
= 2;【包括x1和x2两个连续状态】
sizes.NumDiscStates
= 0;【无离散状态】
sizes.NumOutputs
=
1;【一个输入u】
sizes.NumInputs
=
1;【一个输出y】
sizes.DirFeedthrough =
0;【y和u无关】
sizes.NumSampleTimes = 1;%
at least one sample time is needed【一个采用周期时间,可有多个】
sys =
simsizes(sizes);【不要更改】
%
% initialize the initial conditions
%
x0
= [0;0];【初始状态均为0】
%
% str is always an empty matrix
%
str =
[];【系统预留参数,不要更改】
%
% initialize the array of sample times
%
ts
= [0 0];【采样时间和偏移量,都为0说明为连续无偏移】
% Specify the block simStateCompliance. The allowed values
are:
%
'UnknownSimState',
< The default setting; warn and assume
DefaultSimState
%
'DefaultSimState',
< Same sim state as a built-in block
%
'HasNoSimState',
< No sim state
%
'DisallowSimState'
< Error out when saving or restoring the model sim
state
simStateCompliance =
'UnknownSimState';
% end mdlInitializeSizes
%
%=============================================================================
% mdlDerivatives
% Return the derivatives for the continuous states.
%=============================================================================
%
functionsys=mdlDerivatives(t,x,u)【求导,输出为状态x的导数】
sys =
[-5 -1;1
0]*x+[1;0]*u;
% end mdlDerivatives
%
%=============================================================================
% mdlUpdate
% Handle discrete state updates, sample time hits, and major time
step
% requirements.
%=============================================================================
%
functionsys=mdlUpdate(t,x,u)【离散情况下的x(n+1)】
sys =
[];
% end mdlUpdate
%
%=============================================================================
% mdlOutputs
% Return the block outputs.
%=============================================================================
%
functionsys=mdlOutputs(t,x,u)【系统输出y】
sys =
1.5*x(2);
% end mdlOutputs
%
%=============================================================================
% mdlGetTimeOfNextVarHit
% Return the time of the next hit for this block.
Note that the result is
% absolute time. Note that this function is only
used when you specify a
% variable discrete-time sample time [-2 0] in the sample time
array in
% mdlInitializeSizes.
%=============================================================================
%
functionsys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1;%
Example, set the next hit to be one second
later.
sys = t +
sampleTime;
% end mdlGetTimeOfNextVarHit
%
%=============================================================================
% mdlTerminate
% Perform any end of simulation tasks.
%=============================================================================
%
functionsys=mdlTerminate(t,x,u)
sys =
[];
% end mdlTerminate
2.3仿真结果
在simulink中建立一下模型:
双击打开S-Function块,如图所示:
其中,G_S_m.m就是刚才建立的S-Function。
如果仿真条件都一样则两个模型的仿真结果将会重合,为了便于区分,分别设定Step和Step1的阶跃时间为0和1,终值均为1,则仿真结果如下:
最后
以上就是心灵美香烟为你收集整理的matlab 传递函数 仿真,利用S-Function实现传递函数的全部内容,希望文章能够帮你解决matlab 传递函数 仿真,利用S-Function实现传递函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复