Avant propos¶
Le produit de convolution entre deux signaux et à temps discret est défini par :
La fonction numpy.convolve calcule le produit de convolution et renvoie le résultat complet (full) ou tronqué (same et valid).
x = [ 7, 2, 1, 8 ] (len = 4)
y = [ 1, -1, 1 ] (len = 3)
"full" = [ 7, -5, 6, 9, -7, 8 ] (len = 6)
"same" = [ -5, 6, 9, -7 ] (len = 4)
"valid" = [ 6, 9 ] (len = 2)



Premier produit de convolution¶
Comme pour la porte, l’impulsion discrète est définie avec numpy.where.
Attention à l’utilisation de la fonction numpy.arange utilisée pour définir les abscisses !
n = np.arange(-10, 10+1)
x = np.sin(2*np.pi*n/10)
y = np.where( n==5 , 3, 0)
z = np.convolve(x, y, mode="same")
On voit là l’effet de la convolution par une impulsion discrète : le signal est décalé de 5 échantillons (lieu de l’impulsion) et amplifié de 3 (amplitude de l’impulsion).
Mais comment expliquer la présence d’échantillons nuls en début du signal ?
Deuxième produit de convolution¶
n = np.arange(-10, 10+1)
x = np.where( np.absolute(n)==1 , 1, 0) + np.where( n==0 , 2, 0)
y = np.where( n==-1 , -1, 0) + np.where( n==1 , 1, 0)
z = np.convolve(x, y, mode="same")
Détail du calcul du produit de convolution :

Comme précédemment, la convolution par chaque impulsion de va décaler et amplifer le signal d’autant. La convolution de la somme étant la somme des convolutions (opération linéaire), alors le résultat est la somme des deux convolutions.
Troisième produit de convolution¶

La convolution par un porte revient à calculer chaque échantillon de comme la moyenne de 24×7 échantillons de .
On procède donc à un moyennage du signal, qui a pour effet d’adoucir (lisser) le signal très perturbé (“bruité”) par une porte. C’est une véritable technique pour débruiter un signal.