control.markov

control.markov(Y, U, m=None, transpose=False)[source]

Calculate the first m Markov parameters [D CB CAB …] from input U, output Y.

This function computes the Markov parameters for a discrete time system

x[k+1] &= A x[k] + B u[k] \\
y[k] &= C x[k] + D u[k]

given data for u and y. The algorithm assumes that that C A^k B = 0 for k > m-2 (see [1]). Note that the problem is ill-posed if the length of the input data is less than the desired number of Markov parameters (a warning message is generated in this case).

Parameters
  • Y (array_like) – Output data. If the array is 1D, the system is assumed to be single input. If the array is 2D and transpose=False, the columns of Y are taken as time points, otherwise the rows of Y are taken as time points.

  • U (array_like) – Input data, arranged in the same way as Y.

  • m (int, optional) – Number of Markov parameters to output. Defaults to len(U).

  • transpose (bool, optional) – Assume that input data is transposed relative to the standard Time series data. Default value is False.

Returns

H – First m Markov parameters, [D CB CAB …]

Return type

ndarray

References

1

J.-N. Juang, M. Phan, L. G. Horta, and R. W. Longman, Identification of observer/Kalman filter Markov parameters - Theory and experiments. Journal of Guidance Control and Dynamics, 16(2), 320-329, 2012. http://doi.org/10.2514/3.21006

Notes

Currently only works for SISO systems.

This function does not currently comply with the Python Control Library Time series data for representation of time series data. Use transpose=False to make use of the standard convention (this will be updated in a future release).

Examples

>>> T = numpy.linspace(0, 10, 100)
>>> U = numpy.ones((1, 100))
>>> T, Y, _ = forced_response(tf([1], [1, 0.5], True), T, U)
>>> H = markov(Y, U, 3, transpose=False)