📄 all_detector.m
字号:
close all
clear all;
clc;
K = 20; %No. of users
A = eye(K);
snr = -20:2:20;
N = 200; %No. of bits
Navg = 10; %No. of repititions
SPIC = 10; %No. PIC stages
SSIC = 10; %No. SIC stages
%Noise variance in different SNR
Sv = (10.^(-snr/10));
%Get signature sequences
load GS31;
S = GS31(1:K,:);
S = S';
Lc = length(S(:,1));
%Normalize energy of signature waveforms
a = S./sqrt(Lc);
% Calculate correlation matrix
for i=1:K
for j=1:K
R(i,j)=sum(a(:,i).*a(:,j));
end
end
for t = 1:Navg
for j = 1:length(snr)
b=2*(randint(K,N)-0.5);
novector(1:K)=Sv(j);
sigma2Aminus2=diag(novector);
noise =(Sv(j))^.5*randn(K,N);
noiseSIC =(Sv(j))^.5*randn(Lc,N);
ys =(R*(A*b + noise));
ysdec = (inv(R)*(R*(A*b + noise)));
ysMMSE =(inv(R+sigma2Aminus2)*(R*(A*b + noise)));
ysPIC = ys;
ysSIC =(a*A*b + noiseSIC);
yMF = sign(ys);
ydec = sign(ysdec);
yMMSE = sign(ysMMSE);
%-------------------PIC--------------------------------------
for pic = 1:SPIC
for n = 1:N
for k = 1:K
YY(:,k) = ysPIC(:,n).*R(:,k);
end
I(:,n) = sum(YY,1)'-diag(YY);
yPIC(:,n) = sign(ysPIC(:,n) - I(:,n));
end
end
%--------------------end PIC-----------------------------------
%---------------------SIC-------------------------------------
for n = 1:N
yinit = zeros(K,1);
e = ysSIC(:,n);
for sic = 1:SSIC
for k = 1:K
y = a(:,k)'*e + yinit(k);
e = (e - a(:,k)*a(:,k)'*e);
ynext(k) = y;
end
yinit = ynext';
end
ySIC(:,n) = yinit;
end
ySIC = sign(ySIC);
%-------------------end SIC-----------------------------------
for k = 1:K
er{k}(j)=(length(find(yMF(k,:)~=b(k,:))))/N;
erdec{k}(j)=(length(find(ydec(k,:)~=b(k,:))))/N;
erMMSE{k}(j)=(length(find(yMMSE(k,:)~=b(k,:))))/N;
erPIC{k}(j)=(length(find(yPIC(k,:)~=b(k,:))))/N;
erSIC{k}(j)=(length(find(ySIC(k,:)~=b(k,:))))/N;
end
end
for k = 1:K
eer{t}(k,:) = (er{k});
eerdec{t}(k,:) = (erdec{k});
eerMMSE{t}(k,:) = (erMMSE{k});
eerPIC{t}(k,:) = (erPIC{k});
eerSIC{t}(k,:) = (erSIC{k});
end
BER(t,:) = mean(eer{t});
BERdec(t,:) = mean(eerdec{t});
BERMMSE(t,:) = mean(eerMMSE{t});
BERPIC(t,:) = mean(eerPIC{t});
BERSIC(t,:) = mean(eerSIC{t});
end
mer = mean(BER);
merdec = mean(BERdec);
merMMSE = mean(BERMMSE);
merPIC = mean(BERPIC);
merSIC = mean(BERSIC);
semilogy(snr,mer,'rs-',snr,merdec,'bo-',snr,merMMSE,'gv-',snr,merPIC,'m<-',snr,merSIC,'md-')
grid on
xlabel('SNR')
ylabel('Average BER')
legend('MF','Decorr','MMSE','PIC','SIC')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -