pyOMA.core.SSIData.SSIDataCV#

class pyOMA.core.SSIData.SSIDataCV(*args, **kwargs)[source]#

Bases: SSIDataMC

__init__(*args, **kwargs)#

channel definition: channels start at 0

Methods

__init__(*args, **kwargs)

channel definition: channels start at 0

build_block_hankel([num_block_rows, ...])

Builds serveral Block-Hankel Matrices of the measured time series with varying time lags and estimates the subspace matrices from their LQ decompositions.

compute_modal_params([max_model_order, j, ...])

Perform a multi-order computation of modal parameters.

estimate_state(order)

Estimate the state matrices A, C and noise covariances Q, R and S from the subspace / projection matrix.

init_from_config(conf_file, prep_signals)

A method for initializing a modal object from configuration data bypassing common operations in explicit code for semi-automated analyses

integrate_quantities(vector, accel_channels, ...)

Rescales mode shapes from modal accelerations / velocities to modal displacements, by multiplication of the relevant modal coordinates (where accelerometers, or velocimeters were used, with $-1 omega^2$ or $i omega$, respectively,

load_state(fname, prep_signals)

Loads the state of the object from a compressed numpy archive file and returns the object This is only a stub for reimplementing the method in a derived class

modal_analysis(A, C[, rescale_fun])

Computes the modal parameters from a given state space model as described by Peeters 1999 and Döhler 2012.

remove_conjugates(eigval[, eigvec_r, ...])

This method finds complex conjugate modes, and removes unstable and overdamped poles.

rescale_mode_shape(modeshape[, rotate_only])

Rescales and rotates modeshapes in the complex plane.

save_state(fname)

Saves the state of the object to a compressed numpy archive file This is only a stub for reimplementing the method in a derived class

synthesize_signals(A, C, Q, R, S[, ...])

Computes the modal response signals and the contribution of each mode.

build_block_hankel(num_block_rows=None, num_blocks=1, training_blocks=None, reduced_projection=True)[source]#

Builds serveral Block-Hankel Matrices of the measured time series with varying time lags and estimates the subspace matrices from their LQ decompositions. Uniqueness of the subspace estimates is ensured by an intermediate LQ decomposition, where the diagonals of the L matrices are constrained to positive values. A subspace matrix estimate is computed by the mean over the training blocks leaving any remainig blocks for validation.

Note: Blocks are not completely i.i.d. as we borrow p+q timesteps from the previous block for the projection of a full block (assembly of Hankel matrix)

Todo

  • investigate correct scaling of the subspace matrices [sqrt(N_b), sqrt(N_b * num_blocks), sqrt(N_b*n_training_blocks)] ?

  • use sparse SVD (scipy.sparse.svds) to save memory and cpu time

Parameters:
  • num_block_rows (integer, required) – The number of block rows of the Subspace matrix

  • num_blocks (integer, optional) – The number of blocks, used for cross-validation

  • training_blocks (list, optional) – The selected blocks to use for system identification (=training)

synthesize_signals(A, C, Q, R, S, validation_blocks=None, N_offset=None, **kwargs)[source]#

Computes the modal response signals and the contribution of each mode. The algorithm follows Peeters 1999 and the Lyapunov equation is solved as a discrete-time algebraic Riccati equation (DARE). For long signals, the computation may become time-consuming, thus only time steps up to j may be used to synthesize the signal.

Parameters:
  • A (numpy.ndarray) – State matrix: Array of shape (order, order)

  • C (numpy.ndarray) – Output matrix: Array of shape (num_analised_channels, order)

  • Q (numpy.ndarray) – state noise covariance matrix: Symmetric array of shape (order, order)

  • R (numpy.ndarray) – signal noise covariance matrix: Array of shape (num_analised_channels, num_analised_channels)

  • S (numpy.ndarray) – system noise - signal noise covariance matrix: Array of shape (order, num_analised_channels)

  • validation_blocks (list, optional) – The selected blocks to be synthethized and used for system validation.

  • N_offset (integer, optional) – The number of samples to be used from any previous block for Kalman-Filter startup.

Returns:

  • sig_synth (numpy.ndarray, shape (num_analised_channels, j, order // 2)) – Array holding the modally decomposed input signals for each channel n_l and all modes

  • modal_contributions (numpy.ndarray, shape (order, )) – Array holding the contributions of each mode to the input signals.