function convanim(X,H,makemovie)
% convanim(X,H,makemovie)
%    Animate the convolution between two sequences 
%    by calculating it point-by-point, showing the overlaps.
%    X is the longer sequence.
% 2010-11-23 Dan Ellis dpwe@ee.columbia.edu

if nargin < 3
  makemovie = 0;
end

% Initialize the movie
if makemovie
  moviename = 'convanim.mov';
  disp(['writing movie ', moviename]);
  eval(['MakeQTMovie start ', moviename]);
  eval(['MakeQTMovie framerate 30']);
end

subplot(211)
plot(X)

lx = length(X);
lh = length(H);
ly = lx + lh - 1;

Y = NaN*ones(1,ly);

y0 = conv(X,H);

% Zero-pad X so that we always have valid points to calculate
% against
padX = [zeros(1,lh-1),X,zeros(1,lh-1)];

for i = 1:ly
  
  subplot(211)
  plot(1:lx,X,(i-lh)+[1:lh],fliplr(H),'r');
  ax = axis();
  axis([1-lh,ly,ax(3),ax(4)]);
  Y(i) = sum(fliplr(H).*padX((i-1)+[1:lh]));
  subplot(212)
  plot([1:ly]-lh/2,Y);
  axis([1-lh,ly,min(y0),max(y0)]);

  % Save this image
  if makemovie
    MakeQTMovie addfigure
  else
    drawnow
  end

end

if makemovie
  MakeQTMovie finish
end

% then compress down e.g.
% ffmpeg -i convanim.mov -vcodec mpeg4 -b 100k -mbd 2 -flags +mv4 -trellis 2 -cmp 2 -subcmp 2 convanim.mp4