# The Airy Disk of a diffraction limited system

The **Airy Disk** describes the blur arising from an ideal (diffraction-limited) uniformly illuminated, circular aperture. Its name arises from the astronomer, Lord Airy (George Biddell Airy)

This script exposes the code used to calculate and plot the Airy disk for diffraction limited optics.

See also: dlMTF, oiCreate; oiCompute, ieShape, ieDrawShape

Copyright ImagEval Consultants, LLC, 2010.

## Contents

ieInit

## Establish a scene and a diffraction limited optics

scene = sceneCreate; oi = oiCreate; oi = oiCompute(scene,oi); % Pull out the optics optics = oiGet(oi,'optics');

## Select spatial samples and wavelength for plotting

nSamp = 25; thisWave = 500; units = 'um'; clear fSupport val = opticsGet(optics,'dlFSupport',thisWave,units,nSamp); [fSupport(:,:,1),fSupport(:,:,2)] = meshgrid(val{1},val{2}); %Over sample to make a smooth image. This move increases the spatial %frequency resolution (highest spatial frequency) by a factor of 4. fSupport = fSupport*4; % Frequency units are cycles/micron. The spatial frequency support runs % from -Nyquist:Nyquist. With this support, the Nyquist frequency is % actually the highest (peak) frequency value. There are two samples per % Nyquist, so the sample spacing is 1/(2*peakF) % peakF = max(fSupport(:)); deltaSpace = 1/(2*peakF);

## Calculate the OTF using diffraction limited MTF (dlMTF)

otf = dlMTF(oi,fSupport,thisWave,units); % Derive the psf from the OTF psf = fftshift(ifft2(otf)); % Make the spatial support for the PSF clear sSupport samp = (-nSamp:(nSamp-1)); [X,Y] = meshgrid(samp,samp); sSupport(:,:,1) = X*deltaSpace; sSupport(:,:,2) = Y*deltaSpace; % Calculate the Airy disk fNumber = opticsGet(optics,'fNumber'); % This is the Airy disk radius, by formula radius = (2.44*fNumber*thisWave*10^-9)/2 * ieUnitScaleFactor(units); % Draw a circle at the first zero crossing (Airy disk) nCircleSamples = 200; [adX,adY,adZ] = ieShape('circle',nCircleSamples,radius);

## Plot the diffraction limited PSF.

x = sSupport(:,:,1); y = sSupport(:,:,2); vcNewGraphWin; mesh(x,y,psf); colormap(jet) % Label the graph and draw the Airy disk ringZ = max(psf(:))*1e-3; hold on; p = plot3(adX,adY,adZ + ringZ,'k-'); set(p,'linewidth',3); hold off; xlabel('Position (um)'); ylabel('Position (um)'); zlabel('Irradiance (relative)'); title(sprintf('Point spread (%.0f nm)',thisWave)); % Return the plotted values to the user. They can retrieve these using % % uData = get(gcf,'userData'); % Note that case sensitivity is ignored udata.x = x; udata.y = y; udata.psf = psf; set(gcf,'userdata',udata);

## The same result obtains if you use the ISET function

f = oiPlot(oi,'psf',[],500,'um');