The fdd module

This module is a part of the pyOMA2 package and provides utility functions for conducting Operational Modal Analysis (OMA) using Frequency Domain Decomposition (FDD) algorithm [BZA01], Enhanced Frequency Domain Decomposition (EFDD) algorithm [BVA01] and Frequency Spatial Domain Decomposition (FSDD) algorithm [ZWT10].

Functions:
  • SD_PreGER(): Estimates Power Spectral Density matrices for multi-setup experiments.

  • SD_est(): Computes Cross-Spectral Density using correlogram or periodogram methods.

  • SD_svalsvec(): Calculates singular values and vectors for Cross-Spectral Density matrices.

  • FDD_mpe(): Extracts modal parameters using the FDD method.

  • SDOF_bellandMS(): Utility function for EFDD and FSDD methods.

  • EFDD_mpe(): Extracts modal parameters using EFDD and FSDD methods.

Frequency Domain Decomposition (FDD) Utility Functions module. Part of the pyOMA2 package. Author: Dag Pasca

pyoma2.functions.fdd.EFDD_mpe(Sy: ndarray, freq: ndarray, dt: float, sel_freq: Sequence[float], methodSy: str, method: str = 'FSDD', DF1: float = 0.1, DF2: float = 1.0, cm: int = 1, MAClim: float = 0.85, sppk: int = 3, npmax: int = 20) Tuple[ndarray, ndarray, ndarray, List[Any]][source]

Extracts modal parameters using the Enhanced Frequency Domain Decomposition (EFDD) and Frequency Spatial Domain Decomposition (FSDD) algorithms.

Parameters:
  • Sy (ndarray) – Spectral matrix with dimensions [Nch, Nch, Nf] where Nch is the number of channels and Nf is the number of frequency points.

  • freq (ndarray) – Array of frequency values corresponding to the spectral matrix.

  • dt (float) – Sampling interval of the data.

  • sel_freq (sequence of float) – Selected modal frequencies around which parameters are to be estimated.

  • methodSy (str) – Method used for spectral density estimation: - ‘cor’ for correlation - ‘per’ for periodogram

  • method (str, optional) – Specifies the SDOF analysis method (‘FSDD’ or ‘EFDD’). Default is ‘FSDD’.

  • DF1 (float, optional) – Frequency bandwidth for initial FDD modal parameter extraction. Default is 0.1.

  • DF2 (float, optional) – Frequency bandwidth for SDOF analysis. Default is 1.0.

  • cm (int, optional) – Number of close modes to consider. Default is 1.

  • MAClim (float, optional) – Threshold for the Modal Assurance Criterion (MAC) to filter modes. Default is 0.85.

  • sppk (int, optional) – Number of initial peaks to skip in autocorrelation analysis. Default is 3.

  • npmax (int, optional) – Maximum number of peaks to consider in the curve fitting for damping ratio estimation. Default is 20.

Returns:

  • Fn (ndarray) – Estimated natural frequencies [Hz].

  • Xi (ndarray) – Estimated damping ratios.

  • Phi (ndarray) – Mode shapes array of shape [Nch, Nm], where Nm = len(sel_freq).

  • PerPlot (list) – List of per-mode metadata for plotting and analysis. Each element is a list: [freq, time, SDOF bell, Sval, idSV, normalized autocorr,

    peak indices, fitted lambda, log-decrement values].

pyoma2.functions.fdd.FDD_mpe(Sval, Svec, freq, sel_freq, DF=0.1)[source]

Extracts modal parameters using the Frequency Domain Decomposition (FDD) method.

Parameters:
  • Sval (ndarray) – A 3D array of singular values. Dimensions are [Nch, Nref, Nf], where Nch is the number of channels, Nref is the number of reference channels, and Nf is the number of frequency points.

  • Svec (ndarray) – A 3D array of singular vectors corresponding to Sval. Dimensions are the same as Sval.

  • freq (ndarray) – 1D array of frequency values corresponding to the singular values and vectors.

  • sel_freq (list or ndarray) – Selected frequencies around which modal parameters are to be extracted.

  • DF (float, optional) – Frequency bandwidth around each selected frequency within which the function searches for a peak. Default is 0.1.

Returns:

Fnndarray

Extracted modal frequencies.

Phindarray

Corresponding normalized mode shapes (each column corresponds to a mode shape).

Return type:

tuple

Note

The function assumes that the first singular value and vector correspond to the dominant mode at each frequency point.

pyoma2.functions.fdd.SDOF_bellandMS(Sy, dt, sel_fn, phi_FDD, method='FSDD', cm=1, MAClim=0.85, DF=1.0)[source]

Computes the SDOF bell and mode shapes for a specified frequency range using FSDD or EFDD methods.

Parameters:
  • Sy (ndarray) – Spectral matrix of the system. Expected dimensions are [Nch, Nch, Nf], where Nch is the number of channels and Nf is the number of frequency points.

  • dt (float) – Time interval of the data sampling.

  • sel_fn (float) – Selected modal frequency around which the SDOF analysis is to be performed.

  • phi_FDD (ndarray) – Mode shape corresponding to the selected modal frequency.

  • method (str, optional) – Method for SDOF analysis. Supports ‘FSDD’ for Frequency Spatial Domain Decomposition and ‘EFDD’ for Enhanced Frequency Domain Decomposition. Default is ‘FSDD’.

  • cm (int, optional) – Number of close modes to consider in the analysis. Default is 1.

  • MAClim (float, optional) – Threshold for the Modal Assurance Criterion (MAC) to filter modes. Default is 0.85.

  • DF (float, optional) – Frequency bandwidth around the selected frequency for analysis. Default is 1.0.

Returns:

SDOFbell1ndarray

The SDOF bell (power spectral density) of the selected mode.

SDOFms1ndarray

The mode shapes corresponding to the SDOF bell.

Return type:

tuple

pyoma2.functions.fdd.SD_PreGER(Y: List[Dict[str, ndarray]], fs: float, nxseg: int = 1024, pov: float = 0.5, method: Literal['per', 'cor'] = 'per')[source]

Estimate the PSD matrix for a multi-setup experiment using either the correlogram method or the periodogram method.

Parameters:
  • Y (list of dicts) – A list where each element corresponds to a different setup. Each element is a dictionary with keys ‘ref’ and ‘mov’ for reference and moving sensor data, respectively. Each should be a numpy array with dimensions [N x M], where N is the number of sensors and M is the number of data points.

  • fs (float) – Sampling frequency of the data.

  • nxseg (int, optional) – Number of data points in each segment for spectral analysis. Default is 1024.

  • pov (float, optional) – Proportion of overlap between segments in spectral analysis. Default is 0.5.

  • method (str, optional) – Method for spectral density estimation. ‘per’ for periodogram and ‘cor’ for correlogram method. Default is ‘per’.

Returns:

freqndarray

Array of frequency values at which the spectral densities are evaluated.

Syndarray

The scaled spectral density matrices. The shape of the array is [N x N x K], where N is the total number of sensors (reference + moving) and K is the number of frequency points.

Return type:

tuple

Note

The function uses an internal function ‘SD_Est’ to estimate the spectral densities. The logger is used for debugging purposes to track the progress of analysis.

pyoma2.functions.fdd.SD_est(Yall, Yref, dt, nxseg=1024, method='cor', pov=0.5)[source]

Estimate the Cross-Spectral Density (CSD) using either the correlogram method or the periodogram method.

Parameters:
  • Yall (ndarray) – Input signal data.

  • Yref (ndarray) – Reference signal data.

  • dt (float) – Sampling interval.

  • nxseg (int, optional) – Length of each segment for CSD estimation. Default is 1024.

  • method (str, optional) – Method for CSD estimation, either “cor” for correlogram method or “per” for periodogram. Default is “cor”.

  • pov (float, optional) – Proportion of overlap for the periodogram method. Default is 0.5.

Returns:

freqndarray

Array of frequencies.

Syndarray

Cross-Spectral Density (CSD) estimation.

Return type:

tuple

pyoma2.functions.fdd.SD_svalsvec(SD)[source]

Compute the singular values and singular vectors for a given set of Cross-Spectral Density (CSD) matrices.

Parameters:

SD (ndarray) – Array of Cross-Spectral Density (CSD) matrices, with shape (number_of_rows, number_of_columns, number_of_frequencies).

Returns:

S_valndarray

Singular values.

S_vecndarray

Singular vectors.

Return type:

tuple