Add Example
This commit is contained in:
@@ -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))
|
||||
@@ -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)))
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user