clcclear allclose allrandn('state',0);rand('state',0);
N=60; %number of sensors
%% Network deployment and basisL=1;% Unifom random deploymentxmin=0;xmax=L;ymin=0;ymax=L;xn = xmin * ones(N,1) + rand(N,1)* (xmax-xmin);yn = ymin * ones(N,1) + rand(N,1)* (ymax-ymin);
r=4; % ranks=zeros(r,1);s(1:r,1)=1;
%%%% basis U dim Nxrn=1;for k=1:N Uf(k,1)=1;endfor m=2:r for k=1:N Uf(k,m)=cos(2*pi*(n*xn(k)+m*yn(k))/L); endendU=orth(Uf);
%% Communication GraphK=10; % avg degreeprob=0.25;G=WattsStrogatz(N,K/2,prob);
figureplot(G,'NodeColor','k','EdgeAlpha',0.5);
Ad=full(adjacency(G));Ad=Ad+eye(N);zeri=find(vec(Ad)==0);Ad=Ad-eye(N);app=zeros(length(zeri),1);PU=U*U';
%% Weight matrix computationcvx_begincvx_solver mosekcvx_precision lowvariable gamma1;variable W(N,N) symmetricminimize(gamma1)subject toW-PU+gamma1*eye(N)==semidefinite(N);-W+PU+gamma1*eye(N)==semidefinite(N);W*PU==PU;gamma1<=1;W(zeri)==app;cvx_end
%% DISPO
Iter=2000;x=U*ones(r,1);E=sum_square(x);
S=20;set=sort(randsample(N,S));SNR=1/100;sigma2=E/SNR;n=sqrt(sigma2)*randn(N,1);d=zeros(N,1);d(set)=1;
y=x+d.*n; %observation with outliers
Cost=zeros(Iter,1);x_est=zeros(N,1);
mu=0.1;eps=1;
for k=1:Iter x_est=W*x_est+(mu/(k^eps))*sign(y-x_est); Cost(k)=(norm(x_est-x)^2)/(norm(x)^2);end
figureplot(10*log10(Cost),'r','linewidth',3)grid onylabel({'Normalized Mean Squared Error (dB)'},'interpreter','latex','FontSize',14)xlabel({'Iteration index'},'interpreter','latex','FontSize',14)