I wonder if an efficient method exist to compute how much a signal is periodic, it should be ~1.0 when the signal is totally periodic (like a sinusoïdal signal) and ~0.0 when totally random, like a white noise.

Edit : This question came with a big misunderstanding, it has been modified to fit the answer.

  • 2
    $\begingroup$ Can you define what you mean by "stationariness"? Stationary has a mathematical meaning for random signals. White Gaussian noise is stationary. So it's not clear what you mean that the "stationary coefficent" should be 0 for white noise. $\endgroup$ – Atul Ingle Aug 7 '17 at 14:44
  • $\begingroup$ erf ! I realize I was totally wrong with my understanding of what's a "stationary" signal. I will edit my question... I d'like to measure how much a signal is periodic. e.g. it should be ~1.0 for a pure sinusoïd at 50hz and ~0.0 for a totally random signal. what term should I use ? periodicness ? $\endgroup$ – snoob dogg Aug 7 '17 at 16:27
  • 3
    $\begingroup$ @snoobdogg How about spectral flatness, AKA Wiener Entropy? Keep in mind that it is flatness, not "peakiness", so it will be 1 for noise and 0 for sinusoids. $\endgroup$ – jojek Aug 7 '17 at 16:58
  • $\begingroup$ @snoobdogg I think you mean periodicity in time, or, "peakiness" of the Fourier spectrum is what you are after. If there are strong peaks in the spectrum then the signal is not totally random. Whereas for white Gaussian noise, there are no peaks as all the energy is equally distributed over all frequency bands. I would go with jojek's idea of using spectral flatness as a metric. $\endgroup$ – Atul Ingle Aug 7 '17 at 18:33
  • $\begingroup$ Ok thank you, it's clearly what's I'm looking for : ) $\endgroup$ – snoob dogg Aug 7 '17 at 19:31

I suggest using Spectral Flatness, aka Wiener Entropy. It is defined as a ratio of geometric and arithmetic mean of the magnitude spectra $X(k)$:

$$\Xi=\dfrac{\sqrt[K]{\prod_{k=0}^{K} X(k)}}{\frac{1}{K}\sum_{k=0}^{K}X(k)} $$

For signals which have flat spectra, its value tends towards $1$, whereas for tonal signals it is close to $0$. In your particular application, you might want to consider $1-\Xi$ as a measure of "tonalness" in your signal.

Equivalently, in order to avoid underflows, one can replace the geometric mean implementation with $$GM=\exp\left( \frac{1}{K} \sum_{k=0}^{K}\ln X(k) \right) $$

  • $\begingroup$ For the geometric mean: do you mean "K" not "k" for the n'th root? What if one X(k) is 0? the geometric mean will be 0 $\endgroup$ – s.ouchene Jan 9 at 11:55
  • $\begingroup$ Yeah it should be capital K. Thanks for finding this typo $\endgroup$ – jojek Jan 9 at 11:56
  • $\begingroup$ Let us continue this discussion in chat. $\endgroup$ – jojek Jan 9 at 12:23

The unbiased, normalized autocorrelation function (ACF) $r_{xx}[\tau]$ directly computes the desired "periodicity coefficient". It is defined as

$$ r_{xx}[\tau] = \frac{N}{\left\|x\right\|_2^2\cdot(N-\tau)}\sum_{i=0}^{N-\tau-1}x[i]x[i+\tau]\quad\text{ for }0\leq \tau \leq (N-1), $$

with $\left\|x\right\|_2^2$ the squared (Frobenius) norm (e.g., the energy) and $N$ the length of $x$.

You just have to determine the height of the first maximum with a time lag $\tau$ different from zero, $\tau_\text{max} = \text{arg max}\left\{r_{xx}[\tau]\right\}\text{ for }\tau \neq 0$.

  • If $r_{xx}[\tau_\text{max}]=1$ the signal is periodic with period $\tau_\text{max}$,
  • If $r_{xx}[\tau_\text{max}]=-1$ the signal is periodic with period $\tau_\text{max}$ with the phase-inverted version of itself,
  • If $r_{xx}[\tau_\text{max}]=0$ the signal is not periodic.

Values $-1 \leq r_{xx}[\tau_\text{max}] \leq 1$ are a measure for to which degree the signal is periodic.

The periodicity measure you asked for, with a range of $0\ldots 1$, can, e.g., be implemented by discarding all values $r_{xx}[\tau_\text{max}] < 0$, resulting in:

$$ p = \text{max}\left\{0, r_{xx}[\tau_\text{max}]\right\}. $$

  • $\begingroup$ there is a real problem with that method/definition for when $\tau \approx N$ and the window gets smaller and smaller. This answer and this answer describe a way to adapt the Average Squared Difference Function to an autocorrelation-like function that compares well to $r_{xx}(\tau)$ for small $\tau$. $\endgroup$ – robert bristow-johnson Aug 13 '17 at 14:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.