From 4a7a8ab31bac94d28db71485981bb9799b31bccb Mon Sep 17 00:00:00 2001 From: Ksyer <> Date: Tue, 19 Dec 2023 17:12:26 +0800 Subject: [PATCH] Add Phase Transitions in FAR using CS folder --- Phase Transitions in FAR using CS/Expr1.m | 26 +++++++ .../Expr1.mat | Bin .../Expr1_can_recovery.m | 20 ++--- .../Expr1_draw.m | 11 +++ Phase Transitions in FAR using CS/Expr2.m | 25 ++++++ .../Expr2_can_recovery.m | 36 +++++++++ Phase Transitions in FAR using CS/Expr3.asv | 72 ++++++++++++++++++ Phase Transitions in FAR using CS/Expr3.m | 63 +++++++++++++++ Phase Transitions in FAR using CS/Expr3.mat | Bin 0 -> 201 bytes .../Expr3_can_recovery.asv | 43 +++++++++++ .../Expr3_can_recovery.m | 44 +++++++++++ Phase Transitions in FAR using CS/I.mat | Bin 0 -> 8319 bytes .../LICENSE | 0 Phase Transitions in FAR using CS/README.md | 8 ++ .../calc_integral.m | 15 ++++ .../phase_transition.m | 37 +++++++++ get_recovery_prob.m | 7 -- main.m | 11 --- 18 files changed, 390 insertions(+), 28 deletions(-) create mode 100644 Phase Transitions in FAR using CS/Expr1.m rename Expr 1.mat => Phase Transitions in FAR using CS/Expr1.mat (100%) rename can_recovery.m => Phase Transitions in FAR using CS/Expr1_can_recovery.m (50%) create mode 100644 Phase Transitions in FAR using CS/Expr1_draw.m create mode 100644 Phase Transitions in FAR using CS/Expr2.m create mode 100644 Phase Transitions in FAR using CS/Expr2_can_recovery.m create mode 100644 Phase Transitions in FAR using CS/Expr3.asv create mode 100644 Phase Transitions in FAR using CS/Expr3.m create mode 100644 Phase Transitions in FAR using CS/Expr3.mat create mode 100644 Phase Transitions in FAR using CS/Expr3_can_recovery.asv create mode 100644 Phase Transitions in FAR using CS/Expr3_can_recovery.m create mode 100644 Phase Transitions in FAR using CS/I.mat rename LICENSE => Phase Transitions in FAR using CS/LICENSE (100%) create mode 100644 Phase Transitions in FAR using CS/README.md create mode 100644 Phase Transitions in FAR using CS/calc_integral.m create mode 100644 Phase Transitions in FAR using CS/phase_transition.m delete mode 100644 get_recovery_prob.m delete mode 100644 main.m diff --git a/Phase Transitions in FAR using CS/Expr1.m b/Phase Transitions in FAR using CS/Expr1.m new file mode 100644 index 0000000..2bd5a61 --- /dev/null +++ b/Phase Transitions in FAR using CS/Expr1.m @@ -0,0 +1,26 @@ +% Expr1.m to draw Fig 2(a) + +max_n = 125; +max_s = 35; +trials_time = 50; +m = 4; +d = 32; +eps = 1e-5; + +prob = zeros(max_n, max_s); + +for n = 1:max_n + + parfor s = 1:max_s + x = 0; + + for t = 1:trials_time + x = x + Expr1_can_recovery(n, s, m, d, eps); + end + + prob(n, s) = x / trials_time; + end + +end + +save("Expr1.mat", "prob"); diff --git a/Expr 1.mat b/Phase Transitions in FAR using CS/Expr1.mat similarity index 100% rename from Expr 1.mat rename to Phase Transitions in FAR using CS/Expr1.mat diff --git a/can_recovery.m b/Phase Transitions in FAR using CS/Expr1_can_recovery.m similarity index 50% rename from can_recovery.m rename to Phase Transitions in FAR using CS/Expr1_can_recovery.m index 84765f2..a0e0fc9 100644 --- a/can_recovery.m +++ b/Phase Transitions in FAR using CS/Expr1_can_recovery.m @@ -1,8 +1,6 @@ -function flg = can_recovery(n, s) - d = 100; - eps = 1e-5; - theta = randn(n, d); - +function flg = Expr1_can_recovery(n, s, m, d, eps) + theta = randn(n, m * d); + x = zeros(d, 1); random_indices = randperm(d, s); x(random_indices) = randn(s, 1); @@ -10,16 +8,18 @@ function flg = can_recovery(n, s) y = theta * x; cvx_begin - variable s1(d) - minimize(norm(s1, 1)) - subject to - norm(y - theta * s1) <= eps + variable s1(d) + minimize(norm(s1, 1)) + subject to + norm(y - theta * s1) <= eps cvx_end - p = norm(x-s1, 2); + p = norm(x - s1, 2); + if p < eps flg = 1; else flg = 0; end + end diff --git a/Phase Transitions in FAR using CS/Expr1_draw.m b/Phase Transitions in FAR using CS/Expr1_draw.m new file mode 100644 index 0000000..4587798 --- /dev/null +++ b/Phase Transitions in FAR using CS/Expr1_draw.m @@ -0,0 +1,11 @@ +load 'Expr 1.mat' +p = rot90(prob, 3); +imagesc(p) + +set(gca, 'xtick', 1:10:100); +set(gca, 'xticklabel', {'0', '10', '20', '30', '40', '50', '60', '70', '80', '90', '100'}) +xlabel('Sparsity of signal (s)') + +set(gca, 'ytick', 1:10:100); +set(gca, 'yticklabel', {'0', '10', '20', '30', '40', '50', '60', '70', '80', '90', '100'}) +ylabel('Number of Mersurements (n)') diff --git a/Phase Transitions in FAR using CS/Expr2.m b/Phase Transitions in FAR using CS/Expr2.m new file mode 100644 index 0000000..4249730 --- /dev/null +++ b/Phase Transitions in FAR using CS/Expr2.m @@ -0,0 +1,25 @@ +% Expr2.m to draw Fig 2(b) + +max_n = 100; +max_s = 100; +trials_time = 50; +d = 100; +eps = 1e-5; + +prob = zeros(max_n, max_s); + +for n = 1:max_n + + for s = 1:max_s + x = 0; + + for t = 1:trials_time + x = x + Expr2_can_recovery(n, s, d, eps); + end + + prob(n, s) = x / trials_time; + end + +end + +save("Expr2.mat", "prob"); diff --git a/Phase Transitions in FAR using CS/Expr2_can_recovery.m b/Phase Transitions in FAR using CS/Expr2_can_recovery.m new file mode 100644 index 0000000..c7df676 --- /dev/null +++ b/Phase Transitions in FAR using CS/Expr2_can_recovery.m @@ -0,0 +1,36 @@ +function flg = Expr2_can_recovery(n, s, d, eps) + theta_real = randn(n, d); + theta_imag = randn(n, d); + theta = theta_real + 1j * theta_imag; + + x = zeros(d, 1); + random_indices = randperm(d, s); + x(random_indices) = randn(s, 1); + + for i = 1:d + + if x(i) ~= 0 + t = rand(1); + x(i) = cos(t) + 1j * sin(t); + end + + end + + y = theta * x; + + cvx_begin + variable s1(d) + minimize(norm(s1, 1)) + subject to + norm(y - theta * s1) <= eps + cvx_end + + p = norm(x - s1, 2); + + if p < eps + flg = 1; + else + flg = 0; + end + +end diff --git a/Phase Transitions in FAR using CS/Expr3.asv b/Phase Transitions in FAR using CS/Expr3.asv new file mode 100644 index 0000000..cc6fbaa --- /dev/null +++ b/Phase Transitions in FAR using CS/Expr3.asv @@ -0,0 +1,72 @@ +% Expr2.m to draw Fig 3(a) +clc; +clear; + +M = 4; +N = 128; +rate = 0.02; % \Delta f / f_c = 0.02 +beta = 1; + +max_n = 125; +max_k = 25; +trials_time = 50; + +prob = zeros(max_n, max_k); + +rng(1) + +Phi_far = zeros(N, N * M); +C = randi([1, M], 1, N); +xi = 1 + 0.02 * C; + +% for i = 1:N +% +% Phi_x = zeros(N, M); +% +% for p = 1:M +% +% for q = 1:N +% range = ((p - 1) * C(i)) / M; % p start from 0 or 1? +% doppler = ((q - 1) * (i - 1) * xi(i)) / N; % q start from 0 or 1? +% Phi_x(q, p) = exp(1j * 2 * pi * (range + doppler)) / sqrt(N); +% end +% +% end +% +% % t == ctranspose(Phi_x(:,1)) * Phi_x(:,1) == 1 +% Phi_far(:, (i - 1) * M + 1:i * M) = Phi_x; +% +% end + +for i = 1:n + for j = 1:m + + +n = 60; +k = 5; + +s = beta * k * M; +x = 0; + +for t = 1:trials_time + x = x + Expr3_can_recovery(Phi_far, N, M, n, s, eps); +end +disp(x); + + +for n = 1:max_n + + parfor k = 1:max_k + s = beta * k * M; + x = 0; + + for t = 1:trials_time + x = x + Expr3_can_recovery(Phi_far, N, M, n, s, eps); + end + + prob(n, k) = x / trials_time; + end + +end + +save("Expr3.mat", "prob"); diff --git a/Phase Transitions in FAR using CS/Expr3.m b/Phase Transitions in FAR using CS/Expr3.m new file mode 100644 index 0000000..31d44a5 --- /dev/null +++ b/Phase Transitions in FAR using CS/Expr3.m @@ -0,0 +1,63 @@ +% Expr2.m to draw Fig 3(a) +clc; +clear; + +M = 4; +N = 128; +rate = 0.02; % \Delta f / f_c = 0.02 +beta = 1; + +max_n = 125; +max_k = 25; +trials_time = 10; +eps = 1e-5; + +prob = zeros(max_n, max_k); + +rng(1) + +Phi_far = zeros(N, N * M); + +C = randi([0, M-1], 1, N); +vecn = 0:N-1; +xi = 1 + rate .* C; + +for i = 1:N + for j = 1:M + t = (i-1)*M+j; + temp = 1/sqrt(N) .* exp(1j * 2 * pi + (j-1) / M .* C + 1j * 2 * pi * (i-1)/N .* vecn .* xi); + Phi_far(:, t) = temp; + end + disp(ctranspose(Phi_far(:,1)) * Phi_far(:,1)) +end + + +% n = 60; 0 +n = 70; +k = 7; + +s = beta * k * M; +x = 0; + +for t = 1:trials_time + x = x + Expr3_can_recovery(Phi_far, N, M, n, s, eps); +end +disp(x); + + +for n = 1:max_n + + parfor k = 1:max_k + s = beta * k * M; + x = 0; + + for t = 1:trials_time + x = x + Expr3_can_recovery(Phi_far, N, M, n, s, eps); + end + + prob(n, k) = x / trials_time; + end + +end + +save("Expr3.mat", "prob"); diff --git a/Phase Transitions in FAR using CS/Expr3.mat b/Phase Transitions in FAR using CS/Expr3.mat new file mode 100644 index 0000000000000000000000000000000000000000..b9e7934285e4a3adcc3ba77cb2fce6ac1a89f55b GIT binary patch literal 201 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