La croix-coefficient de corrélation
J'ai deux formes d'onde dans le domaine temporel, de qui j'ai besoin de mesurer la corrélation croisée coefficient dans MATLAB. J'ai essayé max(abs(xcorr(m,n,'coeff')))
mais il ne semble pas fonctionner correctement.
Aussi j'ai besoin de mesurer la croix coefficient de corrélation pour les différentes sections de la forme d'onde, par exemple mesurer la croix coefficient de corrélation à intervalles de 1 minute. Et, si possible, la production, ces valeurs d'une matrice ou quelque chose.
Je sais que c'est beaucoup demander, mais je suis un MATLAB novice et de trouver la tâche!
Toute aide que vous pourriez me donner sur cette question seront reçues avec reconnaissance.
EDIT:
C'est le code que j'ai utilisé pour tester la corrélation de code:
x = rand(1,14400);
y = rand(1,14400);
r = max( abs(xcorr(x,y,'coeff')) )
- Nous avons besoin de plus de détails que "cela ne semble pas fonctionner correctement". Qu'avez-vous, et qu'avez-vous espérer obtenir?
Vous devez vous connecter pour publier un commentaire.
Selon les équations dans cet article vous pouvez compter la croix-coefficient de corrélation de cette façon:si vous voulez calculer le coefficient seulement pour une partie des signaux, il suffit d'utiliser:
Avez-vous aussi essayé le
corrcoef
fonction?Modifier
Ok, j'ai vérifié les corrcoef fonction et il semble fonctionner correctement, prendre un coup d'oeil:
De sorte que le coefficient de corrélation est égal -0.0543 - petite similitude (comme prévu).
Pour vérifier cela, nous allons calculer le coefficient de signaux identiques:
Comme prévu, il est égal à 1.
Modifier.
Comme vous pouvez le voir, le résultat de corrcoef est une matrice de toutes les coefficients de corrélation entre ces deux signaux:
Sorte de cross-corrélation, vous devez sélectionner l'un des éléments hors de la diagonale principale (il y en a situé l'auto-coefficients de corrélation, dans ce cas, toujours égal à 1).
Il n'y a pas de différence si vous sélectionnez ans(2,1), ou sna(1,2) - il n'y a pas de différence, si vous calculez la corrélation entre x et y, ou de corrélation de y et de x.
Donc le code final devrait ressembler à ceci:
Essayez d'utiliser de la Croix-Covariance au lieu
de la croix-covariance de la séquence de la corrélation croisée de la moyenne-retiré
les séquences. Comme Joonas mentionné,
rand
a un décalage DC à 0,5 et vous donnera un "mauvais" résultats.Qu'entendez-vous par là? En quoi est-il de la sortie, et qu'attendez-vous?
Une chasse aux sorcières dans de corrélation croisée est qu'une polarisation DC dans la forme d'onde de corrompre le résultat. Et autant que je sache, il n'y a pas de façon universelle à faire quoi que ce soit. Vous avez en quelque sorte de s'assurer que vos formes d'ondes ne contiennent pas de polarisation DC.
Le problème est que
rand
retourne les numéros sont distribués uniformément dans l'intervalle (0,1). En d'autres termes, vous disposez d'un contrôleur de polarisation (moyenne) de 0,5! C'est pourquoi vous obtenez haut coefficient de corrélation pour apparemment aléatoire des signaux: ils ne sont pas tout à fait au hasard, car chacun a un semblable constante composant qui s'affiche dans le coefficient de corrélation.Donc, essayez d'utiliser
randn
à la place: il renvoie des nombres aléatoires dont les éléments sont normalement distribué avec une moyenne de 0, qui est ce que vous voulez ici.