www.pudn.com > trackingdemos.zip > MDL_demo2.m


% MDL_demo2.m 
% 
% demo version for comparison between the MDL model selection and the GLRT approach 
% in a one-dimensional detection problem using ML-PDA (cont. called by MDL_demo.m) 
disp('To compare MDL vs. GLRT, Monte Carlo simulations are needed'); 
disp('We consider three situations: '); 
disp('             1. No signal presents'); 
disp('             2. One signal presents at location 3'); 
disp('             3. Two signals present at locations -3 and 4'); 
disp('100 MC runs for each scenario and the numbers of making correct decisions'); 
disp('are listed ...'); 
disp('»'); 
disp('»'); 
disp('pause'); 
pause(5); 
disp('»'); 
disp('»'); 
disp('Number of scans = 40'); 
disp('Pd = 0.7'); 
disp('std of measurement noise = 1'); 
disp('Expected number of FAs per unit volume = 0.08'); 
disp('»'); 
disp('»'); 
disp('The simulation may take quite a while, please wait...'); 
lambda = 0.08; 
runs = 100; 
theta1 = 4; 
theta2 = -3; 
 
index1 = 0; 
index2 = 0; 
index3 = 0; 
index4 = 0; 
test_statH0 = []; 
test_statH1 = []; 
test_statH2 = []; 
test_newH0 = []; 
test_newH1 = []; 
test_newH2 = []; 
test_newnewH2 = []; 
h = waitbar(0, 'Please wait...'); 
for i=1:runs 
   for j=1:N 
      Z_H0(j).Z = []; 
      Z_H1(j).Z = []; 
      Z_H2(j).Z = []; 
      M1 = poissrnd(2*A*lambda); 
      M2 = poissrnd(2*A*lambda); 
      M3 = poissrnd(2*A*lambda); 
      if M1 > 0 
         Z_H0(j).Z = [Z_H0(j).Z, 2*A.*(rand(1,M1)-.5)]; 
      end 
      if M2 > 0 
         Z_H1(j).Z = [Z_H1(j).Z, 2*A.*(rand(1,M2)-.5)]; 
      end 
      if M3 > 0 
         Z_H2(j).Z = [Z_H2(j).Z, 2*A.*(rand(1,M3)-.5)]; 
      end 
       
      if rand < Pd 
         Z_H1(j).Z = [Z_H1(j).Z, theta + sigma.*randn]; 
      end 
      if rand < Pd 
         Z_H2(j).Z = [Z_H2(j).Z, theta1 + sigma.*randn]; 
      end 
      if rand < Pd  
         Z_H2(j).Z = [Z_H2(j).Z, theta2 + sigma.*randn]; 
      end 
   end 
         
   % test p(H2|H0), p(H1|H0), p(H0|H0) 
   theta_H0(i) = fminbnd('LLR_Gau_PDA2', -A, A, [], Z_H0, sigma, lambda, Pd, Pg); 
   NLLR_H0(i) = -LLR_Gau_PDA2(theta_H0(i), Z_H0, sigma, lambda, Pd, Pg); 
   number = get_meas_number(Z_H0); 
   test_statH0(i) = NLLR_H0(i) - .5*log(number/2/pi) - log(2*A/sigma); 
   if test_statH0(i) > 0 
      index1 = index1 + 1; 
      Z_H0_new = LLR_deduct_meas(Z_H0, theta_H0(i), sigma); 
      theta_newH0(index1) = fminbnd('LLR_Gau_PDA2', -A, A, [], Z_H0_new, sigma, lambda, Pd, Pg); 
      number = get_meas_number(Z_H0_new); 
      test_newH0(index1) = -LLR_Gau_PDA2(theta_newH0(index1), Z_H0_new, sigma, lambda, Pd, Pg) - .5*log(number/2/pi); 
   end 
        
   % test p(H2|H1), p(H1|H1), p(H0|H1) 
   theta_H1(i) = fminbnd('LLR_Gau_PDA2', -A, A, [], Z_H1, sigma, lambda, Pd, Pg); 
   NLLR_H1(i) = -LLR_Gau_PDA2(theta_H1(i), Z_H1, sigma, lambda, Pd, Pg); 
   number = get_meas_number(Z_H1); 
   test_statH1(i) = NLLR_H1(i) - .5*log(number/2/pi) - log(2*A/sigma); 
   if test_statH1(i) > 0 
      index2 = index2 + 1; 
      Z_H1_new = LLR_deduct_meas(Z_H1, theta_H1(i), sigma); 
      theta_newH1(index2) = fminbnd('LLR_Gau_PDA2', -A, A, [], Z_H1_new, sigma, lambda, Pd, Pg); 
      number = get_meas_number(Z_H1_new); 
      test_newH1(index2) = -LLR_Gau_PDA2(theta_newH1(index2), Z_H1_new, sigma, lambda, Pd, Pg) - .5*log(number/2/pi); 
   end 
 
	% test p(H3|H2), p(H2|H2), p(H1|H2), p(H0|H2) 
   theta_H2(i) = fminbnd('LLR_Gau_PDA2', -A, A, [], Z_H2, sigma, lambda, Pd, Pg); 
   NLLR_H2(i) = -LLR_Gau_PDA2(theta_H2(i), Z_H2, sigma, lambda, Pd, Pg); 
   number = get_meas_number(Z_H2); 
   test_statH2(i) = NLLR_H2(i) - .5*log(number/2/pi) - log(2*A/sigma); 
   if test_statH2(i) > 0 
      index3 = index3 + 1; 
      Z_H2_new = LLR_deduct_meas(Z_H2, theta_H2(i), sigma); 
      theta_newH2(index3) = fminbnd('LLR_Gau_PDA2', -A, A, [], Z_H2_new, sigma, lambda, Pd, Pg); 
      number = get_meas_number(Z_H2_new); 
      test_newH2(index3) = -LLR_Gau_PDA2(theta_newH2(index3), Z_H2_new, sigma, lambda, Pd, Pg) - .5*log(number/2/pi); 
      if test_newH2(index3) > 0 
         index4 = index4 + 1; 
         Z_H2_new_new = LLR_deduct_meas(Z_H2_new, theta_newH2(index3), sigma); 
         theta_newnewH2(index4) = fminbnd('LLR_Gau_PDA2', -A, A, [], Z_H2_new_new, sigma, lambda, Pd, Pg); 
         number = get_meas_number(Z_H2_new_new); 
         test_newnewH2(index4) = -LLR_Gau_PDA2(theta_newnewH2(index4), Z_H2_new_new, sigma, lambda, Pd, Pg) - .5*log(number/2/pi); 
      end 
   end 
   waitbar(i/runs); 
end 
close(h); 
P0_fct1 = length(find(test_statH0>0)); 
P0_fct2 = length(find(test_newH0>0)); 
P1_act1 = length(find(test_statH1>0)); 
P1_fct2 = length(find(test_newH1>0)); 
P2_fct1 = length(find(test_statH2>0)); 
P2_act2 = length(find(test_newH2>0)); 
P2_fct3 = length(find(test_newnewH2>0)); 
disp('Simulation results: '); 
disp(' '); 
disp('       Using MDL criterion'); 
disp('       1. No signal case'); 
string1 = ['          Number of correct decisions = ', num2str(runs-P0_fct1)]; 
disp(string1); 
disp('       2. One signal case'); 
string2 = ['          Number of correct decisions = ', num2str(P1_act1)]; 
disp(string2); 
disp('       3. Two signal case'); 
string3 = ['          Number of correct decisions = ', num2str(P2_act2)]; 
disp(string3); 
disp(' '); 
disp('       Using GLRT with 95% power under one signal case'); 
detection_threshold = prctile(NLLR_H1, 5); 
string4 = ['          Detection threshold for one signal vs. null: ', num2str(round(detection_threshold))]; 
disp(string4); 
disp(' '); 
disp('       1. No signal case'); 
string5 = ['          Number of correct decisions = ', num2str(length(find(NLLR_H0