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:
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:
- 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:
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:
- 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: