Please report any problems to Clément Roos (croos@onera.fr) or Jean-Marc Biannic (biannic@onera.fr). We will try to fix them as quickly as possible!
The GSS library (Generalized State Space) of the SMAC toolbox implements a new Matlab class, which allows to model uncertain and nonlinear systems as Linear Fractional Representations. It replaces and extends the LFR toolbox, with a more intuitive way to describe LFR and a more user-friendly interface, including a Simulink library. Several tools are proposed to manipulate GSS objects (addition, multiplication, inversion, concatenation, feedback...), obtain GSS objects from symbolic models, convert GSS/LFR/USS objects, manipulate the uncertainties and the nonlinearities (normalization, reordering, random sampling), and perform order reduction or approximation. A large class of continuous- and discrete-time systems can be handled, with real or complex uncertain or varying parameters, polytopic-type uncertain or varying elements, linear time-invariant uncertainties, sector nonlinearities, saturations, deadzones, or more general nonlinear operators. Full compatibility is also ensured with other modeling, analysis and control libraries of the SMAC toolbox (APRICOT, SMART, IQC, SAW...).
Linear Fractional Representations are a straightforward extension of state-space models with uncertain elements, parametric variations, and isolated nonlinearities. They consist of a continuous- or discrete-time LTI model $M(s)$ or $M(z)$ in feedback loop with a block diagonal operator $\Delta=\textrm{diag}(\Delta_1,\dots,\Delta_N)$ which collects uncertain, varying and nonlinear elements:
Figure 1: Linear Fractional Representation
Each $\Delta_i$ block can be a real or complex uncertain or varying parameter (PAR
), a polytopic-type uncertain or varying element (POL
), a linear time-invariant system (LTI
), a sector nonlinearity (SEC
), a saturation (SAT
), a deadzone (DZN
) or any other nonlinear operator (NLB
).
The GSS library of the SMAC toolbox implements a new Matlab class. It allows to describe a Linear Fractional Representation as a GSS object, which is a structured variable with two fields:
M
: SS/TF/ZPK object representing the LTI model $M(s)$ or $M(z)$.
D
: $1\times N$ structured array describing each $\Delta_i$ block with fields: Name |
Name of the block | String with no trailing underscore |
Type |
Type of the block (see above) | String 'PAR' , 'POL' , 'LTI' , 'SEC' , 'SAT' , 'DZN' or 'NLB' |
Size |
Size of the block | Number of rows and columns $[n_{row}\ n_{col}]$ |
NomValue |
Nominal value |
|
Bounds |
Bounds information |
|
RateBounds |
Bounds on the rate of variation |
|
Measured |
Indicates whether a block can be measured or not | String 'yes' or 'no' |
Normalization |
Stores bounds information in case of normalization |
|
Misc |
Can be used to store any additional data | No predefined format |
The fields Name
, Type
and Size
must be specified for each block, whereas the other fields can be left empty.
There are several ways to create a GSS object.
sys=gss(sys1)
sys1
can be a GSS object, a LFR object obtained with the LFR toolbox, a USS object obtained with the Robust Control toolbox, a SS/TF/ZPK object or a standard matrix. Note that the call sys=gss
can be used to create an empty GSS object.
M
and D
sys=gss(M,D)
M
is a SS/TF/ZPK object or a numeric array. D
is a $1\times N$ structured array with fields Name
, Type
, Size
, NomValue
, Bounds
, RateBounds
, Measured
, Normalization
and Misc
. Name
must be defined for each $\Delta_i$ block, whereas the other fields can be empty or omitted. Note that Type
and Size
are set to 'PAR'
and [1 1]
respectively if empty or omitted.
sys=gss('Property1',Value1,'Property2',Value2,...)
Name
, Type
, Size
, NomValue
, Bounds
, RateBounds
, Measured
, Normalization
and Misc
. Only Name
has to be defined. If undefined, Type
and Size
are set to 'PAR'
and [1 1]
respectively, whereas the other properties are left empty. Example: a=gss('Name','a','Type','PAR','Size',[1 1],'Bounds',[2 4])
sys=gss(Name,Type,Size,NomValue,Bounds,RateBounds,Measured,Normalization,Misc)
Name
has to be defined. If undefined, Type
and Size
are set to 'PAR'
and [1 1]
respectively, whereas the other properties are left empty. Example: a=gss('a','PAR',[1 1],[],[2 4])
sys=gss(Name,NomValue,Bounds,RateBounds)
Name
has to be defined. Type
, Size
, Measured
, Normalization
and Misc
are set to 'PAR'
, [1 1]
, 'no'
, []
and []
respectively. RateBounds
is set to [0 0]
if undefined. NomValue
and Bounds
are set to 0
and [-1 1]
if none are defined, whereas NomValue
is set to mean(Bounds)
if only Bounds
is defined and Bounds
is set to [NomValue-1 NomValue+1]
if only NomValue
is defined. Example: a=gss('a',[],[2 4])
Starting from R2014b, the output argument can be omitted when an elementary GSS object is created. In other words, gss('a',[],[2 4])
is a shortcut for a=gss('a',[],[2 4])
.
Int
and Delay
Int
and Delay
can be used to create elementary GSS objects such that $M(s)=1/s$ and $M(z)=1/z$ respectively, and $\Delta$ is empty. Example: Int=gss('Int')
plus
, minus
, uminus
, mtimes
, inv
, mrdivide
, mldivide
, mpower
, horzcat
, vertcat
, append
, ctranspose
, transpose
, ss
, tf
and feedback
can be applied to GSS objects. Type 'help gss/rname'
to get detailed information about the routine rname
.
'help sym2gss'
to get detailed information.
'help data2gss'
to get detailed information. See also the APRICOT library.Warning: A systematic order reduction is performed by default with the routine mingss
each time a GSS object is created or an elementary operation is applied to an existing GSS object (addition, multiplication, division, concatenation...). This setting can be changed using the routine setred
.
Warning: No systematic normalization is performed by default, but PAR
and LTI
blocks are normalized in case of inversion or inconsistency problem with the routine dbnorm
. This setting can be changed using the routine setnorm
.
Warning: In case of an unexpected error, use the routine checkgss
to check whether the considered GSS objects are consistent.