function [ res_MF, res_CS, P_fa, H1_MF_cnt, H0_MF_cnt, H1_CS_cnt, H0_CS_cnt ] = yAxn_MC( A, SNR, Target_index, lambda, rep_time ) % matrix parameters [M, N] = size(A); mul = A(:,1)'*A(:,1); % H0 sample L = round(Target_index + N * 0.1); R = round(N * 0.9); Lambda_C = L: R; % parameters sigma_n = 0.1; Target_amplitude = sqrt(10^(SNR/10) * sigma_n^2 / mul); %% CS setting % CS-parameters % lambda = 0.0005; alpha = 1/4; delta = 1e-8*alpha; % CS-normalization J1 = A*A'; lambda_J=eig(J1); A_norm = A / sqrt(lambda_J(end)); Hp = A_norm'*A_norm; [~, D] = eig(Hp); d = diag(D); sigma_n_norm = sigma_n / sqrt(lambda_J(end)); %% generate x x = zeros(N, 1); x(Target_index) = Target_amplitude; %% MC parameters P_fa = [1e-6, 1e-5, 1e-4, 5e-4, 1e-3, 5e-3, 1e-2, 5e-2, 1e-1, 5e-1, 1]; len_P_fa = length(P_fa); P_fa_MF_cnt = zeros(len_P_fa, rep_time); P_d_MF_cnt = zeros(len_P_fa, rep_time); P_fa_CS_cnt = zeros(len_P_fa, rep_time); P_d_CS_cnt = zeros(len_P_fa, rep_time); H1_index = zeros(N, 1); H1_index(Target_index) = 1; H0_index = ones(size(x)); H0_index(Target_index) = 0; H1_MF_cnt = zeros(1, rep_time); H0_MF_cnt = zeros(N - 1, rep_time); H1_CS_cnt = zeros(1, rep_time); H0_CS_cnt = zeros(N - 1, rep_time); %% MC parfor rep = 1: rep_time % for rep = 1: rep_time %% generate y noise = random('Normal', 0, sigma_n/sqrt(2), M, 1) + 1j * random('Normal', 0, sigma_n/sqrt(2), M, 1); y = A*x + noise; %% recover % MF x_mf = A' * y ./ mul; % sigma_MF = sqrt(var(x_mf(Lambda_C))); sigma_MF = sigma_n / sqrt(mul); x_mf_norm = x_mf ./ sigma_MF; stat_MF = abs(x_mf ./ sigma_MF).^2; % CS y_norm = y / sqrt(lambda_J(end)); x_FISTA = FISTA_v1(y_norm, A_norm, lambda, delta, Hp); [x_d_cal_f, hat_Q1_cal_f, sigma_d_cal_f] = cal_debiased_LASSO_v1(x_FISTA, A_norm, y_norm, lambda, sigma_n_norm, d); % sigma_CS = sqrt(var(x_d_cal_f(Lambda_C))); sigma_CS = sigma_d_cal_f; x_cs_norm = x_d_cal_f ./ sigma_CS; stat_CS = abs(x_d_cal_f ./ sigma_CS).^2; %% detect H1_MF_cnt(rep) = x_mf(Target_index); H0_MF_cnt(:,rep) = [x_mf(1:Target_index-1);x_mf(Target_index+1:end)]; H1_CS_cnt(rep) = x_d_cal_f(Target_index); H0_CS_cnt(:,rep) = [x_d_cal_f(1:Target_index-1);x_d_cal_f(Target_index+1:end)]; kd = chi2inv(1 - P_fa, 2) / 2; for cnt_h_th = 1: len_P_fa P_fa_MF_cnt(cnt_h_th, rep) = sum(stat_MF(H0_index > 0) > kd(cnt_h_th)) / sum(H0_index); P_d_MF_cnt(cnt_h_th, rep) = sum(stat_MF(H1_index > 0) > kd(cnt_h_th)) / sum(H1_index); P_fa_CS_cnt(cnt_h_th, rep) = sum(stat_CS(H0_index > 0) > kd(cnt_h_th)) / sum(H0_index); P_d_CS_cnt(cnt_h_th, rep) = sum(stat_CS(H1_index > 0) > kd(cnt_h_th)) / sum(H1_index); end fprintf('%d\n', rep); end P_fa_MF = mean(P_fa_MF_cnt, 2); P_d_MF = mean(P_d_MF_cnt, 2); P_fa_CS = mean(P_fa_CS_cnt, 2); P_d_CS = mean(P_d_CS_cnt, 2); res_MF = [P_fa_MF, P_d_MF]; res_CS = [P_fa_CS, P_d_CS]; end