11
votes

Algorithme pour correspondre aux signaux du temps dépendant du temps (1D)

Je me demandais si quelqu'un pouvait me diriger vers un algorithme / technique utilisée pour comparer les signaux dépendants du temps. Idéalement, cet algorithme hypothétique prendrait en 2 signaux en tant qu'entrants et retournerait un nombre qui serait le pourcentage de similarité entre les signaux (0 étant que les 2 signaux sont statistiquement non liés et que ce soit un match parfait).

Bien sûr, je me rendra compte qu'il y a des problèmes de ma demande, à savoir que je ne suis pas sûr de définir correctement la «similitude» dans le contexte de la comparaison de ces 2 signaux, alors si quelqu'un pouvait aussi me diriger dans la bonne direction. (Quant à ce que je devrais regarder / savoir, etc.), j'apprécierais aussi.


0 commentaires

6 Réponses :


0
votes

Je ne connais pas le traitement du signal, il s'agit donc d'une suppose ..:

Votre signal est votre signal efficacement une liste des paires commandées (x, y) code>, où x est le temps et y code> l'amplitude? Si oui, alors peut-être que vous pourriez peut-être jeter alors la coordonnée du temps - par exemple: p>

Comparing: [(y0,z0), (y1,z1), (y2,z2), (y3,z3), ...]


0 commentaires

1
votes

solution générale: Vous pouvez incliner les données dans des histogrammes et utiliser un test chi-carré ou un test Kolomogrov.

Les deux sont explicitement destinés à estimer les chances que les deux distributions représentent des échantillons aléatoires de la même distribution subînée (c'est-à-dire avoir la même forme à la statistique).

Je ne connais pas la mise en œuvre de la CA au sommet de ma tête, mais root fournit c ++ Mise en œuvre des deux:

  • Th1 :: Chi2test
  • Th1: KolmogorovTest

    Je crois que les docs pointent sur certains papiers aussi.


    Je pense que CERNLIB fournit à la fois des algorithmes de Fortran77, que vous peut lien vers c. La traduction du code racine peut être plus facile.


0 commentaires

1
votes

Vous pouvez essayer une transformation rapide Fourier (rechercher FFT à Wikipedia, il existe des bibliothèques open source pour effectuer des conversions).

FFTS transformera vos données du domaine temporel (c'est-à-dire une impulsion à 1s, 2s, 3s, 3s, 4s ...) aux données dans le domaine de fréquence (c'est-à-dire une impulsion chaque seconde).

Ensuite, vous pouvez comparer des fréquences et leurs forces relatives plus facilement. Ce devrait être une étape dans la bonne direction pour vous.


2 commentaires

Pas une mauvaise suggestion pour certaines sortes d'informations, mais vous quittez réellement le PO avec le même problème: comment deux comparent à Spectra.


DMCKEE: Sauf que les signaux transformés de Fourier seraient comparables point par point sans changement. Au fait, "Spectra" est le mauvais terme pour les signaux d'origine, car cela impliquerait de l'énergie (ou une mesure équivalente) sur l'axe X.



14
votes

Le Fonction de corrélation croisée est la solution de traitement de signal classique. Si vous avez accès à MATLAB, voir la fonction XCORL. max (abs (xcorr (signal1, signal2, 'coeff'))) vous donnerait spécifiquement ce que vous recherchez et qu'un équivalent existe également en python.

La corrélation croisée suppose que La «similarité» que vous recherchez est une mesure de la relation linéaire entre les deux signaux. La définition de signaux de longueur finis à valeur réelle avec index de temps n = 0..n-1 est: xxx

g < / Code> passe de -n..n (à l'extérieur de cette plage du produit à l'intérieur de la somme est 0).

Bien que vous demandiez un numéro, la fonction est assez intéressante. Le domaine de fonction g est appelé le domaine de lag.

si x1 et x2 sont liés par un quart de temps, le La fonction de corrélation croisée aura son apogée au décalage correspondant au décalage. Par exemple, si vous aviez x1 = sin] [wn] et x2 = sin + phi] , donc deux ondes sinusoïdales à la même fréquence et à la même phase, la croix -Correlation fonctionnerait son pic au décalage correspondant au déphasage de la phase.

si x2 est une version mise à l'échelle de x1 , la corrélation croisée va échouer aussi. Vous pouvez normaliser la fonction à un coefficient de corrélation en divisant par sqrt (somme (x1 ^ 2) * somme (x2 ^ 2)) et apportez-le dans 0..1 En prenant une valeur absolue (cette ligne de matlab a ces opérations).

plus généralement, ci-dessous est un résumé de la corrélation croisée bien / mauvaise pour.

La corrélation fonctionne bien pour déterminer si un signal est lié linéairement à un autre, c'est-à-dire de
x2 (t) = somme {n = 0..k-1} (a_n * x1 (t + phi_n))

x1 (t) et x2 (t) sont les signaux en question, a_n sont des facteurs d'échelle et phi_n sont des quarts de temps. Les implications de ceci sont les suivantes:

  1. Si un signal est une version temporelle de l'autre (phi_n <> 0 pour certains n) La fonction de corrélation croisée sera non nulle.
  2. Si un signal est une version à l'échelle de l'autre (a_n <> 0 pour certains N) La fonction de corrélation croisée sera non nulle.
  3. Si un signal est une combinaison de versions décalées et décalées de l'autre ( a_n et phi_n ne sont pas zéro pour un certain nombre de n) La fonction de corrélation sera non nulle. Notez que c'est aussi une définition d'un filtre linéaire.

    Pour obtenir plus de béton, supposons que x1 est un signal aléatoire à large bande. Laissez x2 = x1 . Maintenant, la fonction de corrélation croisée normalisée sera exactement 1 à G = 0 et près de 0 partout ailleurs. Maintenant, laissez x2 être une version filtrée (linéairement) de x1 . La fonction de corrélation croisée ne sera pas nulle proche de g = 0 . La largeur de la partie non nulle dépendra de la largeur de bande du filtre.

    pour le cas particulier de x1 et x2 étant périodique, le Les informations sur la phase de déphasage de la partie originale de la réponse s'appliquent.

    où la corrélation croisée sera pas d'aide si les deux signaux ne sont pas liés linéairement. Par exemple, deux signaux périodiques à différentes fréquences ne sont pas liés linéairement. Deux signaux aléatoires ne sont pas non plus tirés d'un processus aléatoire à large bande à des moments différents. Les deux signaux ne sont pas non plus de forme similaire mais avec une indexation de temps différente - c'est comme l'affaire de fréquence fondamentale inégale.

    Dans tous les cas, la normalisation de la fonction de corrélation croisée et la recherche de la valeur maximale vous indiquera Si les signaux sont potentiellement linéaires liés - si le nombre est faible, comme moins de 0,1, je serais à l'aise de les déclarer sans rapport. Plus élevé que cela et je l'examinerai plus avec précaution, graphique à la fois les fonctions de corrélation croisée normalisées et non formées et en regardant la structure. Une corrélation croisée périodique implique que les deux signaux sont périodiques et une fonction de corrélation croisée qui est sensiblement supérieure autour de g = 0 implique un signal est une version filtrée de l'autre.


4 commentaires

Il n'est pas tout à fait évident de la question, mais si Oort veut une mesure de la forme de la forme (plutôt que de la phase de phases), la corrélation croisée est inférieure à optimale: donné un signal de base S_B et deux signaux de test T_1, T_2 , il ne convient pas bien de dire quel signal de test ressemble le plus au signal de base.


Je recherche une fonction qui donnerait une mesure de la forme de la forme. Qu'est-ce qui serait mieux adapté?


@oort: Regardez ma réponse pour quelques choix. Celles-ci sont plus compliquées que la corrélation croisée, mais elles vont vraiment directement à la matière de similitude de forme.


Y a-t-il un avantage de l'entropie avec une corrélation croisée?



1
votes

Warping Dynamic Time est une approche que vous pouvez utiliser si les signaux doivent être adaptés par la vitesse. et ralentissement du temps de ralentissement à différentes positions.


0 commentaires

0
votes

Vous ne dites pas beaucoup de ce que sont les signaux et quelle mesure de "la similitude" serait significative pour vous. Mais si les signaux sont en phase (c'est-à-dire que vous souhaitez comparer les deux signaux instantanés-instant instantanés et il n'y aura pas de retard à prendre en compte), je vous suggérerais de regarder le corrélateur de Pearson. Il vous donne une valeur de 1 si les deux signaux sont identiques, une valeur de 0 si elles sont totalement différentes, et quelque chose entre les deux si elles riment. En tant qu'avantage supplémentaire, Pearson s'en fiche si les signaux sont amplifiés différemment (sauf si un signal est l'inverse de l'autre, il vous donne le résultat de -1).

Cela ressemble-t-il à ce que vous cherchez?

< / p>


0 commentaires