daniele@170: function plotcumcoherence(obj,mu) daniele@170: if ~exist('mu','var') || isempty(mu), mu = cumcoherence(obj); end daniele@170: [d N] = size(obj.phi); daniele@170: daniele@170: % Plot cumulative coherence with lower and upper bounds daniele@170: mumin = (1:d)*sqrt((N-d)/(d*(N-1))); daniele@170: mumax = (1:d); daniele@170: figure, daniele@170: subplot(1,6,1:2) daniele@170: hold on, grid on daniele@170: plot(1,mumax(1),'k-s'); daniele@170: plot(1,mu(1),'ko'); daniele@170: plot(1,mumin(1),'k-d') daniele@170: set(gca,'XScale','log','YScale','log'); daniele@170: axis tight daniele@170: ylabel('\mu'); daniele@170: ylim([mumin(1) 10]) daniele@170: daniele@170: subplot(1,6,3:6) daniele@170: hold on, grid on daniele@170: plot(2:d,mumax(2:end),'k-s'); daniele@170: plot(2:d,mu(2:end),'k-o'); daniele@170: plot(2:d,mumin(2:end),'k-d'); daniele@170: set(gca,'XScale','log','YScale','log'); daniele@170: axis tight daniele@170: xlabel('k'); daniele@170: ylabel('\mu(k)'); daniele@170: ylim([mumin(1) 10]) daniele@170: daniele@170: % Plot recovery bounds daniele@170: plot(2:d,1-mu(1:d-1),'r-o') daniele@170: plot(2:d,1-mumin(1:d-1)','r-d') daniele@170: plot([2 d],[1/3 1/3],'b'); daniele@170: legend('\mu_{max}(k)','\mu(k)','\mu_{min}(k)','Exact-Sparse \mu','Exact-Sparse \mu_{min}','Sparse'); daniele@170: daniele@170: daniele@170: % v = conv(mu,[1 1]); daniele@170: % ind = find(v<1, 1, 'last'); daniele@170: % daniele@170: % line([ind ind], [min(mu) max(mu)],'Color','red'); daniele@170: % title(['Minimum allowed sparsity (Tanner):' num2str(ind/obj.len)]); daniele@170: end