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: list, 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][source]
Extracts modal parameters using the Enhanced Frequency Domain Decomposition (EFDD) and the 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 (list or ndarray) – Selected modal frequencies around which parameters are to be estimated.
methodSy (str) – Method used for spectral density estimation (‘cor’ for correlation or ‘per’ for periodogram).
method (str, optional) – Specifies the method for SDOF analysis (‘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:
- Fnndarray
Estimated natural frequencies.
- Xindarray
Estimated damping ratios.
- Phindarray
Corresponding mode shapes.
- PerPlotlist
Additional data for plotting and analysis, including frequency response, time, SDOF bell, singular values, indices of singular values, normalized autocorrelation, indices of peaks, damping ratio fit parameters, and delta values.
- Return type:
- 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: