Trouver la différence de phase entre les deux (inharmoniques) des ondes
J'ai deux jeux de données d'inscription de la tension moyenne sorties des deux assemblées des réseaux de neurones au temps t, qui ressemble à quelque chose comme ceci:
A = [-80.0, -80.0, -80.0, -80.0, -80.0, -80.0, -79.58, -79.55, -79.08, -78.95, -78.77, -78.45,-77.75, -77.18, -77.08, -77.18, -77.16, -76.6, -76.34, -76.35]
B = [-80.0, -80.0, -80.0, -80.0, -80.0, -80.0, -78.74, -78.65, -78.08, -77.75, -77.31, -76.55, -75.55, -75.18, -75.34, -75.32, -75.43, -74.94, -74.7, -74.68]
Quand deux les assemblées de neurones sont "en phase" dans une mesure raisonnable, ce qui signifie qu'ils sont interdépendants. Ce que je veux faire est de calculer la différence de phase entre A et B, de préférence sur toute la durée de la simulation. Depuis deux assemblées sont peu susceptibles d'être totalement en phase, j'ai envie de comparer cette différence de phase à un certain seuil.
Ce sont inharmoniques oscillateurs et je ne connais pas leurs fonctions, seules ces valeurs, donc je n'ai aucune idée de la façon de déterminer la phase ou la différence de phase.
Je suis en train de réaliser ce projet en Python, en utilisant numpy et scipy (les deux assemblées sont des tableaux numpy).
Toutes les suggestions sont grandement appréciés!
EDIT: Ajout de parcelles
Exemple de fichier de montage 1
Exemple de fichier de données pour l'assemblage de 2
Ici est une parcelle de ce que les deux ensembles de données ressembler à:
- Veuillez vérifier vos fichiers de données. Ils sont pleins de "80"s !
Vous devez vous connecter pour publier un commentaire.
Peut-être vous êtes à la recherche pour le cross-corrélation:
La position du pic de corrélation croisée est une estimation de la différence de phase.
EDIT 3: mettre à Jour maintenant que j'ai regardé le réel fichiers de données. Il y a deux raisons que vous trouverez un décalage de phase de zéro. Tout d'abord, le décalage de phase est vraiment zéro entre les deux temps de la série. Vous pouvez voir clairement si vous effectuez un zoom avant à l'horizontale sur votre matplotlib graphique. Deuxièmement, il est important de régulariser les données de la première (le plus important, de soustraire au large de la moyenne), sinon l'effet de zéro-padding à la fin des tableaux marais le vrai signal de la corrélation croisée. Dans l'exemple suivant, je vérifie que je suis de trouver le "vrai" sommet par l'ajout d'une artificielle shift et ensuite vérifier que je le récupérer correctement.
EDIT: Voici un exemple de la façon dont il fonctionne avec des données fausses.
EDIT 2: Ajouté un graphique de l'exemple.
De sorte qu'il fonctionne assez bien, même très bruyant données et de très aharmonic vagues.
numpy.abs(numpy.fft.fft(A))**2
.@deprecated les commentaires de la réponse exacte à la question, quand il s'agit de la pure code python solution. Les commentaires ont été très précieux, mais je me sens comme je devrais ajouter quelques notes pour les personnes à la recherche d'une réponse dans le contexte spécifique des réseaux de neurones.
Lorsque vous prenez la moyenne du potentiel de membrane de grandes assemblées de neurones, comme je l'ai fait, la corrélation sera relativement faible. Ce que vous voulez regarder, principalement, est la corrélation entre les trains de pointe, le temps de latence ou de l'excitabilité (c'est à dire d'efficacité synaptique) de chaque assemblage. Cela peut être trouvé assez facilement, simplement en regardant les points où le potentiel dépasse un certain seuil. Scipy de la fonction de corrélation sur les trains de pointe sera beaucoup plus détaillée de l'image de l'interdépendance entre les neurones ou les assemblées de neurones lorsque vous donner les trains de pointe, par opposition au réel potentiel. Vous pouvez également jeter un oeil à Brian le module de statistiques, qui peut être trouvé ici:
http://neuralensemble.org/trac/brian/browser/trunk/brian/tools/statistics.py
Que pour la différence de phase, c'est probablement une mauvaise mesure, parce que les neurones ne sont pas des oscillateurs harmoniques. Si vous voulez prendre des mesures très précises de la phase, il est préférable de regarder lors de la synchronisation de inharmoniques oscillateurs. Le modèle mathématique qui décrit ces types d'oscillateurs, ce qui est très utile dans le contexte des neurones et des réseaux de neurones, est le modèle de Kuramoto. Il y a beaucoup de documentation disponible pour le modèle de Kuramoto et Integrate-and-fire-synchronisation, donc je vais le laisser pour que.