annotate util/sparco utils/genSampling.m @ 221:c1efdd5d6250 luisf_dev

added ompbox_fast as sparse approximation solver, which calls the functions in ompbox using the fastest implementation
author Daniele Barchiesi <daniele.barchiesi@eecs.qmul.ac.uk>
date Wed, 11 Apr 2012 16:13:08 +0100
parents 62f20b91d870
children
rev   line source
ivan@77 1 function [minIntrVec,stat,actpctg] = genSampling(pdf,iter,tol)
ivan@77 2
ivan@77 3 %[mask,stat,N] = genSampling(pdf,iter,tol)
ivan@77 4 %
ivan@77 5 % a monte-carlo algorithm to generate a sampling pattern with
ivan@77 6 % minimum peak interference. The number of samples will be
ivan@77 7 % sum(pdf) +- tol
ivan@77 8 %
ivan@77 9 % pdf - probability density function to choose samples from
ivan@77 10 % iter - number of tries
ivan@77 11 % tol - the deviation from the desired number of samples in samples
ivan@77 12 %
ivan@77 13 % returns:
ivan@77 14 % mask - sampling pattern
ivan@77 15 % stat - vector of min interferences measured each try
ivan@77 16 % actpctg - actual undersampling factor
ivan@77 17 %
ivan@77 18 % (c) Michael Lustig 2007
ivan@77 19
ivan@77 20 % This file is used with the kind permission of Michael Lustig
ivan@77 21 % (mlustig@stanford.edu), and originally appeared in the
ivan@77 22 % SparseMRI toolbox, http://www.stanford.edu/~mlustig/ .
ivan@77 23 %
ivan@77 24 % $Id: genSampling.m 1040 2008-06-26 20:29:02Z ewout78 $
ivan@77 25
ivan@77 26 % h = waitbar(0);
ivan@77 27
ivan@77 28 pdf(find(pdf>1)) = 1;
ivan@77 29 K = sum(pdf(:));
ivan@77 30
ivan@77 31 minIntr = 1e99;
ivan@77 32 minIntrVec = zeros(size(pdf));
ivan@77 33
ivan@77 34 for n=1:iter
ivan@77 35 tmp = zeros(size(pdf));
ivan@77 36 while abs(sum(tmp(:)) - K) > tol
ivan@77 37 tmp = rand(size(pdf))<pdf;
ivan@77 38 end
ivan@77 39
ivan@77 40 TMP = ifft2(tmp./pdf);
ivan@77 41 if max(abs(TMP(2:end))) < minIntr
ivan@77 42 minIntr = max(abs(TMP(2:end)));
ivan@77 43 minIntrVec = tmp;
ivan@77 44 end
ivan@77 45 stat(n) = max(abs(TMP(2:end)));
ivan@77 46 % waitbar(n/iter,h);
ivan@77 47 end
ivan@77 48
ivan@77 49 actpctg = sum(minIntrVec(:))/prod(size(minIntrVec));
ivan@77 50
ivan@77 51 % close(h);
ivan@77 52
ivan@77 53