Files
FAR_CS/0 - example/wzk - PSK_ROC/yAxn_recovery.m
T
2024-11-11 16:32:53 +08:00

58 lines
1.4 KiB
Matlab

function [ x_mf_norm, x_cs_norm ] = yAxn_recovery( A, SNR, Target_index, lambda )
% 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;
%% 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)));
x_mf_norm = x_mf ./ sigma_MF;
% 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)));
x_cs_norm = x_d_cal_f ./ sigma_CS;
end