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