Corrélation (non biaisée) entre deux vecteurs complexes.

Espace de nom : tsd::fourier

Prototype

tuple<Vecf, Veccf> xcorr(const Veccf &x, const Veccf &y=Veccf(), entier m=-1)

Paramètres

xPremier vecteur
yDeuxième vecteur (éventuellement égal au premier pour avoir l'auto-corrélation)
mNombre de délais à examiner (si négatif, alors fait comme si \(m=N\)).

Retourne

Un tuple de deux vecteurs de dimension \(2m-1\) : délais \(\tau_k\) et corrélation \(c(\tau_k)\).

Description

Calcule la corrélation entre deux signaux complexes (calcul efficace via des FFT), soit pour un délais négatif ( \(\tau=-(m-1)\dots -1\)) : \[ c(\tau) = \frac{1}{N-\tau} \cdot \sum_{k=0}^{N-1-\tau} x_{k-\tau} y^{\star}_k \] Et, pour les délais positifs ( \(\tau=0\dots m-1\)): \[ c(\tau) = \frac{1}{N-\tau} \cdot \sum_{k=0}^{N-1-\tau} x_k y^{\star}_{k+\tau} \]

Les délais étant échantillonnés de manière régulière entre \(-(m-1)\) et \(m-1\) : \[ \tau = \textrm{linspace}(-(m-1), m-1, 2m-1) = -(m-1), -(m-2), \dots, -1, 0, 1, \dots, (m-2), (m-1) \]

Note
Les signaux sont complétés en interne avec des zéros pour pouvoir effectuer efficacement la corrélation dans le domaine fréquentiel.


Exemple


  soit x = sigsin(0.04, 1000) * exp(-abs(linspace(-5,5,1000))),
       y = délais(x, 100);
  soit [lags, c] = xcorr(x, y);

  Figures f;
  f.subplot().plot(x, "b-", "x");
  f.subplot().plot(y, "g-", "y");
  f.subplot().plot(lags, abs(c), "m-", "xcorr (abs)");

Voir aussi

xcorrb(), ccorr(), détecteur_création()