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.
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
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
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()