Update Lyh experiment

This commit is contained in:
Ksyer
2024-02-21 16:46:15 +08:00
parent ae199edbcd
commit f1ae3ff41d
9 changed files with 115 additions and 3 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
% Expr1.m to draw Fig 2(a)
max_n = 125; max_n = 125;
max_s = 35; max_s = 35;
@@ -5,10 +5,10 @@ M = 4;
N = 128; N = 128;
%block_sparsity = 1; %block_sparsity = 1;
tol = 1e-5; tol = 1e-5;
trial = 50; trial = 20;
epi = 0.02; epi = 0.02;
result = zeros(N,25); result = zeros(N,25);
for col = 4:4:128 for col = 4:N
for block_sparsity = 10:18 for block_sparsity = 10:18
success_count = 0; success_count = 0;
for loop = 1:trial for loop = 1:trial
@@ -0,0 +1,45 @@
close all;
clear all;
clc;
M = 4;
N = 128;
%block_sparsity = 1;
tol = 1e-4;
trial = 20;
max_sparsity = 25;
epi = 0.02;
result = zeros(N,max_sparsity);
FAR_model = get_far_model(N, M, epi);
for n = 60:N
for s = 10:max_sparsity
success_count = 0;
for loop = 1:trial
col_choose = randperm(N,n);
FAR_model_partial = FAR_model(col_choose,:);
sparse_signal = zeros(M,N);
block = randperm(N,s);
sparse_signal(:,block) = exp(1i*2*pi*rand(M,s));
y = FAR_model_partial * sparse_signal(:);
cvx_begin
variable x(M,N) complex
norm21 = 0;
for i = 1:N
norm21 = norm21 + norm(x(:,i));
end
minimize(norm21)
subject to
FAR_model_partial * x(:) == y
cvx_end
if norm(x(:)-sparse_signal(:))<tol
success_count = success_count+1;
end
end
result(n,s) = success_count/trial;
end
end
save('FARblockepsilon4.mat');
@@ -0,0 +1,47 @@
close all;
clear all;
clc;
M = 4;
N = 128;
%block_sparsity = 1;
tol = 1e-5;
trial = 50;
epi = 0.02;
result = zeros(N,25);
for col = 4:4:128
for block_sparsity = 1:25
success_count = 0;
for loop = 1:trial
FAR_model = zeros(N,M*N);
%Cn = randperm(M)-1
for n = 0 : N-1
Cn = floor(rand()*M);
for q = 0 : N-1
for p = 0:M-1
FAR_model(n+1,q*M+p+1) = exp(1i*2*pi*p/M*Cn+1i*2*pi*q/N*n*(1+Cn*epi));
end
end
end
col_choose = randperm(N,col);
FAR_model = FAR_model(col_choose,:);
sparse_signal = zeros(M,N);
block = randperm(N,block_sparsity);
sparse_signal(:,block) = exp(1i*2*pi*rand(M,block_sparsity));
y = FAR_model * sparse_signal(:);
cvx_begin
variable x(M*N) complex
minimize(norm(x,1))
subject to
FAR_model * x == y
cvx_end
if norm(x-sparse_signal(:))<tol
success_count = success_count+1;
end
end
result(col,block_sparsity) = success_count/trial;
end
end
save('FARepsilon.mat');
@@ -0,0 +1,13 @@
function FAR_model = get_far_model(N, M, epi)
FAR_model = zeros(N,M*N);
%Cn = randperm(M)-1
for n = 0 : N-1
Cn = floor(rand()*M);
for q = 0 : N-1
for p = 0:M-1
FAR_model(n+1,q*M+p+1) = exp(1i*2*pi*p/M*Cn+1i*2*pi*q/N*n*(1+Cn*epi));
end
end
end
end
@@ -0,0 +1,7 @@
function n = theoretic(m,s,d)
syms t;
syms u;
f = s*(m+t^2)+(d-s)*int((u-t)^2*u^(m-1)*exp(-u^2/2)/(2^(m/2-1)*gamma(m/2)),u,t,inf);
g = diff(f,t);
t1 = solve(g);
n = s*(m+t1^2)+(d-s)*int((u-t1)^2*u^(m-1)*exp(-u^2/2)/(2^(m/2-1)*gamma(m/2)),u,t1,inf);