Problème de convolution avec une fonction de Bessel
Bonjour,
J'ai un programme qui me simule la réponse théorique que je devrais avoir en imageant une fente fine par une optique ayant une pupille circulaire.
J'ai donc deux fonctions :
- h_opt qui est ma réponse impulsionnelle optique, qui est une fonction de Bessel d'ordre 1
- p qui est une fonction porte de largeur a (dans mon cas 0.3µm)
Je génère ma fonction de Bessel à l'aide de la librairie scipy :
Code:
1 2 3 4 5 6 7 8
| import numpy as np
from scipy.special import j1
x = np.linspace(-5.5, 5.5, num=(11/0.01)+1, endpoint=True)
wl = 0.514
n = 1/0.56
h_opt = (2*j1(np.pi*x/(wl*n))/(np.pi*x/(wl*n)))**2
p = np.where((x >= -0.15) & (x <= 0.15), 1, 0) |
Le résultat que je souhaite afficher est le produit de convolution de ces 2 fonctions :
Code:
i = np.convolve(h_opt, p, mode='same')
Mais j'obtiens un array de NaN et je ne comprends pas pourquoi !
Si je remplace h_opt par une approximation mathématique qui est un sinus cardinal :
Code:
h_opt = np.sinc(x/(wl*n))**2
Je n'ai pas de problème et la convolution h_opt * p marche parfaitement bien.
Comment puis-je régler ce problème ?
P.