% Self-running demonstration of a diffraction grating spectrum
% by addition of sinewaves from the superimposition of 
% reflections from multiple grooves, with phase shift due to incremental 
% path length difference between waves from the adjacent grooves.
% Shows build-up of resultant diffraction pattern as superimposed waves 
% are added.  Note: For a clearer presentation, drag the figure1 
% and figure2 windows so they do not overlap. 
% Tom O'Haver, toh@umd.edu, March 2006
clear
% N = Number of grooves in grating (Try 2 to 30): 
N=10;
% Suggestion: start out with N=2; the "spectrum" is just a sine 
% wave in that case, the ultimate in low resolution!). Then try N=3, 4,
% 5...  what happens as N increases.  Real gratings have N = 1000's
format compact
clf
hold off
x=[0:.1:pi];  % x-axis for one cycle of sine wave (wavelength=2¹)
z=zeros(size(x));
StartPLD=5;
EndPLD=14;
Increment=.05;
intensity=zeros(1,2000);
OPL=zeros(1,2000);
k=1;
figure(1);clf
axis([-.5 3.5 -1 1]);
figure(2);clf
axis([0 2.5 0 20*N*N]);
ylabel('Relative irradiance')
xlabel('Pathlength difference between adjacent grooves, in wavelengths')
title('Observed irradiance  (Mean-square of sum of all reflections)')
for pld=StartPLD:Increment:EndPLD,  % path length difference in radians
  z=zeros(size(x));
  a=0;
  figure(1);clf; hold on
  xlabel('Path length difference shown is close to one wavelength (first order)')
  ylabel('electric vector magnitude')
  title('Electric vectors of the separate waves from each groove')
  text(1,.9,['Grating has ' num2str(N) ' grooves'])
  for j=1:N, 
     y=sin(3.*x+a);
     z=z+y;   % z is waveform (sine) resulting from superimposition
     figure(1);axis([0 3 -1 1]);plot(x,y)
     a=a+pld;
  end
  hold off
  drawnow
  intensity(k)=sum(z.*z);  % calculates mean amplitude
  OPL(k)=pld./(2*pi);
  figure(2); hold on; plot(OPL(1:k-1),intensity(1:k-1))
  drawnow
  k=k+1;
end
hold off
figure(2)