SHM Indicators
Lightweight signal-derived features for damage detection, condition monitoring, and trend analysis.

dspkit.indicators.spectral_entropy(freqs, Pxx)
Normalised Shannon entropy of a power spectrum.
A value near 1.0 indicates a flat (white noise-like) spectrum. A value near 0.0 indicates energy concentrated at very few frequencies (highly tonal / narrow-band).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
freqs
|
(array_like, shape(M))
|
Frequency vector [Hz] (used only for validation; not consumed). |
required |
Pxx
|
(array_like, shape(M))
|
Power spectral density or power spectrum (non-negative). |
required |
Returns:
| Type | Description |
|---|---|
float
|
Spectral entropy in [0, 1]. |
Source code in dspkit/indicators.py
dspkit.indicators.kurtosis(x, excess=True)
Kurtosis (fourth standardised moment) of a signal.
High kurtosis indicates heavy tails / impulsive content. Normal distribution has excess kurtosis = 0 (regular kurtosis = 3).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
x
|
(array_like, shape(N))
|
|
required |
excess
|
bool
|
If |
True
|
Returns:
| Type | Description |
|---|---|
float
|
|
Source code in dspkit/indicators.py
dspkit.indicators.skewness(x)
Skewness (third standardised moment) of a signal.
Positive skewness means the tail on the right side is longer. Zero skewness for a symmetric distribution.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
x
|
(array_like, shape(N))
|
|
required |
Returns:
| Type | Description |
|---|---|
float
|
|
Source code in dspkit/indicators.py
dspkit.indicators.rms_variation(x, fs, segment_duration=None)
RMS level computed over consecutive non-overlapping segments.
Useful for tracking amplitude changes over time (e.g. damage progression).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
x
|
(array_like, shape(N))
|
|
required |
fs
|
float
|
Sampling frequency [Hz]. |
required |
segment_duration
|
float or None
|
Duration of each segment [s]. Defaults to |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
times |
ndarray
|
Centre time of each segment [s]. |
rms_values |
ndarray
|
RMS value per segment. |
Source code in dspkit/indicators.py
dspkit.indicators.frequency_shift(x, fs, segment_duration=None, nperseg=None)
Track the dominant PSD frequency across consecutive segments.
A shift in the dominant frequency over time may indicate stiffness degradation or damage.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
x
|
(array_like, shape(N))
|
|
required |
fs
|
float
|
Sampling frequency [Hz]. |
required |
segment_duration
|
float or None
|
Duration of each analysis segment [s]. Defaults to ten segments. |
None
|
nperseg
|
int or None
|
Welch PSD segment length within each analysis segment.
Defaults to |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
times |
ndarray
|
Centre time of each segment [s]. |
dominant_freqs |
ndarray
|
Dominant (peak PSD) frequency per segment [Hz]. |
Source code in dspkit/indicators.py
dspkit.indicators.energy_variation(x, fs, segment_duration=None)
Signal energy (mean squared value) over consecutive segments.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
x
|
(array_like, shape(N))
|
|
required |
fs
|
float
|
Sampling frequency [Hz]. |
required |
segment_duration
|
float or None
|
Duration of each segment [s]. Defaults to ten segments. |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
times |
ndarray
|
Centre time of each segment [s]. |
energies |
ndarray
|
Mean squared value per segment. |