Pre-ci test passed git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4000 818b1a75-f10b-46b9-bf7c-635c3b92a50f
98 lines
2.6 KiB
Matlab
98 lines
2.6 KiB
Matlab
clear all
|
|
close all
|
|
|
|
M_Tx=4;
|
|
N_Rx=1;
|
|
Nfreq = 20;
|
|
Nsamples = 1000;
|
|
NUsers = 2;
|
|
bits = 8;
|
|
|
|
SNRdB = -20:10:30;
|
|
|
|
HDl = 1/sqrt(2)*complex(randn(N_Rx,M_Tx,Nfreq,Nsamples,NUsers),randn(N_Rx,M_Tx,Nfreq,Nsamples,NUsers));
|
|
%HUl = conj(permute(HDl,[2 1 3 4 5]));
|
|
|
|
%ECap_SU_TDMA_CL_ML_iid=zeros(1,length(SNRdB));
|
|
ECap_MU_MMSE_iid=zeros(1,length(SNRdB));
|
|
ECap_MU_ZF_iid=zeros(1,length(SNRdB));
|
|
%ECap_MU_DPC_iid=zeros(1,length(SNRdB));
|
|
%ECap_MU_BD_WF_iid=zeros(1,length(SNRdB));
|
|
%ECap_MU_CVQ_iid=zeros(1,length(SNRdB));
|
|
|
|
Cap_SU_TDMA_CL_ML_iid = capacity_SU_TDMA_CL_ML(HDl,10.^(SNRdB./10),0);
|
|
ECap_SU_TDMA_CL_ML_iid = mean(Cap_SU_TDMA_CL_ML_iid,1);
|
|
|
|
for s = 1:length(SNRdB)
|
|
|
|
disp(sprintf('SNR = %d (%d of %d)',SNRdB(s),s,length(SNRdB)))
|
|
|
|
% SNRdB=10;
|
|
SNR=10^(SNRdB(s)/10);
|
|
%%% MMSE regularization factor
|
|
mu = M_Tx/SNR;
|
|
%%% noise variance
|
|
n_p=1/SNR;
|
|
|
|
%Cap_MU_CVQ_iid = zeros(Nfreq,Nsamples);
|
|
Cap_MU_MMSE_iid = zeros(Nfreq,Nsamples);
|
|
Cap_MU_ZF_iid = zeros(Nfreq,Nsamples);
|
|
%Cap_MU_DPC_iid = zeros(Nfreq,Nsamples);
|
|
%Cap_MU_BD_WF_iid=zeros(Nfreq,Nsamples);
|
|
|
|
|
|
for k2=1:Nsamples
|
|
for k1=1:Nfreq
|
|
HS = HDl(1,:,k1,k2,:);
|
|
HS = squeeze(HS).';
|
|
[Cap_MU_MMSE_iid(k1,k2),gain] = MISO_MMSE(HS,n_p,mu);
|
|
[Cap_MU_ZF_iid(k1,k2),gain2] = MISO_MMSE(HS,n_p,0);
|
|
%Cap_MU_CVQ_iid(k1,k2) = MISO_CVQ(HS,n_p,0,bits);
|
|
%eff_gain_MMSE(k2) = gain;
|
|
%eff_gain_ZF(k2) = gain2;
|
|
end
|
|
end
|
|
|
|
|
|
% for k2=1:Nsamples
|
|
% for k1=1:Nfreq
|
|
% HS = reshape(HDl(:,:,k1,k2,:),[N_Rx, M_Tx, NUsers]);
|
|
% [Cap_MU_BD_WF_iid(k1,k2),gain] = BD(HS,n_p,1);
|
|
% %eff_gain_BD(:,k2) = gain;
|
|
% end
|
|
% end
|
|
|
|
|
|
% for k2=1:Nsamples
|
|
% for k1=1:Nfreq
|
|
% HS = HUl(:,:,k1,k2,:);
|
|
% HS = reshape(HS,[M_Tx,N_Rx,NUsers]);
|
|
% Cap_MU_DPC_iid(k1,k2) = iterative_waterfill(HS,SNR,50);
|
|
% end
|
|
% end
|
|
|
|
ECap_MU_MMSE_iid(s)=mean(Cap_MU_MMSE_iid(:));
|
|
ECap_MU_ZF_iid(s)=mean(Cap_MU_ZF_iid(:));
|
|
%ECap_MU_DPC_iid(s)=mean(Cap_MU_DPC_iid(:));
|
|
%ECap_MU_BD_WF_iid(s)=mean(Cap_MU_BD_WF_iid(:));
|
|
%ECap_4U_CVQ_iid(s)=mean(Cap_4U_CVQ_iid(:));
|
|
|
|
%%
|
|
figure(1)
|
|
plot(SNRdB(1:s),ECap_SU_TDMA_CL_ML_iid(1:s),'b');
|
|
hold on
|
|
plot(SNRdB(1:s),ECap_MU_MMSE_iid(1:s),'r');
|
|
plot(SNRdB(1:s),ECap_MU_ZF_iid(1:s),'g');
|
|
%plot(SNRdB(1:s),ECap_4U_CVQ_iid(1:s),'k');
|
|
%plot(SNRdB(1:s),ECap_MU_DPC_iid(1:s),'k');
|
|
%plot(SNRdB(1:s),ECap_MU_BD_WF_iid(1:s),'m');
|
|
legend('SU TDMA','MMSE','ZF')
|
|
xlabel('SNR [dB]')
|
|
ylabel('Sum rate')
|
|
drawnow
|
|
|
|
%%
|
|
save(sprintf('cap_iid_NTx%d_NRx%d_NUser%d.mat',M_Tx,N_Rx,NUsers));
|
|
|
|
end
|