Identification Using Input-Output Data (Subspace System Identification Method)

Make sure the application is loaded.

<< NumericalControlMethods`

Load the collection of test examples.

<< NumericalControlMethods`Examples`

This is a discrete-time state-space model of a steam power system.

ss = SteamPowerSystem[]

The ratios of each Hankel singular value to the largest one identify the strong and weak modes.

hsv = SingularValues[
            CholeskyFactorControllabilityGramian[ss] . 
              Transpose[
                CholeskyFactorObservabilityGramian[
                  ss]]][[2]];

(hsv/Max)[hsv]

Here is a number of measurements that is enough to identify the system.

len = 60;

Make sure NormalDistribution is available.

<<Statistics`NormalDistribution`

This constructs the white noise input.

u = 
        Table[Random[
            NormalDistribution[0, 1]], {CountInputs[
              ss]}, {len}];

SimulationPlot[u, 
        Sampled -> Period[SamplingPeriod[ss]]];

This simulates the output response with random initial conditions.

y = 
        OutputResponse[ss, u, 
          InitialConditions -> 
            Table[Random[
                NormalDistribution[0, 1]], {CountStates[ss]}]];

SimulationPlot[y, 
        Sampled -> Period[SamplingPeriod[ss]]];

The multiplicative white noise of amplitude σ =  .01 is introduced into the impulse response.

σ = 0.01;

ny = 
        Map[#1 (1 + (Random[] -  .5) σ) &, 
          y, {2}];

The two weaker modes of this state-space system are obliterated by the added noise.

\(ss\&^ = 
      OutputResponseIdentify[u, ny, Sampled -> Period[1], 
        MaxOrder -> 6, Tolerance -> σ]\)

This Bode plot denotes the original and identified models by solid and dashed lines, respectively.

freq = {(10^(-2)), π};

\(\(DisplayTogetherGraphicsArray[BodePlot[ss, freq], 
        BodePlot[ss\&^, freq, 
          PlotStyle -> {{Dashing[{ .02}]}, {Dashing[{ .01,  .025}], 
                Thickness[ .01]}}]];\)\)