Files
openairinterface5g/openair1/EMOS/MATLAB/cap_iid.m
T
2013-06-25 09:05:02 +00:00

85 lines
3.8 KiB
Matlab
Executable File

n2=1;
%% generate iid channel matrices
HH1=randn(1,4,n2,10000)/sqrt(2)+j*randn(1,4,n2,10000)/sqrt(2);
HH2=randn(2,4,n2,10000)/sqrt(2)+j*randn(2,4,n2,10000)/sqrt(2);
%HH2=randn(2,2,n2,10000)/sqrt(2)+j*randn(2,2,n2,10000)/sqrt(2);
HH4=randn(4,4,n2,10000)/sqrt(2)+j*randn(4,4,n2,10000)/sqrt(2);
HMU=randn(4,4,1,10000,4)/sqrt(2)+j*randn(4,4,1,10000,4)/sqrt(2);
M_Tx=4;
M_Rx=2;
SNR=10;
% fk: We do not need this normalization, since E(|h_{i,j}|^2) = 1!
% PP=squeeze(mean(mean(mean(abs(HH).^2,1),2),3));
% PP_mean=PP;
% PP=squeeze(mean(mean(mean(abs(HH2).^2,1),2),3));
% PP2_mean=PP;
% PP=squeeze(mean(mean(mean(abs(HH1).^2,1),2),3));
% PP1_mean=PP;
%% calcualte capacity
%Cap4x2_iid=zeros(size(HH,3),size(HH,4));
Cap1x4_iid=zeros(size(HH1,3),size(HH1,4));
Cap2x4_iid=zeros(size(HH1,3),size(HH1,4));
Cap4x4_iid=zeros(size(HH1,3),size(HH1,4));
for k1=1:size(HH1,3)
for k2=1:size(HH1,4)
%Cap4x2_iid(k1,k2)=abs(log2(det(diag(ones(2,1))+SNR/4*HH(:,:,k1,k2)*HH(:,:,k1,k2)')));
Cap1x4_iid(k1,k2)=abs(log2(det(diag(ones(1))+SNR/4*HH1(:,:,k1,k2)*HH1(:,:,k1,k2)')));
Cap2x4_iid(k1,k2)=abs(log2(det(diag(ones(2,1))+SNR/4*HH2(:,:,k1,k2)*HH2(:,:,k1,k2)')));
Cap4x4_iid(k1,k2)=abs(log2(det(diag(ones(4,1))+SNR/4*HH4(:,:,k1,k2)*HH4(:,:,k1,k2)')));
end
end
CAP_SU1x1_TDMA_ML_iid = capacity_SU_TDMA_ML(HMU(1,1,:,:,:),SNR,0);
CAP_SU2x1_TDMA_ML_iid = capacity_SU_TDMA_ML(HMU(1:2,1,:,:,:),SNR,0);
CAP_SU2x2_TDMA_ML_iid = capacity_SU_TDMA_ML(HMU(1:2,1:2,:,:,:),SNR,0);
CAP_SU_TDMA_ML_iid = capacity_SU_TDMA_ML(HMU(1:2,:,:,:,:),SNR,0);
CAP_SU_TDMA_DSTTD_iid = capacity_SU_TDMA_DSTTD(HMU(1:2,:,:,:,:),SNR,0);
CAP_SU2x2_TDMA_DSTTD_iid = capacity_SU_TDMA_DSTTD(HMU(1,1:2,:,:,:),SNR,0);
CAP_SU1x4_TDMA_CL_ML_iid = capacity_SU_TDMA_CL_ML(HMU(1,:,:,:,:),SNR,0);
CAP_SU2x4_TDMA_CL_ML_iid = capacity_SU_TDMA_CL_ML(HMU(1:2,:,:,:,:),SNR,0);
CAP_SU4x4_TDMA_CL_ML_iid = capacity_SU_TDMA_CL_ML(HMU(1:4,:,:,:,:),SNR,0);
%% plot results
%[Cap4x2_iid_f,Cap4x2_iid_x] = ecdf(Cap4x2_iid(:));
[Cap1x4_iid_f,Cap1x4_iid_x] = ecdf(Cap1x4_iid(:));
[Cap2x4_iid_f,Cap2x4_iid_x] = ecdf(Cap2x4_iid(:));
[Cap4x4_iid_f,Cap4x4_iid_x] = ecdf(Cap4x4_iid(:));
[Cap_SU_TDMA_ML_iid_f,Cap_SU_TDMA_ML_iid_x] = ecdf(CAP_SU_TDMA_ML_iid(:));
[Cap_SU1x1_TDMA_ML_iid_f,Cap_SU1x1_TDMA_ML_iid_x] = ecdf(CAP_SU1x1_TDMA_ML_iid(:));
[Cap_SU2x1_TDMA_ML_iid_f,Cap_SU2x1_TDMA_ML_iid_x] = ecdf(CAP_SU2x1_TDMA_ML_iid(:));
[Cap_SU2x2_TDMA_ML_iid_f,Cap_SU2x2_TDMA_ML_iid_x] = ecdf(CAP_SU2x2_TDMA_ML_iid(:));
[Cap_SU_TDMA_DSTTD_iid_f,Cap_SU_TDMA_DSTTD_iid_x] = ecdf(CAP_SU_TDMA_DSTTD_iid(:));
[Cap_SU2x2_TDMA_DSTTD_iid_f,Cap_SU2x2_TDMA_DSTTD_iid_x] = ecdf(CAP_SU2x2_TDMA_DSTTD_iid(:));
[Cap_SU1x4_TDMA_CL_ML_iid_f,Cap_SU1x4_TDMA_CL_ML_iid_x] = ecdf(CAP_SU1x4_TDMA_CL_ML_iid(:));
[Cap_SU2x4_TDMA_CL_ML_iid_f,Cap_SU2x4_TDMA_CL_ML_iid_x] = ecdf(CAP_SU2x4_TDMA_CL_ML_iid(:));
[Cap_SU4x4_TDMA_CL_ML_iid_f,Cap_SU4x4_TDMA_CL_ML_iid_x] = ecdf(CAP_SU4x4_TDMA_CL_ML_iid(:));
%%
figure(78)
hold off
%plot(Cap1x1_iid_x,Cap1x1_iid_f,'g')
plot(Cap1x4_iid_x,Cap1x4_iid_f)
hold on
plot(Cap2x4_iid_x,Cap2x4_iid_f,'r')
plot(Cap4x4_iid_x,Cap4x4_iid_f,'k')
plot(Cap_SU2x2_TDMA_ML_iid_x,Cap_SU2x2_TDMA_ML_iid_f,'c')
plot(Cap_SU_TDMA_DSTTD_iid_x,Cap_SU_TDMA_DSTTD_iid_f,'m')
%plot(Cap_SU2x2_TDMA_DSTTD_iid_x,Cap_SU2x2_TDMA_DSTTD_iid_f,'k')
%plot(Cap_SU1x4_TDMA_CL_ML_iid_x,Cap_SU1x4_TDMA_CL_ML_iid_f,'b--')
%plot(Cap_SU2x4_TDMA_CL_ML_iid_x,Cap_SU2x4_TDMA_CL_ML_iid_f,'r--')
%plot(Cap_SU4x4_TDMA_CL_ML_iid_x,Cap_SU4x4_TDMA_CL_ML_iid_f,'k--')
xlabel('bits/sec/Hz')
ylabel('CDF')
title('Capacity')
legend('SU 4x1 iid','SU 4x2 iid','SU 4x4 iid','SU TDMA 2x2 iid ML','SU DSTTD TDMA 4x2 iid'); %,'SU CL TDMA 4x1 iid','SU CL TDMA 4x2 iid','SU CL TDMA 4x4 iid')
grid on
%% store results
% save('cap_iid.mat','-V7','Cap*x','Cap*f');