80 lines
2.2 KiB
Matlab
80 lines
2.2 KiB
Matlab
N = 32;
|
|
M =4;
|
|
R =2;
|
|
epi = 0.02;
|
|
noise = [0.1,0.1^(0.5)];
|
|
%contri1 = zeros(M,N);
|
|
%contri2 = zeros(M,N);
|
|
con1 = zeros(20,2);
|
|
con2 = zeros(20,2);
|
|
re1 = zeros(20,2);
|
|
re2 = zeros(20,2);
|
|
|
|
for noise_k = 1:2
|
|
for k = 1:20
|
|
for loop = 1:50
|
|
|
|
|
|
FAR_model = zeros(N,M*N);
|
|
order = randperm(M)-1;
|
|
for n = 0 : N-1
|
|
Cn = order(ceil(rand()*R));
|
|
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
|
|
|
|
x = zeros(M,N);
|
|
col = randperm(N,k);
|
|
x(:,col) = randn(M,k) + 1i*randn(M,k);
|
|
y = FAR_model * x(:) + (randn(N,1)+1i*randn(N,1))*noise(noise_k);
|
|
|
|
cvx_begin
|
|
variable x_e(M,N) complex
|
|
norm21 = 0;
|
|
for i = 1:N
|
|
norm21 = norm21 + norm(FAR_model(:,(i-1)*M+1:i*M)*x_e(:,i));
|
|
end
|
|
minimize(norm21)
|
|
subject to
|
|
norm(FAR_model*x_e(:) - y) <= sqrt(N)*noise(noise_k);
|
|
cvx_end
|
|
contri2 = zeros(N,1);
|
|
re_err = zeros(N,1);
|
|
for i = 1:N
|
|
if ismember(i,col)
|
|
re_err = re_err+FAR_model(:,(i-1)*M+1:i*M)*(x_e(:,i));
|
|
end
|
|
contri2(i) = norm(FAR_model(:,(i-1)*M+1:i*M)*(x_e(:,i)));
|
|
end
|
|
re1(k,noise_k) = re1(k,noise_k) +norm(FAR_model*x(:)-re_err)/norm(FAR_model*x(:));
|
|
con1(k,noise_k) = con1(k,noise_k) + 1-sum(contri2(col))/sum(contri2);
|
|
|
|
|
|
cvx_begin
|
|
variable x_e(M,N) complex
|
|
norm21 = 0;
|
|
for i = 1:N
|
|
norm21 = norm21 + norm(x_e(:,i));
|
|
end
|
|
minimize(norm21)
|
|
subject to
|
|
norm(FAR_model*x_e(:) - y) <= sqrt(N)*noise(noise_k);
|
|
cvx_end
|
|
re_err = zeros(N,1);
|
|
contri2 = zeros(N,1);
|
|
for i = 1:N
|
|
if ismember(i,col)
|
|
re_err = re_err+FAR_model(:,(i-1)*M+1:i*M)*(x_e(:,i));
|
|
end
|
|
contri2(i) = norm(FAR_model(:,(i-1)*M+1:i*M)*(x_e(:,i)));
|
|
end
|
|
re2(k,noise_k) = re2(k,noise_k) +norm(FAR_model*x(:)-re_err)/norm(FAR_model*x(:));
|
|
con2(k,noise_k) = con2(k,noise_k) + 1-sum(contri2(col))/sum(contri2);
|
|
end
|
|
end
|
|
end
|
|
|
|
save("FAR_noise_0206.mat") |