stationary_nongaussian module
- class SignalForge.stationary_nongaussian.StationaryNonGaussian(fpsd: ndarray, psd: ndarray, T: float, kurtosis: int, flims: list = None, fs: float = None, dfpsd: float = 0.5, skewness: int = 0, method: str = 'winter', params=None, name: str = '', var: str = 'x', unit: str = '$m/s^2$', seed: int = None, interp: str = 'lin')[source]
Bases:
SingleChanSignalGenerates a stationary non-Gaussian signal with specified skewness and kurtosis using a transformation method applied to a Gaussian signal with a target PSD. StationaryNonGaussian is a child class of SingleChanSignal.
- Parameters:
fpsd (np.ndarray) – frequency vector of the power spectral density
psd (np.ndarray) – power density vector of the power spectral density
T (float) – time length of the signal
kurtosis (int) – input kurtosis for the transformation model
dfpsd (float) – frequency discretization of the psd to be stored
skewness (int) – input kurtosis for the transformation model
method (str) – tranformation method to be used for generating the non-gaussian signal
params (dict) – optional parameters for the transformation model if optimization wants to be skipped
name (str) – name of the process (used for plots)
var (str) – name of the variable (used for plots)
unit (str) – unit of measure of the signal (used for plots)
seed (int) – seed for the random generator used in non-gaussian models
interp ('lin' or 'log') – interpolation rule for increasing resolution on given PSD
- SignalForge.stationary_nongaussian.get_cubic_polynomial(signal: ndarray, input_kurtosis: float, input_skewness: float = 0, params=None)[source]
Applies a cubic polynomial transformation to a Gaussian signal to match specified skewness and kurtosis.
- Parameters:
signal (np.ndarray) – Input Gaussian signal.
input_kurtosis (float) – Target excess kurtosis (e.g. 0 for Gaussian, >0 for leptokurtic).
input_skewness (float) – Target skewness.
params (dict {'a': [a0, a1, a2, a3]}, optional) – Bypass optimization with given parameters.
- Returns:
ng_signal (np.ndarray) – Transformed non-Gaussian signal, rescaled to match input RMS.
opt_params (dict) – Dictionary of optimal parameters {‘a’: [a0, a1, a2, a3]}.
- SignalForge.stationary_nongaussian.get_sarkani(signal: ndarray, input_kurtosis: float, input_skewness: float = 0, params=None)[source]
Applies Sarkani’s transformation to achieve a desired kurtosis and skewness.
- Parameters:
signal (np.ndarray) – Input Gaussian signal.
input_kurtosis (float) – Target kurtosis.
input_skewness (float, optional) – Target skewness. If None, assumes symmetry.
param (dict {'b1': float, 'b2': float}) – Transformation parameters to bypass the optimization procedure
- Returns:
ng_signal (np.ndarray) – Transformed signal
opt_params (dict) – Dictionary of optimal parameters
Source
Sarkani, D. P. Kihl, e J. E. Beach, «Fatigue of welded joints under narrowband non-Gaussian loadings», Probabilistic Eng. Mech., vol. 9, fasc. 3, pp. 179–190, gen. 1994, doi: 10.1016/0266-8920(94)90003-5.
- SignalForge.stationary_nongaussian.get_smallwood(fpsd: ndarray, psd: ndarray, T: float, input_kurtosis: float, input_skewness: float = None, seed: int = None, params=None)[source]
Uses the Smallwood filtered poisson shot to achieve a desired kurtosis.
- Parameters:
fpsd (np.ndarray) – Frequency vector of the power spectral density
psd (np.ndarray) – Power density vector of the power spectral density
T (float) – Time length of the final signal
input_kurtosis (float) – Target kurtosis.
input_skewness (float, optional) – Target skewness. If None, assumes symmetry.
seed (int) – Seed for the random generator for the Poisson shot times and amplitudes.
param (dict {'lam': float, 'I': float, 'seed': int}) – Transformation parameters to bypass the optimization procedure
- Returns:
ng_signal (np.ndarray) – Transformed signal
opt_params (dict) – Dictionary of optimal parameters
Source
Smallwood, «Generation of Stationary Non-Gaussian Time Histories with a Specified Cross-spectral Density», Shock Vib., vol. 4, fasc. 5–6, pp. 361–377, 1997, doi: 10.1155/1997/713593.
- SignalForge.stationary_nongaussian.get_steinwolf(signal: ndarray, fs: float, input_kurtosis: float, input_skewness: float = None, params=None)[source]
Applies the Steinwolf phase transformation to achieve a desired kurtosis.
- Parameters:
signal (np.ndarray) – Input Gaussian signal.
fs (float) – Sampling frequency of the signal
input_kurtosis (float) – Target kurtosis (3 = Gaussian; >3 = leptokurtic / high peaks).
input_skewness (float, optional) – Target skewness. If None, assumes symmetry.
params (dict {'nd': int, 'seed': int}) – Transformation parameters to bypass the optimisation procedure.
- Returns:
ng_signal (np.ndarray) – Transformed signal with the desired kurtosis.
opt_params (dict) – Dictionary of optimal parameters {‘nd’: int, ‘seed’: int}.
Source
Steinwolf, «Random vibration testing with kurtosis control by IFFT phase manipulation», Mech. Syst. Signal Process., vol. 28, pp. 561–573, apr. 2012, doi: 10.1016/j.ymssp.2011.11.001.
- SignalForge.stationary_nongaussian.get_vanbaren(fpsd: ndarray, psd: ndarray, T: float, input_kurtosis: float, input_skewness: float = 0, seed: int = None, params: dict = None)[source]
Uses the Van Baren filtered Poisson shot noise to achieve a desired kurtosis.
- Parameters:
fpsd (np.ndarray) – Frequency vector of the power spectral density.
psd (np.ndarray) – Power spectral density vector.
T (float) – Time length of the final signal [s].
input_kurtosis (float) – Target excess kurtosis (e.g. 3 for Gaussian).
input_skewness (float, optional) – Target skewness. Only 0 is supported (symmetric process). Default is 0.
seed (int, optional) – Seed for reproducibility of Poisson shot times and amplitudes.
params (dict {'alpha': float, 'seed': int}, optional) – Bypass optimization with given parameters.
- Returns:
ng_signal (np.ndarray) – Transformed non-Gaussian signal scaled to match input RMS.
opt_params (dict) – Dictionary of optimal parameters {‘alpha’: float, ‘seed’: int}.
Source
Van Baren, ‘System and method for simultaneously controlling spectrum and kurtosis of a random vibration’, US20070185620.
- SignalForge.stationary_nongaussian.get_winterstein(signal: ndarray, input_skewness: float, input_kurtosis: float, params: float = None) tuple[source]
Applies the Winterstein method to generate a non-Gaussian signal with specified skewness and kurtosis from a Gaussian input.
- Parameters:
signal (np.ndarray) – Input signal.
input_skewness (float) – Desired skewness of the output signal.
input_kurtosis (float) – Desired kurtosis of the output signal.
params (float) – Optional dictionary of parameters. Currently supports: - 2 or 3, for second or third order Winterstein transformation.
- Returns:
ng_signal (np.ndarray) – Transformed signal
opt_params (dict) – Dictionary of optimal parameters
Source
Winerstein, «Nonlinear Vibration Models for Extremes and Fatigue», J. Eng. Mech., vol. 114, fasc. 10, pp. 1772-1790, ott. 1988, doi: 10.1061/(ASCE)0733-9399(1988)114:10(1772)
- SignalForge.stationary_nongaussian.get_zheng(signal: ndarray, input_kurtosis: float, input_skewness: float = 0, params=None)[source]
Applies Zheng’s transformation to achieve a desired kurtosis and skewness.
- Parameters:
signal (np.ndarray) – Input Gaussian signal.
input_kurtosis (float) – Target excess kurtosis (e.g. 0 for Gaussian).
input_skewness (float, optional) – Target skewness. Default is 0 (symmetric).
params (dict {'a': float, 'b': float}, optional) – Transformation parameters to bypass the optimization procedure.
- Returns:
ng_signal (np.ndarray) – Transformed signal rescaled to original RMS.
opt_params (dict) – Dictionary of optimal parameters {‘a’: float, ‘b’: float}.
Source
Zheng et al., Packag. Technol. Sci., vol. 30, no. 7, pp. 331-345, 2017.
- SignalForge.stationary_nongaussian.get_zmnl(signal: ndarray, fs: float, input_kurtosis: float, input_skewness: float = 0, params=None)[source]
Applies the improved non linear transformation to achieve a desired kurtosis.
- Parameters:
signal (np.ndarray) – Input Gaussian signal.
fs (float) – Sampling frequency of the signal
input_kurtosis (float) – Target kurtosis.
input_skewness (float, optional) – Target skewness. If None, assumes symmetry.
param (dict {'beta': float, 'n': float}) – Transformation parameters to bypass the optimization procedure
- Returns:
ng_signal (np.ndarray) – Transformed signal
opt_params (dict) – Dictionary of optimal parameters
Source
Wise, A. Traganitis, e J. Thomas, «The effect of a memoryless nonlinearity on the spectrum of a random process», IEEE Trans. Inf. Theory, vol. 23, fasc. 1, pp. 84–89, gen. 1977, doi: 10.1109/TIT.1977.1055658.