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 :
Le résultat que je souhaite afficher est le produit de convolution de ces 2 fonctions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
Mais j'obtiens un array de NaN et je ne comprends pas pourquoi !
Code : Sélectionner tout - Visualiser dans une fenêtre à part i = np.convolve(h_opt, p, mode='same')
Si je remplace h_opt par une approximation mathématique qui est un sinus cardinal :
Je n'ai pas de problème et la convolution h_opt * p marche parfaitement bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part h_opt = np.sinc(x/(wl*n))**2
Comment puis-je régler ce problème ?
P.
Partager