What are the main statistical parameter involved in a random vibration fatigue analysis

In random vibration fatigue FEA (Finite Element Analysis) simulations, the following statistical parameters are among the most important for characterizing the loading conditions and assessing fatigue damage:

  1. Power Spectral Density (PSD): This is crucial for understanding the frequency content and energy distribution of the random vibration input. It provides the amplitude distribution over various frequencies and is a foundation for the analysis.
  2. Probability Density Function (PDF): The PDF characterizes the statistical distribution of stress amplitudes at different frequencies. It helps in assessing the likelihood of encountering specific stress levels, which is essential for fatigue life estimation.
  3. Mean Stress: Mean stress represents the average stress level over time due to random vibrations. It plays a significant role in assessing the potential for fatigue damage in both tension and compression.
  4. Standard Deviation: The standard deviation measures the variability or fluctuations in the stress response at various frequencies. It is vital for assessing stress variability and fatigue damage, as it captures the dispersion of stress values.
  5. Coherence Function: The coherence function quantifies the correlation between the input vibrations and the structural response at different frequencies. It is essential for understanding how well the structural response replicates the input vibrations, as it helps ensure the reliability of the analysis.
  6. Crest Factor: The crest factor, which indicates the ratio of peak stress to RMS value, provides insights into transient events and extreme conditions within the random vibrations, helping assess high-stress events.
  7. Rainflow Counting: While not a statistical parameter per se, rainflow counting is an essential technique for identifying and counting significant stress cycles within the stress history. It’s a key step in assessing fatigue damage.

These statistical parameters are central to characterizing the randomness, variability, and reliability of structures and components exposed to random vibration loads. They form the foundation for accurate fatigue life estimation and ensuring the durability and safety of systems in dynamic environments

A sine signal and its PSD function

Another example to understand it better. Now we are using two sine signals with different frequencies. These two different signals will create two distinctive peaks in these specific frequencies in the PSD function. See below

Now with a random noise signal that excites all frequencies, hence the PSD looks more flat. Y axis is in log to enhance visualization

Are you still not sure why it should look flat? Here’s why

The curve in the Power Spectral Density (PSD) plot appears flat because the signal being analyzed is white noise. White noise is a random signal that has equal intensity at all frequencies, meaning that it has a flat frequency response. In the time domain, white noise is characterized by random amplitude values with no specific pattern or periodicity.

When we calculate the PSD of white noise, it shows a nearly constant value across all frequencies. This is why the PSD curve appears flat – it indicates that the signal’s power is uniformly distributed across the entire frequency spectrum, and there is no dominant frequency component. The flat PSD is a characteristic feature of white noise and indicates its broadband and random nature.

Probability Density Function (PDF): The PDF characterizes the statistical distribution of stress amplitudes at different frequencies. It helps in assessing the likelihood of encountering specific stress levels, which is essential for fatigue life estimation.

PDF and PSD of a Sine Signal.

PDF and PSD of a Noisy Sine Signal.

Noisy Time Signal – Main Statistical Parameters

All the parameters in one plot

Here is the code in python as well

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import welch
from scipy.stats import norm

# Signal parameters
sampling_frequency = 1000  # Sampling frequency in Hz
signal_duration = 1.0  # Duration of the signal in seconds
frequency = 10.0  # Frequency of the sine wave in Hz
amplitude = 1.0  # Amplitude of the sine wave
noise_stddev = 0.2  # Standard deviation of the Gaussian noise

# Generate a time vector
t = np.linspace(0, signal_duration, int(sampling_frequency * signal_duration), endpoint=False)

# Generate a noisy sine signal
sine_signal = amplitude * np.sin(2 * np.pi * frequency * t)
noisy_signal = sine_signal + noise_stddev * np.random.randn(len(t))

# Calculate the mean stress and standard deviation
mean_stress = np.mean(noisy_signal)
std_deviation = np.std(noisy_signal)

# Calculate the PSD using Welch's method
frequencies, psd = welch(noisy_signal, fs=sampling_frequency, nperseg=256)

# Calculate the Coherence function (for the noisy signal, coherence is affected by noise)
coherence = np.abs(np.fft.fft(noisy_signal)) / np.sqrt(np.sum(np.abs(noisy_signal)**2))

# Calculate the Crest Factor
crest_factor = np.max(np.abs(noisy_signal)) / np.sqrt(np.mean(noisy_signal**2))

# Create a PDF of the noisy signal
pdf_values, pdf_bins, _ = plt.hist(noisy_signal, bins=50, density=True, color='g', alpha=0.6, label='PDF')
pdf_x = (pdf_bins[:-1] + pdf_bins[1:]) / 2

# Plot the time-domain signal
plt.figure(figsize=(12, 14))
plt.subplot(7, 1, 1)
plt.plot(t, noisy_signal, label='Noisy Sine Signal')
plt.title('Noisy Sine Signal in Time Domain')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.grid(True)
plt.legend()

# Plot the Mean Stress
plt.subplot(7, 1, 2)
plt.axhline(y=mean_stress, color='r', linestyle='--', label='Mean Stress')
plt.title('Mean Stress')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.grid(True)
plt.legend()

# Plot the Standard Deviation
plt.subplot(7, 1, 3)
plt.axhline(y=std_deviation, color='b', linestyle='--', label='Standard Deviation')
plt.title('Standard Deviation')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.grid(True)
plt.legend()

# Plot the PSD
plt.subplot(7, 1, 4)
plt.semilogy(frequencies, psd, label='PSD')
plt.title('Power Spectral Density (PSD)')
plt.xlabel('Frequency (Hz)')
plt.ylabel('PSD')
plt.grid(True)
plt.legend()

# Plot the Coherence function
plt.subplot(7, 1, 5)
plt.plot(t, coherence, label='Coherence')
plt.title('Coherence Function')
plt.xlabel('Time (s)')
plt.ylabel('Coherence')
plt.grid(True)
plt.legend()

# Plot the Crest Factor
plt.subplot(7, 1, 6)
plt.axhline(y=crest_factor, color='m', linestyle='--', label='Crest Factor')
plt.title('Crest Factor')
plt.xlabel('Time (s)')
plt.ylabel('Crest Factor')
plt.grid(True)
plt.legend()

# Plot the PDF with Bins
plt.subplot(7, 1, 7)
plt.plot(pdf_x, pdf_values, label='PDF')
plt.title('Probability Density Function (PDF) of the Signal')
plt.xlabel('Amplitude')
plt.ylabel('Probability Density')
plt.hist(noisy_signal, bins=50, density=True, alpha=0.6, color='g')
plt.grid(True)
plt.legend()

plt.tight_layout()
plt.show()