Pre-ci test passed git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4000 818b1a75-f10b-46b9-bf7c-635c3b92a50f
348 lines
14 KiB
Matlab
348 lines
14 KiB
Matlab
%***************************************************************************************
|
|
% Calibration of Adjustment Factors for Exponential Effective SINR Mapping Methdology
|
|
% For 3GPP Long Term Evolution (LTE)
|
|
% Eurecom Institute
|
|
% (c) Imran Latif, Communications Mobile, 2012
|
|
%***************************************************************************************
|
|
%close all
|
|
%clear all
|
|
|
|
%***************************************************************************************
|
|
% Some basic initializations
|
|
%***************************************************************************************
|
|
global SINR_p BLER_meas abs_mode modu Pm tx_mode alpha seta
|
|
warning on
|
|
set(0, 'DefaultLineMarkerSize', 10);
|
|
set(0, 'Defaultaxesfontsize', 10);
|
|
set(0, 'DefaultLineLineWidth', 2);
|
|
set(0, 'DefaultAxesFontName', 'Helvetica');
|
|
set(0, 'DefaultTextFontName', 'Helvetica');
|
|
|
|
plot_style = {'b*';'r*';'g*';'y*';'k*';...
|
|
'bo';'ro';'go';'yo';'ko';...
|
|
'bs';'rs';'gs';'ys';'ks';...
|
|
'bd';'rd';'gd';'yd';'kd';...
|
|
'bx';'rx';'gx';'yx';'kx';...
|
|
'b+';'r+';'g+';'y+';'k+'};
|
|
|
|
echo off;
|
|
pathname = '/homes/latif/devel/trunk/openair1/SIMULATION/LTE_PHY/TM5_ideal_CE/MIESM/M1/Polyfit';
|
|
%root_path = '/homes/latif/OpenAirPlatform/test_devel/openair1_multi_eNb_UE/SIMULATION/LTE_PHY/BLER_SIMULATIONS/awgn_bler_new/';
|
|
%%
|
|
%***************************************************************************************
|
|
% Input Parameters used for the training of adjustment Factors (betas)
|
|
%***************************************************************************************
|
|
mcs = [0 2 4 6 7 8 9];
|
|
% An array which hold the number of LTE MCS which is to be calibrated for
|
|
% abstraction
|
|
|
|
s2=[];
|
|
s3=[];
|
|
% String arrays used for printing in plots
|
|
|
|
tx_mode=5;
|
|
%1--> SISO, 2 --> Alamouti, 5 --> MU-MIMO ,6 --> TX Beamforming
|
|
% tells which transmission mode is to be abstracted.
|
|
|
|
abs_mode=2; % 0:MIESM (M2-MIESM), 1:EESM, 2:IA-MIESM (M1-MIESM)
|
|
%tells which abstraction methodology is to be used.
|
|
|
|
Pm=100; %2*50 QPSK
|
|
% Used for calculating RBIR
|
|
|
|
modu=4;
|
|
% Modulation used.
|
|
|
|
p=50;
|
|
save_out=1;
|
|
|
|
|
|
if(save_out)
|
|
fid = fopen('IA_polyfit_M1_MIESM.tex','w');
|
|
fprintf(fid,'\\documentclass[english,12pt,a4paper]{article}\n\n');
|
|
fprintf(fid,'\\usepackage{times}\n');
|
|
fprintf(fid,'\\usepackage{babel}\n');
|
|
fprintf(fid,'\\usepackage{graphicx}\n');
|
|
fprintf(fid,'\\usepackage{hyperref}\n\n');
|
|
fprintf(fid,'\\begin{document}\n\n');
|
|
fprintf(fid,'\\title{%s}\n\n','MU-MIMO with IA: Results of Abstraction using Polynomial fitting for M1-MIESM');
|
|
fprintf(fid,'\\maketitle\n\n');
|
|
fprintf(fid,'\\newpage\n\n');
|
|
fprintf(fid,'\\listoffigures\n\n');
|
|
fprintf(fid,'\\listoftables\n\n');
|
|
fprintf(fid,'\\newpage\n\n');
|
|
end
|
|
|
|
disp('*******************************************************************\n')
|
|
%printf('TX Mode = %d, Abstraction Mode = %d\n',tx_mode,abs_mode);
|
|
disp('*******************************************************************\n')
|
|
%***************************************************************************************
|
|
% Main Execution Loop starts from here:
|
|
%***************************************************************************************
|
|
for m=1:1:length(mcs)
|
|
|
|
ss = strcat('LTE TM5 M1 MIESM MCS ', num2str(mcs(m)));
|
|
|
|
if(mcs(m) >9 && mcs(m) < 17)
|
|
modu=16;
|
|
Pm=200; %4*50 16QAM
|
|
else if(mcs(m) > 16 && mcs(m) < 28)
|
|
modu = 64;
|
|
Pm=300; %6 *50 64QAM
|
|
end
|
|
end
|
|
%%
|
|
% %***************************************************************************************
|
|
% %Reference AWGN Curves
|
|
% %***************************************************************************************
|
|
% data = dlmread(sprintf('/homes/latif/devel/trunk/openair1/SIMULATION/LTE_PHY/awgn_bler_tx1_mcs%d.csv',mcs(m)),';',1,0);
|
|
% snr = data(:,1);
|
|
% ble = data(:,5)./data(:,6); % round 1
|
|
%
|
|
% blerr = ble(ble<0.99);
|
|
% bler = blerr(blerr>0.001);
|
|
%
|
|
% snr = snr(ble<0.99);
|
|
% snr = snr(blerr>0.001);
|
|
%
|
|
% % snr_interp = snr(1):0.001:snr(end);
|
|
% % bler_interp = interp1(snr,bler,snr_interp,'linear');
|
|
% % snr = snr_interp;
|
|
% % bler = bler_interp;
|
|
%
|
|
% %***************************************************************************************
|
|
% % Data Extraction on Sub carrier basis data file saved using dlsim and reference
|
|
% % SINR Calculation based on Reference AWGN Curve
|
|
% %***************************************************************************************
|
|
eval(['data_all = data_all' num2str(mcs(m)) ';']);
|
|
BLER_meas = data_all(:,end);
|
|
%
|
|
% SINR_awgn = interp1(bler, snr, BLER_meas,'linear','extrap');
|
|
% SINR_awgn = SINR_awgn';
|
|
%%
|
|
%***************************************************************************************
|
|
% Calculation of SINR per subcarrier
|
|
%***************************************************************************************
|
|
%for SISO
|
|
switch(tx_mode)
|
|
case 1
|
|
ch_tmp = data_all(:,2:51);
|
|
abs_channel = (abs(ch_tmp).^2);
|
|
input_snr = 10.^(data_all(:,1)/10);
|
|
input_snr = repmat(input_snr,1,50);
|
|
SINR_p = 10*log10(input_snr.*abs_channel);
|
|
|
|
case 2
|
|
ch1_tmp = data_all(:,2:2:100);
|
|
ch2_tmp = data_all(:,3:2:101);
|
|
abs_channel1 = (abs(ch1_tmp).^2)/2;
|
|
abs_channel2 = (abs(ch2_tmp).^2)/2;
|
|
input_snr = 10.^(data_all(:,1)/10);
|
|
input_snr = repmat(input_snr,1,50);
|
|
SINR_p = 10*log10(input_snr.*abs_channel1 + input_snr.*abs_channel2);%- 10*log10(2);
|
|
|
|
case 5
|
|
prec1_tmp = data_all(:,203:end-1);
|
|
prec2_tmp = arrayfun(@opposite_q,prec1_tmp);
|
|
q1 = arrayfun(@demap_q,prec1_tmp);
|
|
%q2 = q1;
|
|
q2 = arrayfun(@demap_q,prec2_tmp);
|
|
ch1_tmp = data_all(:,2:2:100);
|
|
ch2_tmp = data_all(:,3:2:101);
|
|
snr_tmp = 10.^(data_all(:,1)/10);
|
|
snr_tmp = repmat(snr_tmp,1,50);
|
|
|
|
alpha =(1/2)*abs(ch1_tmp + q1.*ch2_tmp);
|
|
seta = (1/2)*((abs(ch1_tmp + q2.*ch2_tmp)));
|
|
|
|
if (abs_mode==2 )
|
|
SINR_p = 10*log10(snr_tmp.*(alpha.^2));%-10*log10(2);
|
|
else
|
|
SINR_p = 10*log10((snr_tmp.*(alpha.^2)) ./ ((snr_tmp.*(seta.^2)) + 1));
|
|
end
|
|
|
|
case 6
|
|
prec_tmp = data_all(:,203:end-1);
|
|
q = arrayfun(@demap_q,prec_tmp);
|
|
ch1_tmp = data_all(:,2:2:100);
|
|
ch2_tmp = data_all(:,3:2:101);
|
|
snr_tmp = 10.^(data_all(:,1)/10);
|
|
snr_tmp = repmat(snr_tmp,1,50);
|
|
ch_composite = (abs(ch1_tmp + q.*ch2_tmp))/sqrt(2);
|
|
SINR_p = 10*log10((snr_tmp.*((ch_composite).^2)));
|
|
|
|
end
|
|
|
|
%***************************************************************************************
|
|
% for coarse beta calculation:
|
|
%***************************************************************************************
|
|
% beta_vec = 1:0.1:30;
|
|
% delta = zeros(size(beta_vec));
|
|
% for beta=1:length(beta_vec)
|
|
% delta(beta)=delta_BLER_1((beta_vec(beta)));
|
|
% end
|
|
% [val ind] = min(delta);
|
|
% opt_beta_new(mcs(m)) = beta_vec(ind);
|
|
%***************************************************************************************
|
|
% for optmimized betas calculation using fminsearch
|
|
%***************************************************************************************
|
|
%beta_out=[1.0151 1.0565];
|
|
beta_out=zeros(1,2);
|
|
%[opt_beta(mcs(m)), MSE] = fminsearch(@delta_BLER_1,opt_beta_new(mcs(m)))
|
|
[beta_out, std_deviat] = fminsearch(@polyfit_delta_BLER,[1 1])
|
|
|
|
%***************************************************************************************
|
|
% Calculation of Effective SINR based on optimized beta values
|
|
%***************************************************************************************
|
|
|
|
if(abs_mode==0) %MIESM Mapping
|
|
|
|
eval(['load ' '/homes/latif/devel/trunk/openair1/SIMULATION/LTE_PHY/Abstraction/siso_MI_abs_' num2str(modu) 'Qam.mat'])
|
|
|
|
[xize y]= size(SINR_p);
|
|
RBIR = [];
|
|
for t=1:1:xize
|
|
s = SINR_p(t,:);
|
|
s(s<-10)=-10;
|
|
s(s>49)=49;
|
|
eval(['SI_p = interp1(newSNR,newC_siso_' num2str(modu) 'QAM,s, ''linear'' , ''extrap'');']);
|
|
RBIR(t) = (sum(SI_p/beta_out(1))/Pm);
|
|
%RBIR(t) = (sum(SI_p)/Pm);
|
|
end
|
|
SINR_eff = interp1(newRBIR, newSNR, RBIR,'linear');
|
|
SINR_eff = SINR_eff .* beta_out(2);
|
|
|
|
|
|
elseif(abs_mode==2)
|
|
|
|
eval(['load ' '/homes/latif/devel/trunk/openair1/SIMULATION/LTE_PHY/Abstraction/siso_MI_abs_' num2str(modu) 'Qam.mat'])
|
|
|
|
|
|
if(tx_mode~=5)
|
|
error('IA-MIESM only for LTE TM5!!!')
|
|
end
|
|
|
|
if(modu==4)
|
|
eval(['load ' '/homes/latif/devel/trunk/openair1/EMOS/LTE/POST_PROCESSING/Mode_5/mat_Files/data_mode5_4_' num2str(modu) '_morerealizations.mat'])
|
|
else
|
|
if(modu==16)
|
|
eval(['load ' '/homes/latif/devel/trunk/openair1/EMOS/LTE/POST_PROCESSING/Mode_5/mat_Files/data_mode5_16_16.mat'])
|
|
end
|
|
end
|
|
|
|
[xize y]= size(SINR_p);
|
|
RBIR = [];
|
|
for t=1:1:xize
|
|
s = SINR_p(t,:);
|
|
s(s<-10)=-10;
|
|
s(s>49)=49;
|
|
|
|
a = round(alpha(t,:)*100);
|
|
a(a==0) = 1;
|
|
a(a>200)=200;
|
|
b = round(seta(t,:)*100);
|
|
b(b==0) = 1;
|
|
b(b>200)=200;
|
|
|
|
for u=1:length(a)
|
|
if(modu==16)
|
|
SI_p(u) = data_mode5_16_16(b(u) ,a(u), round(s(u) + 11));
|
|
else
|
|
SI_p(u) = data_mode5_4_4(b(u) ,a(u), round(s(u) + 11));
|
|
end
|
|
end
|
|
RBIR(t) = (sum(SI_p/beta_out(1))/Pm);
|
|
end
|
|
|
|
SINR_eff = interp1(newRBIR, newSNR, RBIR,'linear');
|
|
SINR_eff = SINR_eff .* beta_out(2);
|
|
%SINR_eff = 10*log10((10.^(SINR_eff/10)) .* beta_out(2));
|
|
|
|
else %% EESM Mapping
|
|
|
|
SINR_eff= 10*log10(-1*beta_out(2)*log((1/p)*sum(exp((-10.^(SINR_p'./10))./beta_out(1)))));
|
|
end
|
|
|
|
%***************************************************************************************
|
|
% PolyNomial Calculation
|
|
%***************************************************************************************
|
|
|
|
[po s mu] = polyfit(SINR_eff,((BLER_meas))',3);
|
|
[f] = polyval(po,SINR_eff,s,mu);
|
|
|
|
%***************************************************************************************
|
|
%MSE Calculation
|
|
%***************************************************************************************
|
|
% MSE_final(mcs(m)+1) = mean((SINR_awgn - SINR_eff).^2);
|
|
Optimum_beta1(mcs(m)+1) = beta_out(1);
|
|
Optimum_beta2(mcs(m)+1) = beta_out(2);
|
|
%***************************************************************************************
|
|
% BLER Plot w.r.t Mean Effective SINR
|
|
%***************************************************************************************
|
|
% figure;
|
|
% avg_SINR_p = mean(SINR_p');
|
|
% hist(avg_SINR_p)
|
|
% s = strcat('Average_SINR_p, MCS = ',num2str(mcs(m)));
|
|
% title(2)
|
|
% figure;
|
|
% grid on
|
|
% semilogy(avg_SINR_p,BLER_meas,plot_style{m+1})
|
|
% xlim([-8 15])
|
|
% ylim([1e-3 1])
|
|
% s = strcat('LTE TM1 Avergae Abstraction MCS ', num2str(mcs(m)));
|
|
% title(s);
|
|
% ylabel 'BLER'
|
|
% xlabel 'SINR_{average}'
|
|
% s2 = strcat('BLER_{meas} MCS ', num2str(mcs(m)));
|
|
% legend(s2, 'Location', 'Best');
|
|
|
|
%***************************************************************************************
|
|
% BLER Plot w.r.t Effective SINR
|
|
%***************************************************************************************
|
|
% figure;
|
|
% hist(SINR_eff)
|
|
% s = strcat('SINR_eff, MCS = ',num2str(mcs(m)));
|
|
% title(s)
|
|
h_fig = figure;
|
|
semilogy(SINR_eff,BLER_meas,plot_style{m+1})
|
|
hold on
|
|
grid on
|
|
semilogy(SINR_eff,f,'mx');
|
|
xlim([-20 20])
|
|
ylim([1e-3 1])
|
|
s = strcat(ss, ',beta1= ', num2str(Optimum_beta1(mcs(m)+1)),', beta2= ',num2str(Optimum_beta2(mcs(m)+1)));
|
|
title(s);
|
|
ylabel 'BLER'
|
|
xlabel 'SINR_{effective}'
|
|
s2 = strcat('BLER_{meas} MCS ', num2str(mcs(m)));
|
|
s3 = strcat('BLER_{AWGN} MCS ', num2str(mcs(m)));
|
|
legend(s2,s3, 'Location', 'Best');
|
|
|
|
if(save_out==1)
|
|
saveas(h_fig,fullfile(pathname,strcat('IA_RX_M1-MIESM_TX5_mcs',num2str(mcs(m)) ,'.eps')),'epsc2');
|
|
saveas(h_fig,fullfile(pathname,strcat('IA_RX_M1-MIESM_TX5_mcs',num2str(mcs(m)) ,'.fig')),'fig');
|
|
saveas(h_fig,fullfile(pathname,strcat('IA_RX_M1-MIESM_TX5_mcs',num2str(mcs(m)) ,'.jpg')),'jpg');
|
|
|
|
fprintf(fid,'\\begin{figure}[!h]\n');
|
|
fprintf(fid,'\\centering\n');
|
|
fprintf(fid,'\\includegraphics[scale=0.5]{%s}\n',fullfile(pathname,strcat('IA_RX_M1_MIESM_TX5_mcs', num2str(mcs(m)),'.eps')));
|
|
fprintf(fid,'\\caption{%s}\n',s);
|
|
fprintf(fid,'\\label{fig:mcs%d}\n',mcs(m));
|
|
fprintf(fid,'\\end{figure}\n\n');
|
|
end
|
|
end
|
|
if(save_out)
|
|
fprintf(fid,'\\end{document}\n');
|
|
fclose(fid);
|
|
end
|
|
|
|
%***************************************************************************************
|
|
%For saving the files
|
|
%***************************************************************************************
|
|
% if(save_out)
|
|
% save(strcat('opt_beta_mcs',num2str(mcs(m)),'.dat'),'Optimum_beta*')
|
|
% save(strcat('MSE_mcs',num2str(mcs(m)),'.dat'),'MSE_final')
|
|
% end
|
|
|
|
|