function im = psf_downsample(im_sharp, aa_factor)
	% downsample sharp particle image by an anti-aliasing factor
	%
	% Input:
	%	im_sharp	sharp particle image
	%	aa_factor	factor by which to downsample image
	% Output:
	%	im			downsampled particle image

	im_sharp_sz = [0 0];
	[im_sharp_sz(1), im_sharp_sz(2), n_img] = size(im_sharp);
	assert(all(mod(im_sharp_sz, aa_factor) == 0), ...
		'sharp image must be an integer multiple of the anti-aliasing factor');
	im_sz		= im_sharp_sz / aa_factor;
	
	%% build anti-aliasing matrix
	aa_mtx		= psf_aa_matrix(im_sz, aa_factor);

	%% apply to images
	n_px_up		= prod(im_sharp_sz);
	im_sharp    = reshape(im_sharp, n_px_up, n_img);
	im			= aa_mtx * im_sharp;
	im			= reshape(im, [im_sz n_img]);
end
