Skip to content

๐Ÿ”ฆ Fraunhofer diffraction

JavaScript

๐ŸŽฏ Proving the wave-like nature of light using physical optics visualization
๐ŸŽฏ Demonstration of rendering a scalar grid/intensity field
๐Ÿง  Simulation inspired by this video by Jordan Huang
๐Ÿ A VPython demo is available as well, see circular_aperture.py
๐Ÿ‘‰ Related to fourier transformation

Below youโ€™ll find a diffraction pattern of an aperture (circular or rectangular) far away from a screen, also known as Fraunhofer diffraction. The intensity is calculated as the square of the amplitude of the electric field.

Source


Since the original video is in Chinese, you can find a copy of the original set of instructions that accompany the video below.

Aperture notes

r=(xโˆ’X)2+(yโˆ’Y)2+z2=x2+y2+z2โˆ’2xXโˆ’2yY+X2+Y2r = \sqrt{(x-X)^2 + (y-Y)^2 +z^2} = \sqrt{x^2+y^2+z^2-2xX-2yY+X^2+Y^2}

Extracting RR results in

r=R1โˆ’2xY+2yYR2+X2+Y2R2r=R\sqrt{1-\dfrac{2xY+2yY}{R^2}+\dfrac{X^2+Y^2}{R^2}}

For a small aperture we have X2+Y2โ‰ชR2X^2+Y^2 \ll R^2, so we can write

rโ‰ˆR1โˆ’2xY+2yYR2โ‰ˆR(1โˆ’2xY+2yYR2)r \approx R\sqrt{1-\dfrac{2xY+2yY}{R^2}} \approx R\left(1-\dfrac{2xY+2yY}{R^2}\right)


Aperture grid

This homework is to find the diffraction pattern of a circular aperture far from the screen. Assume there is a circular aperture of diameter d=100ฮผmd=100 \mu m and there is a spherical screen at R=1mR=1m away. The light source is of wavelength ฮป=500nm\lambda=500nm. To obtain the diffraction pattern, you can assume there are many point light sources at the lattice points, sitting at the cross points of the N=100N=100 vertical lines and N=100N=100 horizontal lines, each separated by s=d/N=1ฮผms=d/N=1\mu m apart. If the lattice pointโ€™s position is within the circular aperture, then it is allowed to radiate light. Then on the screen you add all the electric field contributions from the light sources of the grid points, and you will be able to obtain the diffraction intensity pattern by squaring the electric field (the detailed derivation is listed in the next page).

In addition to generating the intensity plot of the diffraction pattern, also find and print the radius of the first dark ring and check whether the Rayleigh criterion ฮธ=1.22ฮป/d\theta=1.22\lambda / d is satisfied. Also notice that, to calculate intensity is to do the square of the amplitude. However, the โ€˜realโ€™ diffraction pattern is really faint to be observed on the computer screen. Therefore, we also do a โ€˜falseโ€™ intensity image of the diffraction pattern by taking the absolute value of the amplitude as the intensity. Of course, when you want to calculate the radius of the first dark ring, you should use the โ€˜realโ€™ intensity image.


The amplitude of the electric field at position (x,y)(x, y) on the screen gets its contribution from all point sources sitting inside the aperture

E(x,y)=โˆซโˆซaperture1rsinโก(ฯ‰tโˆ’kr)dXdYE(x, y) =\int\int_{\text{aperture}} \dfrac{1}{r}\sin(\omega t - kr)dXdY

Next, we substitute the expression for rr found in the previous section to obtain

E(x,y)โ‰ˆโˆซโˆซ1R(1โˆ’xX+yYR2)sinโก(ฯ‰tโˆ’kR(1โˆ’xX+yYR2))dXdYE(x, y) \approx \int\int\dfrac{1}{R\left(1 - \dfrac{xX + yY}{R^2}\right)}\sin\left(\omega t - kR\left(1 -\dfrac{xX + yY}{R^2}\right)\right)dXdY

Now let ฮธx=x/R,ฮธy=y/R,kx=kฮธx,ky=kฮธy\theta_x=x/R, \theta_y=y/R, k_x=k\theta_x, k_y=k\theta_y, then

E(ฮธx,ฮธy)โ‰ˆโˆซโˆซ1Rsinโก(ฯ‰tโˆ’kR+kxX+kyY)dXdYE(\theta_x, \theta_y) \approx \int\int \frac{1}{R}\sin(\omega t -kR +k_x X + k_y Y)dXdY

Applying some basic trigonometry we get

E(ฮธx,ฮธy)โ‰ˆโˆซโˆซ1Rsinโก(ฯ‰tโˆ’kR)cosโก(kxX+kyY)dXdY+โˆซโˆซ1Rcosโก(ฯ‰tโˆ’kR)sinโก(kxX+kyY)dXdY\begin{split} E(\theta_x, \theta_y) \approx \int\int \frac{1}{R}\sin(\omega t -kR)\cos(k_x X + k_y Y)dXdY + \\ \int\int \frac{1}{R}\cos(\omega t -kR)\sin(k_x X + k_y Y)dXdY \end{split}

which is equivalent to

E(ฮธx,ฮธy)โ‰ˆsinโก(ฯ‰tโˆ’kR)โˆซโˆซ1Rcosโก(kxX+kyY)dXdY+cosโก(ฯ‰tโˆ’kR)โˆซโˆซ1Rsinโก(kxX+kyY)dXdY\begin{split} E(\theta_x, \theta_y) \approx \sin(\omega t -kR)\int\int \frac{1}{R}\cos(k_x X + k_y Y)dXdY + \\ \cos(\omega t -kR)\int\int \frac{1}{R}\sin(k_x X + k_y Y)dXdY \end{split}

As we have

โˆซโˆซ1Rsinโก(kxX+kyY)dXdY=0\int\int \frac{1}{R}\sin(k_x X + k_y Y)dXdY=0

due to the symmetry of the integration on the โ€œcircularโ€ aperture (between quotes, since we have approximated it by a square area in our code), we get

E(ฮธx,ฮธy)โ‰ˆsinโก(ฯ‰tโˆ’kR)โˆซโˆซ1Rcosโก(kxX+kyY)dXdY=Aโ‹…sinโก(ฯ‰tโˆ’kR)E(\theta_x, \theta_y) \approx \sin(\omega t -kR)\int\int \frac{1}{R}\cos(k_x X + k_y Y)dXdY = A \cdot \sin(\omega t -kR)

where

A=โˆซโˆซaperture1Rcosโก(kxX+kyY)dXdYA = \int\int_\text{aperture} \frac{1}{R}\cos(k_x X + k_y Y)dXdY

is the amplitude of the electric field on the spherical screen, which is the one you should calculate by summation over all the grid points on the aperture.

This formula for the amplitude AA can then directly be translated into code:

class ElectricField {
// ...
_computeElectricField(aperture, lambdaInNanoMeter) {
const k = 2 * Math.PI / (lambdaInNanoMeter * 1e-9);
for (let i = 0; i < this._N; i++)
for (let j = 0; j < this._N; j++)
this._field[i][j] = aperture.sumRaysAt(i, j, k) / R;
}
}
class Aperture {
// ...
sumRaysAt(i, j, k) {
let field = 0;
const kx = k * this._kX[i][j];
const ky = k * this._kY[i][j];
for (const [m, n] of this._aperture)
field += Math.cos(kx * this._X[m][n] + ky * this._Y[m][n]) * this._dx_dy;
return field;
}
}