Add Example

This commit is contained in:
Ksyer
2024-11-11 16:32:53 +08:00
parent a2cb6d1825
commit 29ae9585f9
56 changed files with 4029 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
% load st.mat
% [ A ] = generate_matrix_long(transpose(s_T));
N = 512;
A = dftmtx(N) / sqrt(N);
A = A(1: 256, :);
Target_index = 321;
SNR = 10;
lambda = 0.0005;
%%
[ x_mf, x_cs ] = yAxn_recovery( A, SNR, Target_index, lambda );
figure(1111)
subplot(211)
plot(abs(x_mf))
subplot(212)
plot(abs(x_cs))
%%
rep_time = 500;
[ 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 );
P_fa_MF = res_MF(:,1);
P_d_MF = res_MF(:,2);
P_fa_CS = res_CS(:,1);
P_d_CS = res_CS(:,2);
figure;
loglog(P_fa,P_fa_MF, 'linewidth', 2);
hold on;
loglog(P_fa,P_fa_CS, 'linewidth', 2);
legend('MF','CS')
xlabel('P_{fa}');
ylabel('Actual P_{fa}');
figure;
semilogx(P_fa,P_d_MF, 'linewidth', 2);
hold on;
semilogx(P_fa,P_d_CS, 'linewidth', 2);
legend('MF','CS')
xlabel('P_{fa} set');
ylabel('P_{d}');
figure;
semilogx(P_fa_MF,P_d_MF, 'linewidth', 2);
hold on;
grid on;
semilogx(P_fa_CS,P_d_CS, 'linewidth', 2);
xlim([1e-4,1])
legend('MF','CS')
xlabel('Actual P_{fa}');
ylabel('P_{d}');
title('ROC');
figure
subplot(211)
histogram(real(H0_MF_cnt(5,:)))
hold on;
histogram(real(H1_MF_cnt))
subplot(212)
histogram(real(H0_CS_cnt(5,:)))
hold on;
histogram(real(H1_CS_cnt))
+57
View File
@@ -0,0 +1,57 @@
clc
clear
close all
rng(6)
PRF = 5000; % 脉冲重复频率
Tr = 1 / PRF; % 脉冲重复间隔
Tp = 2e-5;
P = 10;
B = P / Tp;
fs = 10 * B;
Ts = 1/fs;
fc = 1.25e9;
t = 0:1/fs:1-1/fs;
tsin = Tp / P * 2;
fsin = 1 / tsin;
N = round(Tr * fs);
N_high = round(Tp * fs / P);
signal_t = zeros(1, N);
signal_td = zeros(1, N);
sign_p = sign(randn(1, P));
for p = 1: P
for i = 1: N_high
tp = (i - 1) * (1 / fs);
signal_t(1, (p-1)*N_high + i) = sign_p(p) * exp(1j * 2 * pi * fsin * tp);
tp2 = (i - 0.5) * (1 / fs);
signal_td(1, (p-1)*N_high + i) = sign_p(p) * exp(1j * 2 * pi * fsin * tp2);
end
end
A = zeros(N, 2 * N);
A(:, 1) = transpose(signal_t);
A(:, 2) = transpose([0, signal_td(1: end-1)]);
for k = 3: 2 * N
A(:, k) = [0; A(1: end - 1, k - 2)];
end
figure(1)
subplot(211)
plot(real(A(1:N_high*P+20, 1)))
hold on;
plot(real(A(1:N_high*P+20, 2)))
plot(real(A(1:N_high*P+20, 3)))
subplot(212)
plot(imag(A(1:N_high*P+20, 1)))
hold on;
plot(imag(A(1:N_high*P+20, 2)))
plot(imag(A(1:N_high*P+20, 3)))
+106
View File
@@ -0,0 +1,106 @@
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
+57
View File
@@ -0,0 +1,57 @@
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