%**************************************************************************
% Learning curve of the LBER algorithm averaged over 40 iterations.
% SNR=10 dB, SIRi=-6 dB for i=2,3,4,5
%**************************************************************************
clear
close all
clc
antenna=2; % number of arrays
source=5; % number of sources
theta=[15 -30 60 -70 80]; % theata is the angle of sources in digree
iteration=40;
M=500; % M is number of transmitted bits
sigman=1/2^0.5; % 2sigman^2 is variance of noise
MMSE_error=zeros(1,M);
BER_error1=zeros(1,M);
BER_error2=zeros(1,M);
BER_error3=zeros(1,M);
error_MMSE=zeros(1,M);
error_BER1=zeros(1,M);
error_BER2=zeros(1,M);
error_BER3=zeros(1,M);
for l=1:antenna
for k=1:source
% s(:,k) is steering vector for source k
s(l,k)=exp(i*(l-1)*pi*sin(theta(k)*pi/180));
end
end
% A(i,i)^2 denotes th esignal power of source i
SNR=10;
A=10^((SNR+6)/20)*eye(source);
A(1,1)=10^(SNR/20);
P=s*A; % P=[A1s1 A2s2 ... Amsm]
for l=1:iteration
% each column of b is transmitted bit vector
a=2*rand(5,M)-1;
b=a./abs(a);
% n is the comlex-valued white Gaussian noise
n1=normrnd(0,sigman,[antenna,M]);
n2=normrnd(0,sigman,[antenna,M]);
n=n1+i*n2;
W_MMSE=(P*P'+2*sigman^2*eye(antenna))^(-1)*P(:,1);
for m=2:M
y_MMSE(m,1)=W_MMSE'*(P*b(:,m)+n(:,m));
bp=real(y_MMSE(m,1))/abs(real(y_MMSE(m,1)));
if( bp ~= b(1,m) )
error_MMSE(m)=(error_MMSE(m-1)*(m-1)+1)/m;
end
end
MMSE_error=MMSE_error+error_MMSE;
w1=zeros(antenna,M);
w2=zeros(antenna,M);
w3=zeros(antenna,M);
Mu1=0.01;
Mu2=0.05;
Mu3=0.1;
error=0;
for m=2:M-1
x=P*b(:,m)+n(:,m);
y=w1(:,m)'*x;
w1(:,m+1)=w1(:,m)+Mu1*sign(b(1,m))/(2*(2*pi)^0.5*sigman)*...
exp(-(real(y))^2/(2*sigman^2))*x;
y=w2(:,m)'*x;
w2(:,m+1)=w2(:,m)+Mu2*sign(b(1,m))/(2*(2*pi)^0.5*sigman)*...
exp(-(real(y))^2/(2*sigman^2))*x;
y=w3(:,m)'*x;
w3(:,m+1)=w3(:,m)+Mu3*sign(b(1,m))/(2*(2*pi)^0.5*sigman)*...
exp(-(real(y))^2/(2*sigman^2))*x;
y_BER1(m,1)=w1(:,m+1)'*(P*b(:,m)+n(:,m));
y_BER2(m,1)=w2(:,m+1)'*(P*b(:,m)+n(:,m));
y_BER3(m,1)=w3(:,m+1)'*(P*b(:,m)+n(:,m));
bp1=real(y_BER1(m,1))/abs(real(y_BER1(m,1)));
bp2=real(y_BER2(m,1))/abs(real(y_BER2(m,1)));
bp3=real(y_BER3(m,1))/abs(real(y_BER3(m,1)));
if( bp1 ~= b(1,m) )
error_BER1(m)=(error_BER1(m-1)*(m-1)+1)/m;
end
if( bp2 ~= b(1,m) )
error_BER2(m)=(error_BER2(m-1)*(m-1)+1)/m;
end
if( bp3 ~= b(1,m) )
error_BER3(m)=(error_BER3(m-1)*(m-1)+1)/m;
end
end
BER_error1=BER_error1+error_BER1;
BER_error2=BER_error2+error_BER2;
BER_error3=BER_error3+error_BER3;
end
figure
hold on
title('Learning curve')
xlabel('sample')
ylabel('Bit Error Rate')
m=1:M;
plot(m,BER_error1./iteration,'g');
plot(m,BER_error2./iteration,'b');
plot(m,BER_error3./iteration,'y');
legend('u=0.01','u=0.05','u=0.1');