nonstationary_nongaussian module

class SignalForge.nonstationary_nongaussian.NonStationaryNonGaussian(fpsd: ndarray, psd: ndarray, T: float, fs: float = None, dfpsd: float = 0.5, method: str = 'beta_am', params=None, name: str = '', var: str = 'x', unit: str = '$m/s^2$', seed: int = None, interp: str = 'lin')[source]

Bases: SingleChanSignal

Generate a non-stationary, non-Gaussian signal based on a given PSD. NonStationaryNonGaussian is a child class of SingleChanSignal.

Parameters:
  • fpsd – np.ndarray Frequency vector for the input PSD.

  • psd – np.ndarray Power spectral density values.

  • T – float Total duration of the signal [s].

  • fs – float, optional Wanted sampling frequency. If None -> 2*fpsd[-1]

  • dfpsd – float, optional Frequency resolution [Hz]. Default is 0.5.

  • method – str, optional Modulation method: ‘beta_am’, ‘ray_am’, ‘trapp_am’, or ‘fm’. Default is ‘beta_am’.

  • params – dict, optional Dictionary of parameters for the modulation method.

  • name – str, optional Name of the signal.

  • str (var) – Variable symbol, e.g., ‘x’.

  • optional – Variable symbol, e.g., ‘x’.

  • unit – str, optional Signal unit. Default is ‘$m/s^2$’.

  • seed – int, optional Random seed for reproducibility.

  • interp – str, optional PSD interpolation method: ‘lin’ or ‘log’. Default is ‘lin’.

plot_carrier(ax=None, ylims=None, xlims=None)[source]

Plot the modulation carrier used to transform the Gaussian signal. :param ax: Axis to plot on. Creates a new one if None. :type ax: matplotlib.axes.Axes, optional :param ylims: y-axis limits. :type ylims: tuple, optional :param xlims: x-axis limits. :type xlims: tuple, optional

Returns:

ax – The axes with the plotted carrier.

Return type:

matplotlib.axes.Axes

SignalForge.nonstationary_nongaussian.get_beta_amplitude_modulation(gauss_signal: ndarray, T: float, input_kurtosis: float, flims: list = None, seed: int = None)[source]

Apply beta-distributed amplitude modulation to a Gaussian signal.

Parameters:
  • gauss_signal (array-like) – Input Gaussian signal.

  • T (float) – Signal duration in seconds.

  • input_kurtosis (float or array-like) – Desired kurtosis of the output signal.

  • flims (tuple, optional) – Frequency limits for banded modulation.

  • seed (int, optional) – Seed for random number generation.

Returns:

  • nonstat_signal (np.ndarray) – Non stationary resulting signal

  • carrier (dict) – Dictionary containing “name” of carrier and “carrier” time history

Source

  1. Smallwood, «Vibration with Non-Gaussian Noise», J. IEST, vol. 52, fasc. 2, pp. 13–30, ott. 2009, doi: 10.17764/jiet.52.2.gh0444564n8765k1.

SignalForge.nonstationary_nongaussian.get_frequency_modulation(Sx: ndarray, SFT: ShortTimeFFT, modulation_function: ndarray)[source]

Apply frequency shift modulation to a spectrogram Sx using a given modulation function.

Parameters:
  • Sx (np.ndarray) – Input spectrogram (complex-valued).

  • SFT (sp.signal.ShortTimeFFT) – Object with STFT/ISTFT functionality and attributes delta_t, f.

  • modulation_function (array-like) – Frequency shift values over time.

Returns:

  • nonstat_signal (np.ndarray) – Non stationary resulting signal

  • carrier (dict) – Dictionary containing “name” of carrier and “carrier” time history

Source

  1. Clerc e S. Mallat, «Estimating deformations of stationary processes», Ann. Stat., vol. 31, fasc. 6, dic. 2003, doi: 10.1214/aos/1074290327.

SignalForge.nonstationary_nongaussian.get_rayleigh_amplitude_modulation(gauss_signal: ndarray, T: float, input_kurtosis: float, flims: list = None, seed: int = None)[source]

Apply Rayleigh-distributed amplitude modulation to a Gaussian signal.

Parameters:
  • gauss_signal (array-like) – Input Gaussian signal.

  • T (float) – Signal duration in seconds.

  • input_kurtosis (float or array-like) – Desired kurtosis of the output signal.

  • flims (tuple, optional) – Frequency limits for banded modulation.

  • seed (int, optional) – Seed for random number generation.

Returns:

  • nonstat_signal (np.ndarray) – Non stationary resulting signal

  • carrier (dict) – Dictionary containing “name” of carrier and “carrier” time history

Source

  1. Smallwood, «Vibration with Non-Gaussian Noise», J. IEST, vol. 52, fasc. 2, pp. 13–30, ott. 2009, doi: 10.17764/jiet.52.2.gh0444564n8765k1.

SignalForge.nonstationary_nongaussian.get_trapp_amplitude_modulation(gauss_signal: ndarray, T: float, input_kurtosis: float, flims: list = None, seed: int = None)[source]

Apply Gaussian-envelope-based amplitude modulation using a transformed power-law Rayleigh carrier.

Parameters:
  • gauss_signal (array-like) – Input Gaussian signal.

  • T (float) – Duration in seconds.

  • input_kurtosis (float) – Desired signal kurtosis.

  • flims (tuple, optional) – Placeholder for banded modulation (not yet implemented).

  • seed (int, optional) – Random seed for reproducibility.

Returns:

  • nonstat_signal (np.ndarray) – Non stationary resulting signal

  • carrier (dict) – Dictionary containing “name” of carrier and “carrier” time history

Source

  1. Trapp, M. J. Makua, e P. Wolfsteiner, «Fatigue assessment of amplitude-modulated non-stationary random vibration loading», Procedia Struct. Integr., vol. 17, pp. 379–386, 2019, doi: 10.1016/j.prostr.2019.08.050.