[PYTHON] Estimer le délai entre deux signaux

introduction

Pour deux signaux similaires, leurs temps de retard sont estimés en calculant la fonction d'intercorrélation. Numpy de Python est utilisé pour calculer la fonction d'intercorrélation.

Créer un signal

A titre d'exemple, créez deux signaux, l'un avec retard et l'autre sans retard, sur le signal cible de distribution normale et le bruit de distribution normale.

import numpy as np

target_sig = np.random.normal(size=1000) * 1.0
delay = 800
sig1 = np.random.normal(size=2000) * 0.2
sig1[delay:delay+1000] += target_sig
sig2 = np.random.normal(size=2000) * 0.2
sig2[:1000] += target_sig

sig12.png

Calcul de la fonction de corrélation mutuelle

Calculez la fonction d'intercorrélation des deux signaux créés avec `` np.correlate () ''. La position maximale de la fonction de corrélation mutuelle est le temps de retard. Une mise en garde est que ** si la valeur moyenne du signal est loin de 0 **, cela affectera le calcul de la fonction d'intercorrélation.

sig1 = sig1 - sig1.mean()Etc**Réglez la moyenne à 0**Il est nécessaire d'ajouter des traitements tels que.



```python
import numpy as np

corr = np.correlate(sig1, sig2, "full")
estimated_delay = corr.argmax() - (len(sig2) - 1)
print("estimated delay is " + str(estimated_delay))
estimated delay is 800

dessin

Dessinez à la fin. Vous pouvez voir qu'il y a un grand pic dans la partie indiquant le temps de retard dans la valeur de la fonction de corrélation mutuelle.

import matplotlib.pyplot as plt

plt.subplot(4, 1, 1)
plt.ylabel("sig1")
plt.plot(sig1)

plt.subplot(4, 1, 2)
plt.ylabel("sig2")
plt.plot(sig2, color="g")

plt.subplot(4, 1, 3)
plt.ylabel("fit")
plt.plot(np.arange(len(sig1)), sig1)
plt.plot(np.arange(len(sig2)) + estimated_delay, sig2 )
plt.xlim([0, len(sig1)])

plt.subplot(4, 1, 4)
plt.ylabel("corr")
plt.plot(np.arange(len(corr)) - len(sig2) + 1, corr, color="r")
plt.xlim([0, len(sig1)])

plt.show()

res.png

Recommended Posts

Estimer le délai entre deux signaux
Examiner la relation entre deux variables (2)
Examiner la relation entre deux variables (1)
Modélisation-estimation de Bayes de la différence entre les deux groupes-