SDT-base         Contents     Functions         Previous Next     PDF Index

nor2res, nor2ss, nor2xf


Transformations from normal mode models to other model formats.


[res,po,psib,cpsi] = nor2res( ... )     % sdtweb('res') for format 
               RES = nor2res( ... )
         [a,b,c,d] = nor2ss ( ... )     % sdtweb('ss') for format 
               SYS = nor2ss ( ... )
                xf = nor2xf ( ... )     % sdtweb('xf') for format
               ... = nor2.. (DEF,MODEL, ... )      % high level input
               ... = nor2.. (DEF,ga,MODEL, ... )
               ... = nor2.. (ga,om,pb,cp, ... )    % low level input
         ... = nor2ss ( ... , ind,fc,OutputCmd) % frequency,truncation...
         ... = nor2xf ( ... , w,ind,fc,OutputCmd)


These functions provide detailed access, for simple high level calls see fe2ss. Normal mode models are second order models detailed in the Theory section below. nor2res, nor2ss, and nor2xf provide a number of transformations from the normal mode form to residue, state-space, and transfer function formats.

The normal mode model is specified using either high level structure arguments DEF,MODEL (where the model is assumed to contain load and sensor case entries) or low level numeric arguments om,ga,pb,cp. Additional arguments w,ind,fc,OutputCmd can or must be specified depending on the desired output. These arguments are listed below.


The normal mode shapes are given in a DEF structure with fields .def, .DOF, .data (see section 7.8).

These mode shapes are assumed mass normalized and the first column of the .data field is assumed to give modal frequencies in Hz. They can be computed with fe_eig or imported from an external FEM code (see FEMLink). See also fe2ss.

Damping can be declared in different ways

Inputs and outputs are described by a model containing a Case (see section 4.5). Giving the model is needed when inputs correspond to distributed loads (FVol or FSurf case entries detailed under fe_load). SensDof are the only output entries currently supported (see fe_case).

Note that DofSet entries are handled as acceleration inputs. The basis described by DEF must allow a correct representation of these inputs. This can be achieved by using a basis containing static corrections for unit displacements or loads on the interface (see fe2ss CraigBampton or Free commands). A proper basis can also be generated using acceleration inputs at single nodes where a large seismic mass is added to the model. This solution is easier to implement when dealing with external FEM codes.


Here is a sample call that compares responses for two damping levels

InDof=[4.03;55.03;2.03]; OutDof=[4 55 30]'+.03;
model=fe_case(model, ...
             'DofLoad','Force',InDof, ...
model=stack_set(model,'info','Freq',freq, ...
    'info','DefaultZeta',.01); % Ignored when,2) exists
nor2xf(def,model,'acc iiplot "Test" -po -reset');

% Another variation
 % define variable damping in,2),1)<30,2)=.005; % 0.5% damping below 30 Hz,1)>30,2)=.02;  % 2% damping above 30 Hz
 % Truncate to first 10 modes (static correction is lost)
 % Define inputs and ouputs using DOFs (less general than fe_case)
 nor2xf(d1,InDof,OutDof,freq,'acc iiplot "Variable damping"');

When using distributed loads (pressure, etc.), the model elements are needed to define the load so that the model rather than a Case must be given as in the following example

model = demosdt('demo ubeam');
def=fe_eig(model,[106 20 10000 11 1e-5]);

%Pressure load
data=struct('sel','x==-.5', ... 
    'eltsel','withnode {z>1.25}','def',1,'DOF',.19);
model=fe_case(model,'Fsurf','Surface load',data)


nor2xf(def,0.01,model,'iiplot "Test" -po -reset');

Example of transmissibility prediction using the large mass method where one defines a rigid base and a large mass such that one has 6 rigid body modes and fixed interface modes

model = demosdt('demo ubeam');

% define rigid base
i1=feutil('findnode z==0',model); 
model = fe_case(model,'reset', ...
 'rigid append','Base',[i1(1);123456;i1(2:end)]);
% Add large mass on the base
model.Elt(end+[1:2],1:7)=[Inf abs('mass1') 0;
  i1(1) [1 1 1 1 1 1]*1e6];

def=fe_eig(model,[5 20 1e3]);  % This can be computed elsewhere

% Transmissibility for unit acceleration along x
model=fe_case(model,'DofSet','IN', ...
 struct('def',[1;0;0;0;0;0],'DOF',i1(1)+[1:6]'/100), ...
nor2xf(def,.01,model,f,'acc iiplot "Trans-Large" -reset');

% Clean approach without the large mass
mo2=stack_set(model,'info','EigOpt',[5 14 1e3]);
SE=fe_reduc('CraigBampton -se',model);  % craig-bampton reduction
% Free modes of Craig-Bampton basis
TR=fe_eig({SE.K{:} SE.DOF});TR.DOF=SE.TR.DOF;TR.def=SE.TR.def*TR.def;

nor2xf(TR,.01,model,f,'acc iiplot "Trans-Craig"');


Standard low level arguments om (modal stiffness matrix), ga (modal viscous damping matrix), pb (modal controllability) and cp (modal observability) used to describe normal mode models are detailed in section section 5.2. A typical call using this format would be

b = fe_c(def.DOF,[4.03;55.03])'; c = fe_c(def.DOF,[1 30 40]'+.03);
nor2xf(,0.01,def.def'*b,c*def.def,IIw*2*pi, ...
  'Hz iiplot "Simul" -po -reset');


Other arguments are


nor2res returns a complex mode model in the residue form


This routine is particularly useful to recreate results in the identified residue form res for comparison with direct identification results from id_rc.

Pole residue models are always assumed to correspond to force to displacement transfer functions. Acceleration input or velocity, acceleration output specifications are thus ignored.


nor2ss returns state-space models (see the theory section below).

When no roll-off frequency is specified, nor2ss introduces a correction, for displacement only, in the state-space models through the use of a non-zero d term. If a roll-off frequency fc is given, the static correction is introduced in the state-space model through the use of additional high frequency modes. Unlike the non-zero D term which it replaces, this correction also allows to correct for velocity contributions of truncated modes.

You can also specify fc as a series of poles (as many as inputs) given in the frequency/damping format (see ii_pof).

You force use of SDT structure and rather than Control Toolbox LTI object using setpref('SDT','UseControlToolbox',0). You can convert between formats using ss_lti=nor2ss('ss2struct',ss_sdt) or ss_sdt=nor2ss('ss2struct',ss_lti).


nor2xf computes FRF (from u to y) associated to the normal mode model. When used with modal frequencies freq and a subset of the modes (specified by a non empty ind), nor2xf introduces static corrections for the truncated modes.


SDT uses fields lab_in and lab_out, while the control toolbox objects use InputName and OutputName. The commands lab_in are used to robust handling based on the object type.

lab_in =nor2ss('lab_in', sys) % Get in
lab_out=nor2ss('lab_out',sys) % Get out
sys=nor2ss('lab_in' ,sys,lab_in)  % Set in
sys=nor2ss('lab_out',sys,lab_out) % Set out


Robust transformations from MATLAB objects to SDT struct.

s2 =nor2ss('ss2struct', sys,RO) % Get in
s2 =nor2ss('ss2struct',fname,RO) % read in file

The option structure RO if provided may contain fields


The basic normal mode form associated with load inputs [b]{u} is (see section 5.2)


where the coordinates p are such that the mass is the identity matrix and the stiffness is the diagonal matrix of frequencies squared.

The associated state-space model has the form


When used with modal frequencies wj and a subset of the modes (specified by ind), nor2ss introduces static corrections for the truncated modes. When requesting velocity or acceleration output, static correction can only be included by using additional modes.

In cases with displacement output only, the static corrections are ranked by decreasing contribution (using a SVD of the d term). You can thus look at the input shape matrix b to see whether all corrections are needed.

nor2ss (and nor2xf by calling nor2ss) supports the creation of state-space models of transmissibilities (transfer functions from acceleration input to displacement, velocity or acceleration. For such models, one builds a transformation such that the inputs ua associated with imposed accelerations correspond to states


and solves the fixed interface eigenvalue problem


leading to basis which is used to build the state space model


Simple adjustments lead to velocity and acceleration outputs.

When using acceleration input, care must be taken that the initial shapes of the normal mode model form an appropriate basis. This can be achieved by using a basis containing static corrections for unit displacements or loads on the interface (see fe2ss CraigBampton or Free commands) or a seismic mass technique.

See also

res2nor, id_nor, fe_c, psi2nor


©1991-2024 by SDTools
Previous Up Next