Hello,
Je cherche à caler en phases 2 signaux sur un signal de référence. J'ai vu que l'on pouvait utiliser la technique de l'intercorrelation avec Scipy, qui permet de déterminer rapidement le décalage de phase entre deux signaux et ensuite de faire tourner les lignes des matrices pour recaler correctement les signaux. Le codage en python donne ca:
Cela marche correctement, sauf qu'il y a un petit soucis au niveau des raccords de signaux avec la rotation des lignes des matrices, comme cela peut se voir sur les courbes supérieurs de l'image (bleu et vert(caché par la légende)) et sur les barres d'erreurs vertes sur la courbe inférieure, dans le fichier en pièce jointe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 def Rephase_Signal(self): # Rephasing the signal using convolution technic Temp=numpy.zeros([self.Camera.nb_files]) for i in range(0,self.Camera.nb_files): Temp[i]=len(self.Camera.Raw_Data[i][:,2]) self.corr_len=min(Temp) M_Sync=numpy.zeros([self.Camera.nb_files,self.corr_len,self.Camera.Raw_Data[0].shape[1]]) for i in range(0,self.Camera.nb_files): M_Sync[i,:,:]=self.Camera.Raw_Data[i][:self.corr_len,:] if (i!=0): distancePerLag = self.Camera.Raw_Data[i][1,0]-self.Camera.Raw_Data[i][0,0] ycorr = scipy.correlate(self.Camera.Raw_Data[0][0:self.corr_len,2], self.Camera.Raw_Data[i][0:self.corr_len,2], mode='full') xcorr = scipy.linspace(0, len(ycorr)-1, num=len(ycorr)) x_shift = ycorr.argmax()-len(xcorr)/2 M_Sync[i,:,1:]=numpy.roll(M_Sync[i,:,1:],x_shift,axis=0) self.Camera.Sync_Data=M_Sync
Y-a-t-'il un moyen d'éviter ces sauts dans mes courbes? Est-ce qu'une autre technique serait peut être plus approprié pour synchroniser mes signaux?
Partager