230 lines
5.5 KiB
Matlab
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
|
|
|
|
|
|
|
|
|