Files
2024-11-11 16:33:48 +08:00

230 lines
5.5 KiB
Matlab

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 = 10:18
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
norm21 = 0;
for i = 1:N
norm21 = norm21 + norm(x(:,i));
end
minimize(norm21)
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('FARblockepsilon2.mat');
%%
close all;
clear all;
clc;
M = 4;
N = 128;
%block_sparsity = 1;
tol = 1e-5;
trial = 30;
epi = 0.02;
result = zeros(1,25);
col = 128;
Prob = [1/3,1/3,1/6,1/6];
for block_sparsity = 4:18
success_count = 0;
for loop = 1:trial
FAR_model = zeros(N,M*N);
%Cn = randperm(M)-1
for n = 0 : N-1
Cn = randsrc(1,1,[[0,1,2,3];Prob]);
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
norm21 = 0;
for i = 1:N
norm21 = norm21 + norm(x(:,i));
end
minimize(norm21)
subject to
FAR_model * x(:) == y
cvx_end
if norm(x(:)-sparse_signal(:))<tol
success_count = success_count+1;
end
end
result(block_sparsity) = success_count/trial;
end
%%
clc;
M = 4;
N = 128;
%block_sparsity = 1;
tol = 1e-5;
trial = 30;
epi = 0.02;
result2 = zeros(2,25);
col = 128;
Prob = [1/3,1/3,1/6,1/6];
for block_sparsity = 4:18
success_count = 0;
success_count2 = 0;
for loop = 1:trial
FAR_model = zeros(N,M*N);
%Cn = randperm(M)-1
for n = 0 : N-1
Cn = randsrc(1,1,[[0,1,2,3];Prob]);
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
norm21 = 0;
for i = 1:N
norm21 = norm21 + norm(FAR_model(:,M*i-3:M*i)*x(:,i));
end
minimize(norm21)
subject to
FAR_model * x(:) == y
cvx_end
err1 = 0;
for i =1:N
err1 = err1 + norm(FAR_model(:,M*i-3:M*i)*(x(:,i)-sparse_signal(:,i)));
end
if err1<tol
success_count2 = success_count2 +1;
end
if norm(x(:)-sparse_signal(:))<tol
success_count = success_count+1;
end
end
result2(1,block_sparsity) = success_count/trial;
result2(2,block_sparsity) = success_count2/trial;
end
%%
close all;
clear all;
clc;
M = 4;
N = 64;
%block_sparsity = 1;
tol = 1e-5;
trial = 50;
epi = 0.02;
%result = zeros(N,25);
%for col = 4:4:128
col = 64;
block_sparsity = 6;
err = 0.1;
sigma = 0.5*sqrt(block_sparsity);
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(:) + sigma*(randn(N,1)) + 1i*sigma*(randn(N,1));
cvx_begin
variable x(M,N) complex
norm21 = 0;
for i = 1:N
norm21 = norm21 + norm(x(:,i));
end
minimize(norm21)
subject to
norm(FAR_model * x(:) - y)<err
cvx_end
x_block_norm = zeros(N,1);
x_norm = zeros(N,1);
for i = [1:N]
x_block_norm(i) = norm(FAR_model(:,M*i-3:M*i)*x(:,i));
x_norm(i) = norm(FAR_model(:,M*i-3:M*i)*sparse_signal(:,i));
end
hold on
plot(x_block_norm,'--o');
plot(x_norm,'-.s');
lgh = legend("Estimated","Ground Truth", ...
"MF");
set(lgh,'interpreter','latex','FontName','Times New Roman')
%set(gcf,'interpreter','latex','FontName','Times New Roman')
xlabel("\fontname{Times New Roman}Velocity Cell Index");
ylabel("\fontname{Times New Roman}Test Statistics \it{T_i}");
xlim([0 75]);
%end