job_wtBPDN_WAVE

PURPOSE ^

Comparison of various solvers for iterative reweighting and adaptive reweighting

SYNOPSIS ^

This is a script file.

DESCRIPTION ^

 Comparison of various solvers for iterative reweighting and adaptive reweighting

 Solves the following basis pursuit denoising (BPDN) problem
 min_x  \Sum \w_i |x_i| + 1/2*||y-Ax||_2^2

 while updating the weights w_i

 Written by: Salman Asif, Georgia Tech
 Email: sasif@gatech.edu
 Created: June 16, 2011
 
 Reference: 
 "Fast and accurate algorithms for re-weighted L1 norm minimization," by 
 M. Salman Asif and Justin Romberg
 
 To reproduce experiments in the paper, use this scrip with 
 
 rseed = 2012;
 rand('state',rseed);
 randn('state',rseed);
  
 before running each simulation in 
 script_simulation_wtBPDN

 The paper has results for Blocks and HeaviSine at SNR = 40
 Run publish_results.m in the misc folder to generate pdfs presented int the paper.

 NOTE: While preparing the code for release, I realized that I used the average
 of SER in db when I compiled results for publication, which is probably 
 not the correct way to compute the average. 

 The average SER in the paper was computed as mean(-10log10(normalized error))
 The standard way to compute average is -10log10(mean(normalized squared error))
 where mean is over all the experiments. 

 To reproduce results in the paper, use publish_results.m
 Otherwise use publish_results_new.m

 This changes the values of average SER for all the solvers. However, the 
 comparison among the solvers remains almost same.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 % Comparison of various solvers for iterative reweighting and adaptive reweighting
0002 %
0003 % Solves the following basis pursuit denoising (BPDN) problem
0004 % min_x  \Sum \w_i |x_i| + 1/2*||y-Ax||_2^2
0005 %
0006 % while updating the weights w_i
0007 %
0008 % Written by: Salman Asif, Georgia Tech
0009 % Email: sasif@gatech.edu
0010 % Created: June 16, 2011
0011 %
0012 % Reference:
0013 % "Fast and accurate algorithms for re-weighted L1 norm minimization," by
0014 % M. Salman Asif and Justin Romberg
0015 %
0016 % To reproduce experiments in the paper, use this scrip with
0017 %
0018 % rseed = 2012;
0019 % rand('state',rseed);
0020 % randn('state',rseed);
0021 %
0022 % before running each simulation in
0023 % script_simulation_wtBPDN
0024 %
0025 % The paper has results for Blocks and HeaviSine at SNR = 40
0026 % Run publish_results.m in the misc folder to generate pdfs presented int the paper.
0027 %
0028 % NOTE: While preparing the code for release, I realized that I used the average
0029 % of SER in db when I compiled results for publication, which is probably
0030 % not the correct way to compute the average.
0031 %
0032 % The average SER in the paper was computed as mean(-10log10(normalized error))
0033 % The standard way to compute average is -10log10(mean(normalized squared error))
0034 % where mean is over all the experiments.
0035 %
0036 % To reproduce results in the paper, use publish_results.m
0037 % Otherwise use publish_results_new.m
0038 %
0039 % This changes the values of average SER for all the solvers. However, the
0040 % comparison among the solvers remains almost same.
0041 
0042 
0043 % function job_wtBPDN_WAVE(mT, sT, snr, rwt_mode, lam_mode)
0044 % mT = 1, sT = 2, snr = 3, rwt_mode = 5, lam_mode = 1;
0045 
0046 clear
0047 
0048 EXP_LIST = [1 1 2 5 1; 1 1 3 5 1; 1 1 4 5 1; 1 2 2 5 1; 1 2 3 5 1; 1 2 4 5 1];
0049 maxNumCompThreads(1);
0050 % numCores = str2double(getenv('NUMBER_OF_PROCESSORS'));
0051 % mpSize = 1;% size(EXP_LIST,1);
0052 % if matlabpool('size') ~= mpSize
0053 %     if matlabpool('size')~=0
0054 %         matlabpool close;
0055 %     else
0056 %         matlabpool('open', mpSize);
0057 %     end
0058 % end
0059 
0060 %% Setup path
0061 mname = mfilename;
0062 mpath = mfilename('fullpath');
0063 mdir = mpath(1:end-length(mname));
0064 cd(mdir);
0065 
0066 addpath ../Pursuits_Homotopy/
0067 addpath ../utils/
0068 addpath ../utils/utils_Wavelet
0069 addpath ../solvers/
0070 addpath src/
0071 
0072 %% Simulation parameters
0073 % reweighted setup
0074 rwt = 5;        % number of reweighting iterations
0075 rwt_adp = 0;    % number of reweighting iterations after adaptive reweighting
0076 
0077 % rank-1 update mode
0078 delx_mode = 'mil'; % mil or qr
0079 
0080 % simulation setup
0081 maxsim = 100;
0082 
0083 mType_list = {'randn','orth'};
0084 sType_list = {'blocks','HeaviSine','pcwPoly'};
0085 SNR_list = [20:10:40 inf];
0086 
0087 lambda_list = [0, 1e-1, 1e-2, 1e-4]; 
0088 % multiplication factor for tau = lambda *\|A'y\|_\infty
0089 % 0 --> sigma*log(N)
0090 
0091 N_list = [256 512 1024];
0092 M_ratio = [2:.5:4];
0093 
0094 for pf = 1:length(EXP_LIST)
0095     
0096     mT = EXP_LIST(pf,1);
0097     sT = EXP_LIST(pf,2);
0098     snr = EXP_LIST(pf,3);
0099     rwt_mode = EXP_LIST(pf,4);
0100     lam_mode = EXP_LIST(pf,5);
0101     
0102     EXP_stack = {};
0103     estack = 1;
0104     EXP_stack{1,1} = 'mType';
0105     EXP_stack{1,2} = 'sType';
0106     EXP_stack{1,3} = 'SNR';
0107     EXP_stack{1,4} = 'rwt_mode';
0108     EXP_stack{1,5} = 'lambda_mode';
0109     EXP_stack{1,6} = 'N';
0110     EXP_stack{1,7} = 'M';
0111     EXP_stack{1,8} = 'T';
0112     EXP_stack{1,9} = 'str0';
0113     EXP_stack{1,10} = 'str2';
0114     EXP_stack{1,11} = 'avg SIM_stack';
0115     EXP_stack{1,12} = 'SIM_stack';
0116     EXP_stack{1,13} = 'SIM_memory';
0117     
0118     % for mT = 1:length(mType_list);
0119     %     for sT = 1:length(sType_list);
0120     %         for snr = 1:length(SNR_list);
0121     %                 for lam_mode = 1:length(lambda_list)
0122     
0123     for nl = 1:length(N_list)
0124         for mr = 1:length(M_ratio)
0125             
0126             N = N_list(nl);     % signal length
0127             M = round(N/M_ratio(mr));   % no. of measurements
0128             T = N;   % sparsity level
0129             
0130             sType = char(sType_list{sT});
0131             mType = char(mType_list{mT});
0132             SNR = SNR_list(snr);
0133             
0134             lambda = lambda_list(lam_mode);
0135             
0136             str0 = sprintf('mType-%s, sType-%s, SNR = %d, (N,M,T) = %d, %d, %d, rwt_mode-%d, lambda%3.4g.', mType, sType, SNR, N, M, T, rwt_mode, lambda);
0137             disp(str0);
0138             
0139             % filename_save = sprintf('results_comparison_ALL/comparison_wtBPDN_mType%s_sType%s_SNR%d_rwt_mode%d_lambda%3.4g_N%d_M%d_T%d.mat',mType,sType,SNR,rwt_mode,lambda,N,M,T);
0140             % filename_save = sprintf('results_comparison_ALL/comparison_wtBPDN_mT-%s_sT-%s_SNR%d_rwt_mode%d_lam_mode%d.mat',mType,sType,SNR,rwt_mode,lam_mode);
0141             
0142             filename_save = sprintf('results_comparison_ALL/comparison_wtBPDN_mT-%s_sT-%s_SNR%d-reproduce-Trwt.mat',mType,sType,SNR);
0143             % filename_save = sprintf('results_comparison_ALL/comparison_wtBPDN_mT-%s_sT-%s_SNR%d-reproduce-rwt.mat',mType,sType,SNR);
0144             
0145             % load RandomStates
0146             %
0147             % Experiments in the earlier draft...
0148             % rseed = 0;
0149             % rseed = sum(100*clock);
0150             % RandStream.setDefaultStream(RandStream('mt19937ar','seed',rseed));
0151             %
0152             % Experiments that reproduce results in the paper...
0153             rseed = 2012;
0154             rand('state',rseed);
0155             randn('state',rseed);
0156             
0157             % rng(rseed);
0158             % rseed = rng(2012);
0159             
0160             %% Run simulation
0161             script_simulation_wtBPDN
0162             
0163             %% save results
0164             estack = estack+1;
0165             
0166             EXP_stack{estack,1} = mType;
0167             EXP_stack{estack,2} = sType;
0168             EXP_stack{estack,3} = SNR;
0169             EXP_stack{estack,4} = rwt_mode;
0170             EXP_stack{estack,5} = lambda;
0171             EXP_stack{estack,6} = N;
0172             EXP_stack{estack,7} = M;
0173             EXP_stack{estack,8} = T;
0174             EXP_stack{estack,9} = str0;
0175             EXP_stack{estack,10} = str2;
0176             EXP_stack{estack,11} = mean(cell2mat(SIM_stack),1);
0177             EXP_stack{estack,12} = SIM_stack;
0178             EXP_stack{estack,13} = SIM_memory;
0179             
0180             eval(sprintf('save %s', filename_save));
0181         end
0182     end
0183 end

Generated on Mon 10-Jun-2013 23:03:23 by m2html © 2005