clear all;
load('LOS_8_8');
%/////////////////////////////////////////////////////////////////////
%CHANNEL UNKNOWN
for y = 0:1:3 % loop for values of Mt, Mr
n=2^y; % no. of Mt, Mr
for x= 1:1:30 % loop for snr values
snr= 10.^(x/10); %antilog snr
Mt=n;
Mr=n;
N=401;
for v=1:N % Normalization
f=squeeze(H(:,:,v));
g(v)= norm(f,'fro').^2;
end
Hnorm = H*(((1/(N*Mt*Mr))*(sum(g))).^-0.5);
for v=1:N % loop for all realizations
hnorm=squeeze(Hnorm(1:n,1:n,v));
C_unknown(v)=log2(det(eye(Mr)+(snr/Mt)*hnorm*hnorm'));
end
%/////////////////////////////////////////////////////////////////////
% CHANNEL KNOWN
for u=1:N %loop for all realizations
Htmp=squeeze(Hnorm(1:n,1:n,u));
lamda= eig(Htmp*Htmp');
lamda=sort(lamda,'ascend');
level= Mt./(snr.*lamda);
level=sort(level,'descend');
lim = Mt;
r = length(level);
if level(end) < level(1)
level = flipud(level);
end
% initialization
p = 1;
mu = lim/(r-p+1)*(1+sum(level(1:r-p+1))/lim);
gamma = (mu-level);
gamma2 = gamma;
% iteration
while find(gamma2 < 0)
p = p+1;
mu = lim/(r-p+1)*(1+sum(level(1:r-p+1))/lim);
gamma = (mu-level);
gamma2 = gamma(1:r-p+1);
end
gamma_out = flipud(max(gamma,0));
C_known(u)=sum(log2(1+gamma_out.*lamda.*snr./Mt));
end
C_known_result(n,x)= mean(abs(C_known)); % storing ergodic capacities with different snr and configurations
C_unknown_result(n,x)= mean(abs(C_unknown));
end
plot((C_known_result(n,:)),'r') %plot of known ergodic capacity
hold on
plot(C_unknown_result(n,:),'c') %plot of unknown ergodic capacity
hold on
end
grid on;
title('Channel Capacity with and without channel state information')
xlabel('Signal to Noise Ration in dB')
ylabel('Ergodic Capacity in bits/sec/Hz')
legend1 = legend({'channel known','channel unknown'},'Position',[0.2651 0.525 0.1607 0.3667]);
%/////////////////////////////////////////////////////////////////////
% (a) MT = MR = 1; (SISO)
clear all
for x= 0:1:25 % loop for snr values
snr= 10.^(x/10); %antilog snr
Mt=1;
Mr=1;
N=10000;
H=1/sqrt(2)*(randn(Mr,Mt,N)+j*randn(Mr,Mt,N));
for v=1:N % loop for all realizations
h=squeeze(H(1:Mr,1:Mt,v));
C_unknown(v)=log2(det(eye(Mr)+(snr/Mt)*h*h'));
end
C_unknown_result_1x1(x+1)= mean(abs(C_unknown));
C_unknown=sort(C_unknown);
C_unknown_10perc_1x1(x+1)= abs(C_unknown(0.1*N));
C_unknown_1perc_1x1(x+1)= abs(C_unknown(0.01*N));
end
% (b) MT = 2;MR = 1; (MISO)
%clear all
for x= 0:1:25 % loop for snr values
snr= 10.^(x/10); %antilog snr
Mt=2;
Mr=1;
N=10000;
H=1/sqrt(2)*(randn(Mr,Mt,N)+j*randn(Mr,Mt,N));
for v=1:N % loop for all realizations
h=squeeze(H(1:Mr,1:Mt,v));
C_unknown(v)=log2(det(eye(Mr)+(snr/Mt)*h*h'));
end
C_unknown_result_2x1(x+1)= mean(abs(C_unknown));
C_unknown=sort(C_unknown);
C_unknown_10perc_2x1(x+1)= abs(C_unknown(0.1*N));
C_unknown_1perc_2x1(x+1)= abs(C_unknown(0.01*N));
end
% (c) MT = 1;MR = 2; (SIMO)
%clear all
for x= 0:1:25 % loop for snr values
snr= 10.^(x/10); %antilog snr
Mt=1;
Mr=2;
N=10000;
H=1/sqrt(2)*(randn(Mr,Mt,N)+j*randn(Mr,Mt,N));
for v=1:N % loop for all realizations
h=squeeze(H(1:Mr,1:Mt,v));
C_unknown(v)=log2(det(eye(Mr)+(snr/Mt)*h*h'));
end
C_unknown_result_1x2(x+1)= mean(abs(C_unknown));
C_unknown=sort(C_unknown);
C_unknown_10perc_1x2(x+1)= abs(C_unknown(0.1*N));
C_unknown_1perc_1x2(x+1)= abs(C_unknown(0.01*N));
end
% (d) MT = MR = 2; (MIMO)
%clear all
for x= 0:1:25 % loop for snr values
snr= 10.^(x/10); %antilog snr
Mt=2;
Mr=2;
N=10000;
H=1/sqrt(2)*(randn(Mr,Mt,N)+j*randn(Mr,Mt,N));
for v=1:N % loop for all realizations
h=squeeze(H(1:Mr,1:Mt,v));
C_unknown(v)=log2(det(eye(Mr)+(snr/Mt)*h*h'));
end
C_unknown_result_2x2(x+1)= mean(abs(C_unknown));
C_unknown=sort(C_unknown);
C_unknown_10perc_2x2(x+1)= abs(C_unknown(0.1*N));
C_unknown_1perc_2x2(x+1)= abs(C_unknown(0.01*N));
end
% (e) MT = MR = 4; (MIMO)
%clear all
for x= 0:1:25 % loop for snr values
snr= 10.^(x/10); %antilog snr
Mt=4;
Mr=4;
N=10000;
H=1/sqrt(2)*(randn(Mr,Mt,N)+j*randn(Mr,Mt,N));
for v=1:N % loop for all realizations
h=squeeze(H(1:Mr,1:Mt,v));
C_unknown(v)=log2(det(eye(Mr)+(snr/Mt)*h*h'));
end
C_unknown_result_4x4(x+1)= mean(abs(C_unknown));
C_unknown=sort(C_unknown);
C_unknown_10perc_4x4(x+1)= abs(C_unknown(0.1*N));
C_unknown_1perc_4x4(x+1)= abs(C_unknown(0.01*N));
end
figure
plot(C_unknown_result_1x1,'--')
hold on
plot(C_unknown_result_2x1,':')
hold on
plot(C_unknown_result_1x2,'o')
hold on
plot(C_unknown_result_2x2,'+')
hold on
plot(C_unknown_result_4x4,'*')
hold on
grid on;
title('Ergodic Capacity for different Values of M')
xlabel('Signal to Noise ratio in dB')
ylabel('Ergodic Capacity in bits/sec/Hz')
legend1 = legend({'Mt=1 Mr=1','Mt=2 Mr=1','Mt=1 Mr=2','Mt=2 Mr=2','Mt=4 Mr=4'});
subplot(1,2,1)
plot(C_unknown_1perc_1x1,'b--')
hold on
plot(C_unknown_1perc_2x1,'r:')
hold on
plot(C_unknown_1perc_1x2,'co')
hold on
plot(C_unknown_1perc_2x2,'k+')
hold on
plot(C_unknown_1perc_4x4,'g*')
hold on
grid on;
title('1% Outage Capacity for different Values of M')
xlabel('Signal to Noise Ratio in dB')
ylabel('1% Outage Capacity in bits/sec/Hz')
legend1 = legend({'Mt=1 Mr=1','Mt=2 Mr=1','Mt=1 Mr=2','Mt=2 Mr=2','Mt=4 Mr=4'});
subplot(1,2,2)
plot(C_unknown_10perc_1x1,'b--')
hold on
plot(C_unknown_10perc_2x1,'r:')
hold on
plot(C_unknown_10perc_1x2,'co')
hold on
plot(C_unknown_10perc_2x2,'k+')
hold on
plot(C_unknown_10perc_4x4,'g*')
hold on
grid on;
title('10% Outage Capacity for different Values of M')
xlabel('SNR (dB)')
ylabel('10% Outage Capacity in bits/sec/Hz')
legend1 = legend({'Mt=1 Mr=1','Mt=2 Mr=1','Mt=1 Mr=2','Mt=2 Mr=2','Mt=4 Mr=4'});
%/////////////////////////////////////////////////////////////////////
% cdf plot
clear all
snr= 10.^(15/10); %antilog snr 20dB
Mt=2;
Mr=2;
N=10000;
H=1/sqrt(2)*(randn(Mr,Mt,N)+j*randn(Mr,Mt,N));
for v=1:N % loop for all realizations
h=squeeze(H(1:Mr,1:Mt,v));
C_unknown(v)=log2(det(eye(Mr)+(snr/Mt)*h*h'));
end
figure
cdfplot(abs(C_unknown))
%/////////////////////////////////////////////////////////////////////
% Capacity per channel
clear all
snr= 10.^(10/10); %antilog snr 10dB
for u=0:1:2
z=2^u;
Mt=z;
Mr=z;
N=10000;
H=1/sqrt(2)*(randn(Mr,Mt,N)+j*randn(Mr,Mt,N));
for v=1:N % loop for all realizations
h=squeeze(H(1:Mr,1:Mt,v));
C_unknown(v)=log2(det(eye(Mr)+(snr/Mt)*h*h'));
end
C_unknown_result(u+1)= mean(abs(C_unknown));
C_unknown=sort(C_unknown);
C_unknown_10per(u+1)= abs(C_unknown(0.1*N));
end
figure
plot(C_unknown_result,'c')
hold on
plot(C_unknown_10per)
grid on;
title('Capacity per channel')
xlabel('Number of Antennas')
ylabel('Capacity(bits/sec/Hzs)')
legend1 = legend({'Ergodic Capacity','10%Outage Capacity'},'Position',[0.2651 0.525 0.1607 0.3667]);