Decompose Model into Fast and Slow Dynamics
Load a dynamic system model.
load numdemo Pd bode(Pd)
Pd has four complex poles and one real pole. The Bode plot shows a resonance around 210 rad/s and a higher-frequency resonance below 10,000 rad/s.
Decompose this model around 1000 rad/s to separate these two resonances.
[Gs,Gf] = freqsep(Pd,10^3); bode(Pd,Gs,Gf) legend('original','slow','fast','Location','Southwest')
The Bode plot shows that the slow component,
Gs, contains only the lower-frequency resonance. This component also matches the DC gain of the original model. The fast component,
Gf, contains the higher-frequency resonances and matches the response of the original model at high frequencies. The sum of the two components
Gs+Gf yields the original model.
Separate Nearby Modes by Adjusting Tolerance
Decompose a model into slow and fast components between poles that are closely spaced.
The following system includes a real pole and a complex pair of poles that are all close to s = -2.
G = zpk(-.5,[-1.9999 -2+1e-4i -2-1e-4i],10);
Try to decompose the model about 2 rad/s, so that the slow component contains the real pole and the fast component contains the complex pair.
[Gs,Gf] = freqsep(G,2);
Warning: One or more fast modes could not be separated from the slow modes. To force separation, relax the accuracy constraint by increasing the "SepTol" factor (see "freqsepOptions" for details).
These poles are too close together for
freqsep to separate. Increase the relative tolerance to allow the separation.
[Gs,Gf] = freqsep(G,2,SepTol=5e10);
freqsep successfully separates the dynamics.
slowpole = pole(Gs)
slowpole = -1.9999
fastpole = pole(Gf)
fastpole = 2×1 complex -2.0000 + 0.0001i -2.0000 - 0.0001i
Decompose State-Space Model to Obtain Modes in Frequency Range
This example shows how to decompose a model and retain the modes in a specified frequency range using
Load the model
Gms and examine its frequency response.
load modeselect Gms bodeplot(Gms)
freqsep to retain the dynamics in the frequency range 0.1 rad/s to 50 rad/s.
[G1,G2] = freqsep(Gms,[0.1,50]);
In this decomposition, the output
G1 contains all poles with natural frequency in the range
G2 contains the remaining poles.
G — Dynamic system to decompose
numeric LTI model
Dynamic system to decompose, specified as a numeric LTI model,
such as a
Specify optional pairs of arguments as
the argument name and
Value is the corresponding value.
Name-value arguments must appear after other arguments, but the order of the
pairs does not matter.
[G1,G2] = freqsep(G,2,SepTol=100)
SepTol — Accuracy loss factor
10 (default) | nonnegative scalar
Accuracy loss factor for slow-fast decomposition, specified as a
nonnegative scalar value.
freqresp ensures that the
frequency responses of the original system,
the sum of the decomposed systems
G1+G2, differ by no
SepTol times the absolute accuracy of the
computed value of
SepTol helps separate modes straddling the
slow/fast boundary at the expense of accuracy.
info — Additional information
Additional information about the decomposition, returned as structure with these fields.
|Left-side matrix of the block-diagonalizing transformation, returned as a matrix with dimensions Nx-by-Nx, where Nx is the number of states in the model G.|
|Right-side matrix of the block-diagonalizing transformation, returned as a matrix with dimensions Nx-by-Nx, where Nx is the number of states in the model G.|
The algorithm transforms the state-space realization
(A, B, C,
D) of the model
The function returns an empty value
 for this
argument when the input model
G is not a state-space
Version HistoryIntroduced in R2014a
R2023b: New syntax
Use the new syntax
[G1,G2] = freqsep(G,[fmin,fmax]) to obtain a
G1 contains all poles with natural
frequency in the range
contains the remaining poles.
R2023b: Use simplified syntax
Starting in R2023b, you can specify the
directly as a name-value argument. For example:
[G1,G2] = freqsep(G,2,SepTol=1e9);
As a result of this change,
freqsepOptions and the syntax
[Gs,Gf] = freqsep(G,fcut,options) are not recommended.