├── WSR-WMMSE-MIMO-BC ├── 0dB.fig ├── 0dB.jpg ├── 10dB.fig ├── 10dB.jpg ├── 20dB.fig ├── 20dB.jpg ├── -10dB.fig ├── -10dB.jpg ├── Thumbs.db ├── figures │ ├── 0dB.fig │ ├── 0dB.jpg │ ├── -10dB.fig │ ├── -10dB.jpg │ ├── 10dB.fig │ ├── 10dB.jpg │ ├── 20dB.fig │ └── 20dB.jpg ├── comparision │ ├── Thumbs.db │ ├── DPC_MULP_0dB.fig │ ├── Comparision 10dB 2pi_9.jpg │ ├── Comparision 20dB 4pi_9.jpg │ ├── compare with Lina's code.jpg │ ├── MULP_rateRegion.m │ └── test_WSR_WMMSE.m ├── EURASIP JWCN │ ├── DPC_MULP_0dB.fig │ ├── DPC_MULP_10dB.fig │ ├── DPC_MULP_20dB.fig │ ├── DPC_MULP_-10dB.fig │ ├── MULP_rateRegion.m │ ├── DPC_rateRegion.m │ └── main_Lina.m ├── rnd channel fig │ ├── AO RND 0dB.fig │ ├── AO RND -10dB.fig │ ├── AO RND 10dB..fig │ ├── AO RND 20dB.fig │ ├── AO_RND_-10dB.eps │ ├── AO_RND_10dB.eps │ └── AO_RND_0dB.eps ├── WSR_WMMSE_Mar2.m ├── main.m └── user angle │ ├── AO_1div9_10dB.eps │ └── AO_1div9_0dB.eps ├── feasiblity ├── Feasibility_Jun1.mat ├── Feasibilities_30dB.mat ├── Feasibilities_RS_test.mat ├── Feasibilities_28May2240.mat ├── Feasibilities_29May0700.mat ├── Feasibility_Jun15_Weights.mat ├── Feasibility_Jun1_weights.mat ├── Partial_CSIT_30May_PiDiv9.fig ├── Feasibility_Jun1_3WeightPairs.mat ├── Rate Region RS with partial CSIT.fig ├── Feasibility_Jun1_EqualWeights_3SNRdB.mat ├── Feasibility, RS, 10dB, equal weights, 100random test channels.fig ├── main_test.m ├── main_setup.m ├── initialize_precoders.m ├── main_plot.m ├── MULP_update_P_feasibility.m ├── RS_update_P_feasibility.m ├── main_VariableWeights.m ├── main.m ├── main_feasibility1.m ├── MULP_Rate_Region_feasibility.m ├── main_feasibility0.m └── RS_Rate_Region_feasibility.m ├── Partial CSIT ├── Partial_CSIT_Nt4.mat ├── Report Figures │ ├── PiDiv3.fig │ ├── PiDiv9.fig │ ├── randH.fig │ ├── PiDiv1_999.fig │ └── larger_error.fig ├── Thu21MayRSPartialCSIT.fig ├── Thu21MayRSPartialCSIT.jpg ├── Partial_CSIT_30May_rndH.fig ├── Partial_CSIT_Jun12_rndH.mat ├── Partial_CSIT_Jun13_bias.mat ├── Partial_CSIT_Jun13_error.mat ├── Partial_CSIT_Nt4_29May.mat ├── Partial_CSIT_30May_PiDiv9.fig ├── Partial_CSIT_Jun12_PiDiv3.mat ├── Partial_CSIT_Jun12_PiDiv9.mat ├── Partial_CSIT_Jun12_PiDiv1999.mat ├── Partial_CSIT_Nt4_30May_PiDiv9.mat ├── Partial_CSIT_May29overnight_pidiv3.fig ├── Rate Region RS with partial CSIT.fig ├── main_test.m ├── MULP_update_P.m ├── RS_update_P.m ├── main1.m ├── main_error.m ├── main2.m ├── main3.m ├── main_bias.m ├── main4.m ├── MULP_Rate_Region.m ├── main.m └── RS_Rate_Region.m └── FYP Presentation ├── FYP_Report_xx316.pdf ├── FYP Presentation Script.docx ├── FYP presentation Xinyuan Xu.pptx ├── Presentation Times by session.pdf └── Presentation Times by student.pdf /WSR-WMMSE-MIMO-BC/0dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/0dB.fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/0dB.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/0dB.jpg -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/10dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/10dB.fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/10dB.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/10dB.jpg -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/20dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/20dB.fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/20dB.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/20dB.jpg -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/-10dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/-10dB.fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/-10dB.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/-10dB.jpg -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/Thumbs.db -------------------------------------------------------------------------------- /feasiblity/Feasibility_Jun1.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/feasiblity/Feasibility_Jun1.mat -------------------------------------------------------------------------------- /Partial CSIT/Partial_CSIT_Nt4.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Partial_CSIT_Nt4.mat -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/figures/0dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/figures/0dB.fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/figures/0dB.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/figures/0dB.jpg -------------------------------------------------------------------------------- /feasiblity/Feasibilities_30dB.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/feasiblity/Feasibilities_30dB.mat -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/figures/-10dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/figures/-10dB.fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/figures/-10dB.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/figures/-10dB.jpg -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/figures/10dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/figures/10dB.fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/figures/10dB.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/figures/10dB.jpg -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/figures/20dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/figures/20dB.fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/figures/20dB.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/figures/20dB.jpg -------------------------------------------------------------------------------- /feasiblity/Feasibilities_RS_test.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/feasiblity/Feasibilities_RS_test.mat -------------------------------------------------------------------------------- /FYP Presentation/FYP_Report_xx316.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/FYP Presentation/FYP_Report_xx316.pdf -------------------------------------------------------------------------------- /Partial CSIT/Report Figures/PiDiv3.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Report Figures/PiDiv3.fig -------------------------------------------------------------------------------- /Partial CSIT/Report Figures/PiDiv9.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Report Figures/PiDiv9.fig -------------------------------------------------------------------------------- /Partial CSIT/Report Figures/randH.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Report Figures/randH.fig -------------------------------------------------------------------------------- /Partial CSIT/Thu21MayRSPartialCSIT.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Thu21MayRSPartialCSIT.fig -------------------------------------------------------------------------------- /Partial CSIT/Thu21MayRSPartialCSIT.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Thu21MayRSPartialCSIT.jpg -------------------------------------------------------------------------------- /feasiblity/Feasibilities_28May2240.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/feasiblity/Feasibilities_28May2240.mat -------------------------------------------------------------------------------- /feasiblity/Feasibilities_29May0700.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/feasiblity/Feasibilities_29May0700.mat -------------------------------------------------------------------------------- /Partial CSIT/Partial_CSIT_30May_rndH.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Partial_CSIT_30May_rndH.fig -------------------------------------------------------------------------------- /Partial CSIT/Partial_CSIT_Jun12_rndH.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Partial_CSIT_Jun12_rndH.mat -------------------------------------------------------------------------------- /Partial CSIT/Partial_CSIT_Jun13_bias.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Partial_CSIT_Jun13_bias.mat -------------------------------------------------------------------------------- /Partial CSIT/Partial_CSIT_Jun13_error.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Partial_CSIT_Jun13_error.mat -------------------------------------------------------------------------------- /Partial CSIT/Partial_CSIT_Nt4_29May.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Partial_CSIT_Nt4_29May.mat -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/comparision/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/comparision/Thumbs.db -------------------------------------------------------------------------------- /feasiblity/Feasibility_Jun15_Weights.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/feasiblity/Feasibility_Jun15_Weights.mat -------------------------------------------------------------------------------- /feasiblity/Feasibility_Jun1_weights.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/feasiblity/Feasibility_Jun1_weights.mat -------------------------------------------------------------------------------- /feasiblity/Partial_CSIT_30May_PiDiv9.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/feasiblity/Partial_CSIT_30May_PiDiv9.fig -------------------------------------------------------------------------------- /Partial CSIT/Partial_CSIT_30May_PiDiv9.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Partial_CSIT_30May_PiDiv9.fig -------------------------------------------------------------------------------- /Partial CSIT/Partial_CSIT_Jun12_PiDiv3.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Partial_CSIT_Jun12_PiDiv3.mat -------------------------------------------------------------------------------- /Partial CSIT/Partial_CSIT_Jun12_PiDiv9.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Partial_CSIT_Jun12_PiDiv9.mat -------------------------------------------------------------------------------- /Partial CSIT/Report Figures/PiDiv1_999.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Report Figures/PiDiv1_999.fig -------------------------------------------------------------------------------- /FYP Presentation/FYP Presentation Script.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/FYP Presentation/FYP Presentation Script.docx -------------------------------------------------------------------------------- /Partial CSIT/Partial_CSIT_Jun12_PiDiv1999.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Partial_CSIT_Jun12_PiDiv1999.mat -------------------------------------------------------------------------------- /Partial CSIT/Partial_CSIT_Nt4_30May_PiDiv9.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Partial_CSIT_Nt4_30May_PiDiv9.mat -------------------------------------------------------------------------------- /Partial CSIT/Report Figures/larger_error.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Report Figures/larger_error.fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/comparision/DPC_MULP_0dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/comparision/DPC_MULP_0dB.fig -------------------------------------------------------------------------------- /feasiblity/Feasibility_Jun1_3WeightPairs.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/feasiblity/Feasibility_Jun1_3WeightPairs.mat -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/EURASIP JWCN/DPC_MULP_0dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/EURASIP JWCN/DPC_MULP_0dB.fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/EURASIP JWCN/DPC_MULP_10dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/EURASIP JWCN/DPC_MULP_10dB.fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/EURASIP JWCN/DPC_MULP_20dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/EURASIP JWCN/DPC_MULP_20dB.fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/rnd channel fig/AO RND 0dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/rnd channel fig/AO RND 0dB.fig -------------------------------------------------------------------------------- /feasiblity/Rate Region RS with partial CSIT.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/feasiblity/Rate Region RS with partial CSIT.fig -------------------------------------------------------------------------------- /FYP Presentation/FYP presentation Xinyuan Xu.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/FYP Presentation/FYP presentation Xinyuan Xu.pptx -------------------------------------------------------------------------------- /FYP Presentation/Presentation Times by session.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/FYP Presentation/Presentation Times by session.pdf -------------------------------------------------------------------------------- /FYP Presentation/Presentation Times by student.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/FYP Presentation/Presentation Times by student.pdf -------------------------------------------------------------------------------- /Partial CSIT/Partial_CSIT_May29overnight_pidiv3.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Partial_CSIT_May29overnight_pidiv3.fig -------------------------------------------------------------------------------- /Partial CSIT/Rate Region RS with partial CSIT.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/Partial CSIT/Rate Region RS with partial CSIT.fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/EURASIP JWCN/DPC_MULP_-10dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/EURASIP JWCN/DPC_MULP_-10dB.fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/rnd channel fig/AO RND -10dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/rnd channel fig/AO RND -10dB.fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/rnd channel fig/AO RND 10dB..fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/rnd channel fig/AO RND 10dB..fig -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/rnd channel fig/AO RND 20dB.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/rnd channel fig/AO RND 20dB.fig -------------------------------------------------------------------------------- /feasiblity/Feasibility_Jun1_EqualWeights_3SNRdB.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/feasiblity/Feasibility_Jun1_EqualWeights_3SNRdB.mat -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/comparision/Comparision 10dB 2pi_9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/comparision/Comparision 10dB 2pi_9.jpg -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/comparision/Comparision 20dB 4pi_9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/comparision/Comparision 20dB 4pi_9.jpg -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/comparision/compare with Lina's code.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/WSR-WMMSE-MIMO-BC/comparision/compare with Lina's code.jpg -------------------------------------------------------------------------------- /feasiblity/Feasibility, RS, 10dB, equal weights, 100random test channels.fig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/James-Xu-Xinyuan/Final-Year-Project/HEAD/feasiblity/Feasibility, RS, 10dB, equal weights, 100random test channels.fig -------------------------------------------------------------------------------- /Partial CSIT/main_test.m: -------------------------------------------------------------------------------- 1 | cvx_setup; 2 | LASTN=maxNumCompThreads(1); 3 | array_index=getenv('PBS_ARRAY_INDEX'); 4 | i_theta=str2num(array_index); 5 | i1 = str2num(array_index); 6 | rng(i1); 7 | 8 | for i = 1:1000 9 | H = randn(10,10); 10 | H_inv = inv(H); 11 | end 12 | 13 | test = 123456; 14 | save('outputtest','test','H') 15 | -------------------------------------------------------------------------------- /feasiblity/main_test.m: -------------------------------------------------------------------------------- 1 | LASTN=maxNumCompThreads(1); 2 | array_index=getenv('PBS_ARRAY_INDEX'); 3 | i_test=str2num(array_index); 4 | i1 = str2num(array_index); 5 | rng(i1); 6 | 7 | load Feasibility_Jun1.mat 8 | 9 | Feasibility_RS(1,i_test) = i_test 10 | Feasibility_MULP(2,i_test) = i_test^2 11 | save('Feasibility_Jun1.mat','Feasibility_RS','Feasibility_MULP') 12 | -------------------------------------------------------------------------------- /feasiblity/main_setup.m: -------------------------------------------------------------------------------- 1 | SNRdB=[10 20 30]; 2 | R_thresholds = [1,1.5,2:0.1:6,6.5,7]; 3 | Feasibility_RS = zeros(length(SNRdB),length(R_thresholds)); 4 | Feasibility_MULP = zeros(length(SNRdB),length(R_thresholds)); 5 | save('Feasibility_Jun1.mat','Feasibility_RS','Feasibility_MULP') 6 | 7 | R_thresholds = [1,1.5:0.1:5.5,6]; % 43 points 8 | u2 = [10,3,1,1/3,0.1]; % 5 rate pairs 9 | Feasibility_RS = zeros(length(u2),length(R_thresholds)); 10 | Feasibility_MULP = zeros(length(u2),length(R_thresholds)); 11 | save('Feasibility_Jun15_Weights.mat','Feasibility_RS','Feasibility_MULP') 12 | 13 | 14 | -------------------------------------------------------------------------------- /feasiblity/initialize_precoders.m: -------------------------------------------------------------------------------- 1 | function [p1,p2,pc] = initialize_precoders(H_est, SNR, m) 2 | % m: method number 3 | warning('off') 4 | 5 | h1 = H_est(:,:,1); 6 | h2 = H_est(:,:,2); 7 | [Nr,Nt,K] = size(H_est); 8 | P_c = SNR*0.6; 9 | P_k = (SNR-P_c)/2; 10 | 11 | % private parts 12 | % MRC 13 | p1_mrc = h1'/norm(h1)*sqrt(P_k); 14 | p2_mrc = h2'/norm(h2)*sqrt(P_k); 15 | % ZF % Es = SNR 16 | H = [h1; h2]; 17 | Gzf = sqrt(Nt/SNR)*inv(H'*H)*H'; 18 | p1_zf = Gzf(:,1)/norm(Gzf(:,1))*sqrt(P_k); 19 | p2_zf = Gzf(:,2)/norm(Gzf(:,2))*sqrt(P_k); 20 | 21 | % common part 22 | % SVD 23 | H = [h1' h2']; 24 | [U,~,~] = svd(H); 25 | p_c_hat = U(:,1); 26 | pc_svd = p_c_hat*sqrt(P_c); 27 | pc_rnd = randn(Nt,1)+j*randn(Nt,1); 28 | pc_rnd = pc_rnd/norm(pc_rnd)*sqrt(P_c); 29 | 30 | if m == 1 31 | p1 = p1_mrc; 32 | p2 = p2_mrc; 33 | pc = pc_svd; 34 | end 35 | 36 | if m == 2 37 | p1 = p1_mrc; 38 | p2 = p2_mrc; 39 | pc = pc_rnd; 40 | end 41 | 42 | if m == 3 43 | p1 = p1_zf; 44 | p2 = p2_zf; 45 | pc = pc_svd; 46 | end 47 | 48 | if m == 4 49 | p1 = p1_zf; 50 | p2 = p2_zf; 51 | pc = pc_rnd; 52 | end 53 | 54 | 55 | end -------------------------------------------------------------------------------- /Partial CSIT/MULP_update_P.m: -------------------------------------------------------------------------------- 1 | function [WMSE,p1,p2]=MULP_update_P(M,weights,H_est,SNR,U1,U2,t1,t2,psi_1,psi_2,f1,f2,v1,v2); 2 | % The algorithm used is from papers: 3 | % Weighted Sum-Rate Maximization using Weighted MMSE for MIMO-BC 4 | % Beamforming Design, 2008 TWC, Christensen, Agarval, Carvalho, Cioffi 5 | % "Sum-Rate Maximization for Linearly Precoded Downlink Multiuser MISO Systems with Partial CSIT: A Rate-Splitting Approach" 6 | % by Hamdi Joudeh and Bruno Clerks 7 | 8 | u1 = weights(1); u2 = weights(2); 9 | [Nr,Nt,K] = size(H_est); 10 | 11 | cvx_begin quiet 12 | 13 | variable p1(Nt,Nr) complex 14 | variable p2(Nt,Nr) complex 15 | 16 | expression P_total; 17 | 18 | private_1 = quad_form(p1,psi_1)+quad_form(p2,psi_1)+t1-2*real(f1'*p1)+U1-v1; 19 | private_2 = quad_form(p1,psi_2)+quad_form(p2,psi_2)+t2-2*real(f2'*p2)+U2-v2; 20 | 21 | obj_func = u1*private_1+u2*private_2; 22 | minimize(obj_func) 23 | 24 | P_total = trace(p1'*p1)+trace(p2'*p2); 25 | 26 | subject to 27 | P_total <= SNR 28 | 29 | cvx_end 30 | 31 | WMSE=obj_func; 32 | 33 | end -------------------------------------------------------------------------------- /Partial CSIT/RS_update_P.m: -------------------------------------------------------------------------------- 1 | % This code is to reproduced Figure 8 of 2 | % "Sum-Rate Maximization for Linearly Precoded Downlink Multiuser MISO Systems with Partial CSIT: A Rate-Splitting Approach" 3 | % by Hamdi Joudeh and Bruno Clerks 4 | 5 | % Xinyuan Xu 6 | % 1st written: April 2020 7 | % revised: 2020 May 29 8 | 9 | function [AWSMSE,p1,p2,pc ]=RS_update_P(H_est,weights,SNR,Uc1,Uc2,U1,U2,tc1,tc2,t1,t2,... 10 | psi_c1,psi_c2,psi_1,psi_2,fc1,fc2,f1,f2,vc1,vc2,v1,v2) 11 | 12 | u1=weights(1); u2=weights(2); 13 | 14 | [Nr,Nt,K] = size(H_est) ; 15 | 16 | cvx_begin quiet 17 | 18 | % equations 29 19 | 20 | variable p1(Nt,Nr) complex 21 | variable p2(Nt,Nr) complex 22 | variable pc(Nt,Nr) complex 23 | 24 | expression constraints; 25 | 26 | % constrains on commmon part 27 | common_1=quad_form(pc,psi_c1)+quad_form(p1,psi_c1)+quad_form(p2,psi_c1)+tc1-2*real(fc1'*pc)+Uc1-vc1; 28 | common_2=quad_form(pc,psi_c2)+quad_form(p1,psi_c2)+quad_form(p2,psi_c2)+tc2-2*real(fc2'*pc)+Uc2-vc2; 29 | c=max(common_1,common_2); 30 | 31 | private_1=quad_form(p1,psi_1)+quad_form(p2,psi_1)+t1-2*real(f1'*p1)+U1-v1; 32 | private_2=quad_form(p1,psi_2)+quad_form(p2,psi_2)+t2-2*real(f2'*p2)+U2-v2; 33 | 34 | object_func=u1*(c+private_1)+u2*private_2; 35 | minimize(object_func) 36 | 37 | % constraints on total power 38 | constraints=trace(p1'*p1)+trace(p2'*p2)+trace(pc'*pc); 39 | 40 | subject to 41 | constraints<=SNR 42 | 43 | cvx_end 44 | 45 | AWSMSE=object_func; 46 | 47 | end -------------------------------------------------------------------------------- /feasiblity/main_plot.m: -------------------------------------------------------------------------------- 1 | % load Feasibilities_EW.mat 2 | R_thresholds = [1,1.5,2:0.1:6,6.5,7]; 3 | figure 4 | plot(R_thresholds, Feasibility_MULP) 5 | legend('MULP 10dB', 'MULP 20dB', 'MULP 30dB') 6 | xlabel('R_th (bits/s/Hz)') 7 | ylabel('feasibility') 8 | title('Feasibility - MULP - Equal Weight') 9 | 10 | % load Feasibilities_EW.mat 11 | R_thresholds = [1,1.5,2:0.1:6,6.5,7]; 12 | figure 13 | plot(R_thresholds, Feasibility_RS) 14 | legend('RS 10dB', 'RS 20dB', 'RS 30dB') 15 | xlabel('R_th (bits/s/Hz)') 16 | ylabel('feasibility') 17 | title('Feasibility - RS - Equal Weight') 18 | 19 | % load Feasibility_3WeightPairs 20 | R_thresholds = [1,1.5,2:0.1:6,6.5,7]; 21 | figure 22 | plot(R_thresholds, Feasibility_MULP) 23 | legend('MULP 3:1', 'MULP 1:1', 'MULP 1:3') 24 | xlabel('R_th (bits/s/Hz)') 25 | ylabel('feasibility') 26 | title('Feasibility - MULP - Variable Weight') 27 | xlim([1 4]) 28 | 29 | % load Feasibility_3WeightPairs 30 | R_thresholds = [1,1.5,2:0.1:6,6.5,7]; 31 | figure 32 | plot(R_thresholds, Feasibility_RS) 33 | legend('RS 3:1', 'RS 1:1', 'RS 1:3') 34 | xlabel('R_th (bits/s/Hz)') 35 | ylabel('feasibility') 36 | title('Feasibility - RS - Variable Weight') 37 | xlim([1 4]) 38 | 39 | % load Feasibility_5WeightPairs 40 | R_thresholds = [1,1.5:0.1:5.5,6]; 41 | figure 42 | plot(R_thresholds, Feasibility_RS) 43 | legend('RS 10:1','RS 3:1', 'RS 1:1', 'RS 1:3', 'RS 1:10') 44 | xlabel('R_th (bits/s/Hz)') 45 | ylabel('feasibility') 46 | title('Feasibility - RS - Variable Weight') 47 | 48 | figure 49 | plot(R_thresholds, Feasibility_MULP) 50 | legend('MULP 10:1','MULP 3:1', 'MULP 1:1', 'MULP 1:3', 'MULP 1:10') 51 | xlabel('R_th (bits/s/Hz)') 52 | ylabel('feasibility') 53 | title('Feasibility - MULP - Variable Weight') 54 | 55 | -------------------------------------------------------------------------------- /feasiblity/MULP_update_P_feasibility.m: -------------------------------------------------------------------------------- 1 | function [feasible,WMSE,p1,p2]=MULP_update_P_feasibility(Rth,weights,H_est,SNR,U1,U2,t1,t2,psi_1,psi_2,f1,f2,v1,v2) 2 | % The algorithm used is from papers: 3 | % Weighted Sum-Rate Maximization using Weighted MMSE for MIMO-BC 4 | % Beamforming Design, 2008 TWC, Christensen, Agarval, Carvalho, Cioffi 5 | % "Sum-Rate Maximization for Linearly Precoded Downlink Multiuser MISO Systems with Partial CSIT: A Rate-Splitting Approach" 6 | % by Hamdi Joudeh and Bruno Clerks 7 | 8 | u1 = weights(1); u2 = weights(2); 9 | [Nr,Nt,K] = size(H_est); 10 | 11 | try 12 | cvx_begin quiet 13 | 14 | variable p1(Nt,Nr) complex 15 | variable p2(Nt,Nr) complex 16 | 17 | expression P_total; 18 | expression R1; expression R2; 19 | 20 | private_1 = quad_form(p1,psi_1)+quad_form(p2,psi_1)+t1-2*real(f1'*p1)+U1-v1; 21 | private_2 = quad_form(p1,psi_2)+quad_form(p2,psi_2)+t2-2*real(f2'*p2)+U2-v2; 22 | 23 | obj_func = u1*private_1+u2*private_2; 24 | minimize(obj_func) 25 | 26 | P_total = trace(p1'*p1)+trace(p2'*p2); 27 | R1 = 1 - private_1; 28 | R2 = 1 - private_2; 29 | 30 | subject to 31 | P_total <= SNR; 32 | R1 >= Rth; 33 | R2 >= Rth; 34 | 35 | cvx_end 36 | 37 | WMSE=obj_func; 38 | 39 | if cvx_status == "Solved" 40 | feasible = 1; 41 | else 42 | feasible = 0; 43 | end 44 | 45 | catch ME 46 | ME.identifier; 47 | feasible = 0; 48 | WMSE = 0; 49 | p1 = zeros(Nt,1); 50 | p2 = zeros(Nt,1); 51 | end 52 | 53 | end -------------------------------------------------------------------------------- /feasiblity/RS_update_P_feasibility.m: -------------------------------------------------------------------------------- 1 | function [feasible,AWSMSE,p1,p2,pc]=RS_update_P_feasibility(Rth, H_est,weights,SNR,Uc1,Uc2,U1,U2,tc1,tc2,t1,t2,... 2 | psi_c1,psi_c2,psi_1,psi_2,fc1,fc2,f1,f2,vc1,vc2,v1,v2) 3 | % introduce Rth, threshold rate / QoS requirement 4 | % introduce Boolean Variable 'feasible" 5 | feasible = 1; % default output 6 | u1=weights(1); 7 | u2=weights(2); 8 | h1 = H_est(:,:,1); 9 | h2 = H_est(:,:,2); 10 | [Nr,Nt,K] = size(H_est) ; 11 | try 12 | cvx_begin quiet 13 | 14 | % equations 29 15 | 16 | variable p1(Nt,Nr) complex 17 | variable p2(Nt,Nr) complex 18 | variable pc(Nt,Nr) complex 19 | 20 | expression P_total; 21 | expression R1; 22 | expression R2; 23 | 24 | % constrains on commmon part 25 | common_1=quad_form(pc,psi_c1)+quad_form(p1,psi_c1)+quad_form(p2,psi_c1)+tc1-2*real(fc1'*pc)+Uc1-vc1; 26 | common_2=quad_form(pc,psi_c2)+quad_form(p1,psi_c2)+quad_form(p2,psi_c2)+tc2-2*real(fc2'*pc)+Uc2-vc2; 27 | c=max(common_1,common_2); 28 | 29 | Rc1 = 1 - common_1; 30 | Rc2 = 1 - common_2; 31 | Rc = min(Rc1, Rc2); 32 | % Rc has problem defined above, not sure why 33 | Rc = 1-c; 34 | 35 | private_1=quad_form(p1,psi_1)+quad_form(p2,psi_1)+t1-2*real(f1'*p1)+U1-v1; 36 | private_2=quad_form(p1,psi_2)+quad_form(p2,psi_2)+t2-2*real(f2'*p2)+U2-v2; 37 | 38 | object_func=u1*(c+private_1)+u2*private_2; 39 | minimize(object_func) 40 | 41 | % constraints on total power 42 | P_total=trace(p1'*p1)+trace(p2'*p2)+trace(pc'*pc); 43 | R1 = 1 - private_1 + Rc; 44 | R2 = 1 - private_2; 45 | 46 | subject to 47 | P_total <= SNR; 48 | R1 >= Rth; 49 | R2 >= Rth; 50 | 51 | cvx_end 52 | 53 | AWSMSE=object_func; 54 | 55 | if cvx_status == "Solved" 56 | feasible = 1; 57 | else 58 | feasible = 0; 59 | end 60 | 61 | catch ME 62 | ME.identifier; 63 | feasible = 0; 64 | AWSMSE = 0; 65 | p1 = zeros(4,1); % return zeros 66 | p2 = zeros(4,1); % position occupier only 67 | pc = zeros(4,1); % values does not matter 68 | end % try catch 69 | end %function -------------------------------------------------------------------------------- /Partial CSIT/main1.m: -------------------------------------------------------------------------------- 1 | cvx_setup; 2 | LASTN=maxNumCompThreads(1); 3 | array_index=getenv('PBS_ARRAY_INDEX'); 4 | i_theta=str2num(array_index); 5 | i1 = str2num(array_index); 6 | rng(i1); 7 | % This code is to reproduced Figure 8 of 8 | % "Sum-Rate Maximization for Linearly Precoded Downlink Multiuser MISO Systems with Partial CSIT: A Rate-Splitting Approach" 9 | % by Hamdi Joudeh and Bruno Clerks 10 | 11 | % Xinyuan Xu 12 | % 1st written: April 2020 13 | % revised: 2020 May 29 14 | 15 | clear all; 16 | tolerance = 10^-4; 17 | Nt = 4; 18 | Nr = 1; 19 | SNRdB = [10 20 30]; 20 | theta = pi/3; 21 | M = 1000; 22 | % Realization of Sample Average Functions 23 | bias = 1; 24 | weight = [-3 -1:0.05:1 3]; 25 | u2 = 10.^weight; 26 | u1 = ones(1,length(u2)); 27 | 28 | H_est(:,:,1) = [1 1 1 1]; 29 | H_est(:,:,2) = [1 exp(1i*theta) exp(1i*2*theta) exp(1i*3*theta)]*bias; 30 | 31 | C_NoRs_user1 = zeros(length(SNRdB), length(weight)); 32 | C_NoRs_user2 = zeros(length(SNRdB), length(weight)); 33 | 34 | for i_SNRdB=1:length(SNRdB) 35 | 36 | %Channel error 37 | SNR = 10^(SNRdB(i_SNRdB)/10); 38 | P_t=SNR; %total transmission power, unit norm variance 39 | P_e=P_t^(-0.6); %error variance 40 | 41 | for i=1:M 42 | H_error_1(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e); 43 | H_error_2(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e)*bias; 44 | end 45 | 46 | for i_weight=1:length(u1) 47 | SNRdB(i_SNRdB) 48 | i_weight 49 | weights=[u1(i_weight),u2(i_weight)]; 50 | 51 | [C_RS_order1,Pc1] = RS_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNR,tolerance) 52 | % change the order 53 | H_est1(:,:,1)=H_est(:,:,2); 54 | H_est1(:,:,2)=H_est(:,:,1); 55 | weights1(1)=weights(2); 56 | weights1(2)=weights(1); 57 | % different decoding order 58 | [C_order2,Pc2] = RS_Rate_Region(M,weights1,H_est1,H_error_2,H_error_1,SNR,tolerance) 59 | C_RS_order2(2)=C_order2(1); 60 | C_RS_order2(1)=C_order2(2); 61 | 62 | C_RS_order1_user1(i_SNRdB,i_weight) = C_RS_order1(1); 63 | C_RS_order1_user2(i_SNRdB,i_weight) = C_RS_order1(2); 64 | C_RS_order2_user1(i_SNRdB,i_weight) = C_RS_order2(1); 65 | C_RS_order2_user2(i_SNRdB,i_weight) = C_RS_order2(2); 66 | 67 | C_NoRS = MULP_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNRdB(i_SNRdB),tolerance) 68 | % C_NoRS = MULP_rateRegion(M,weights,H_est,H_error_1,H_error_2,SNRdB(i_SNRdB),tolerance) 69 | C_NoRs_user1(i_SNRdB,i_weight)=C_NoRS(1); 70 | C_NoRs_user2(i_SNRdB,i_weight)=C_NoRS(2); 71 | 72 | end %end looping user weights 73 | 74 | end %end looping SNR 75 | 76 | save('Partial_CSIT_Jun12_PiDiv3','C_NoRs_user1','C_NoRs_user2','C_RS_order1_user1','C_RS_order2_user1','C_RS_order1_user2','C_RS_order2_user2') 77 | -------------------------------------------------------------------------------- /Partial CSIT/main_error.m: -------------------------------------------------------------------------------- 1 | cvx_setup; 2 | LASTN=maxNumCompThreads(1); 3 | array_index=getenv('PBS_ARRAY_INDEX'); 4 | i_theta=str2num(array_index); 5 | i1 = str2num(array_index); 6 | rng(i1); 7 | % This code is to reproduced Figure 8 of 8 | % "Sum-Rate Maximization for Linearly Precoded Downlink Multiuser MISO Systems with Partial CSIT: A Rate-Splitting Approach" 9 | % by Hamdi Joudeh and Bruno Clerks 10 | 11 | % Xinyuan Xu 12 | % 1st written: April 2020 13 | % revised: 2020 May 29 14 | 15 | clear all; 16 | tolerance = 10^-4; 17 | Nt = 4; 18 | Nr = 1; 19 | SNRdB = [10 20 30]; 20 | theta = pi/3; 21 | M = 1000; 22 | % Realization of Sample Average Functions 23 | bias = 1; 24 | weight = [-3 -1:0.05:1 3]; 25 | u2 = 10.^weight; 26 | u1 = ones(1,length(u2)); 27 | 28 | H_est(:,:,1) = [1 1 1 1]; 29 | H_est(:,:,2) = [1 exp(1i*theta) exp(1i*2*theta) exp(1i*3*theta)]*bias; 30 | 31 | C_NoRs_user1 = zeros(length(SNRdB), length(weight)); 32 | C_NoRs_user2 = zeros(length(SNRdB), length(weight)); 33 | 34 | for i_SNRdB=1:length(SNRdB) 35 | 36 | %Channel error 37 | SNR = 10^(SNRdB(i_SNRdB)/10); 38 | P_t=SNR; %total transmission power, unit norm variance 39 | P_e=P_t^(-0.06); %error variance 40 | 41 | for i=1:M 42 | H_error_1(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e); 43 | H_error_2(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e)*bias; 44 | end 45 | 46 | for i_weight=1:length(u1) 47 | SNRdB(i_SNRdB) 48 | i_weight 49 | weights=[u1(i_weight),u2(i_weight)]; 50 | 51 | [C_RS_order1,Pc1] = RS_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNR,tolerance) 52 | % change the order 53 | H_est1(:,:,1)=H_est(:,:,2); 54 | H_est1(:,:,2)=H_est(:,:,1); 55 | weights1(1)=weights(2); 56 | weights1(2)=weights(1); 57 | % different decoding order 58 | [C_order2,Pc2] = RS_Rate_Region(M,weights1,H_est1,H_error_2,H_error_1,SNR,tolerance) 59 | C_RS_order2(2)=C_order2(1); 60 | C_RS_order2(1)=C_order2(2); 61 | 62 | C_RS_order1_user1(i_SNRdB,i_weight) = C_RS_order1(1); 63 | C_RS_order1_user2(i_SNRdB,i_weight) = C_RS_order1(2); 64 | C_RS_order2_user1(i_SNRdB,i_weight) = C_RS_order2(1); 65 | C_RS_order2_user2(i_SNRdB,i_weight) = C_RS_order2(2); 66 | 67 | C_NoRS = MULP_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNRdB(i_SNRdB),tolerance) 68 | % C_NoRS = MULP_rateRegion(M,weights,H_est,H_error_1,H_error_2,SNRdB(i_SNRdB),tolerance) 69 | C_NoRs_user1(i_SNRdB,i_weight)=C_NoRS(1); 70 | C_NoRs_user2(i_SNRdB,i_weight)=C_NoRS(2); 71 | 72 | end %end looping user weights 73 | 74 | end %end looping SNR 75 | 76 | save('Partial_CSIT_Jun12_PiDiv3','C_NoRs_user1','C_NoRs_user2','C_RS_order1_user1','C_RS_order2_user1','C_RS_order1_user2','C_RS_order2_user2') 77 | -------------------------------------------------------------------------------- /Partial CSIT/main2.m: -------------------------------------------------------------------------------- 1 | cvx_setup; 2 | LASTN=maxNumCompThreads(1); 3 | array_index=getenv('PBS_ARRAY_INDEX'); 4 | i_theta=str2num(array_index); 5 | i1 = str2num(array_index); 6 | % rng(i1); 7 | % This code is to reproduced Figure 8 of 8 | % "Sum-Rate Maximization for Linearly Precoded Downlink Multiuser MISO Systems with Partial CSIT: A Rate-Splitting Approach" 9 | % by Hamdi Joudeh and Bruno Clerks 10 | 11 | % Xinyuan Xu 12 | % 1st written: April 2020 13 | % revised: 2020 May 29 14 | 15 | clear all; 16 | tolerance = 10^-4; 17 | Nt = 4; 18 | Nr = 1; 19 | SNRdB = [10 20 30]; 20 | theta = pi/9; 21 | M = 1000; 22 | % Realization of Sample Average Functions 23 | bias = 1; 24 | weight = [-3 -1:0.05:1 3]; 25 | u2 = 10.^weight; 26 | u1 = ones(1,length(u2)); 27 | 28 | H_est(:,:,1) = [1 1 1 1]; 29 | H_est(:,:,2) = [1 exp(1i*theta) exp(1i*2*theta) exp(1i*3*theta)]*bias; 30 | 31 | C_NoRs_user1 = zeros(length(SNRdB), length(weight)); 32 | C_NoRs_user2 = zeros(length(SNRdB), length(weight)); 33 | 34 | for i_SNRdB=1:length(SNRdB) 35 | 36 | %Channel error 37 | SNR = 10^(SNRdB(i_SNRdB)/10); 38 | P_t=SNR; %total transmission power, unit norm variance 39 | P_e=P_t^(-0.6); %error variance 40 | 41 | for i=1:M 42 | H_error_1(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e); 43 | H_error_2(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e)*bias; 44 | end 45 | 46 | for i_weight=1:length(u1) 47 | % SNRdB(i_SNRdB) 48 | % i_weight 49 | weights=[u1(i_weight),u2(i_weight)]; 50 | 51 | [C_RS_order1,Pc1] = RS_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNR,tolerance) 52 | % change the order 53 | H_est1(:,:,1)=H_est(:,:,2); 54 | H_est1(:,:,2)=H_est(:,:,1); 55 | weights1(1)=weights(2); 56 | weights1(2)=weights(1); 57 | % different decoding order 58 | [C_order2,Pc2] = RS_Rate_Region(M,weights1,H_est1,H_error_2,H_error_1,SNR,tolerance) 59 | C_RS_order2(2)=C_order2(1); 60 | C_RS_order2(1)=C_order2(2); 61 | 62 | C_RS_order1_user1(i_SNRdB,i_weight) = C_RS_order1(1); 63 | C_RS_order1_user2(i_SNRdB,i_weight) = C_RS_order1(2); 64 | C_RS_order2_user1(i_SNRdB,i_weight) = C_RS_order2(1); 65 | C_RS_order2_user2(i_SNRdB,i_weight) = C_RS_order2(2); 66 | 67 | C_NoRS = MULP_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNRdB(i_SNRdB),tolerance) 68 | % C_NoRS = MULP_rateRegion(M,weights,H_est,H_error_1,H_error_2,SNRdB(i_SNRdB),tolerance) 69 | C_NoRs_user1(i_SNRdB,i_weight)=C_NoRS(1); 70 | C_NoRs_user2(i_SNRdB,i_weight)=C_NoRS(2); 71 | 72 | end %end looping user weights 73 | 74 | end %end looping SNR 75 | 76 | save('Partial_CSIT_Jun12_PiDiv9.mat','C_NoRs_user1','C_NoRs_user2','C_RS_order1_user1','C_RS_order2_user1','C_RS_order1_user2','C_RS_order2_user2') 77 | -------------------------------------------------------------------------------- /Partial CSIT/main3.m: -------------------------------------------------------------------------------- 1 | cvx_setup; 2 | LASTN=maxNumCompThreads(1); 3 | array_index=getenv('PBS_ARRAY_INDEX'); 4 | i_theta=str2num(array_index); 5 | i1 = str2num(array_index); 6 | % rng(i1); 7 | % This code is to reproduced Figure 8 of 8 | % "Sum-Rate Maximization for Linearly Precoded Downlink Multiuser MISO Systems with Partial CSIT: A Rate-Splitting Approach" 9 | % by Hamdi Joudeh and Bruno Clerks 10 | 11 | % Xinyuan Xu 12 | % 1st written: April 2020 13 | % revised: 2020 May 29 14 | 15 | clear all; 16 | tolerance = 10^-4; 17 | Nt = 4; 18 | Nr = 1; 19 | SNRdB = [10 20 30]; 20 | theta = pi/1.999; 21 | M = 1000; 22 | % Realization of Sample Average Functions 23 | bias = 1; 24 | weight = [-3 -1:0.05:1 3]; 25 | u2 = 10.^weight; 26 | u1 = ones(1,length(u2)); 27 | 28 | H_est(:,:,1) = [1 1 1 1]; 29 | H_est(:,:,2) = [1 exp(1i*theta) exp(1i*2*theta) exp(1i*3*theta)]*bias; 30 | 31 | C_NoRs_user1 = zeros(length(SNRdB), length(weight)); 32 | C_NoRs_user2 = zeros(length(SNRdB), length(weight)); 33 | 34 | for i_SNRdB=1:length(SNRdB) 35 | 36 | %Channel error 37 | SNR = 10^(SNRdB(i_SNRdB)/10); 38 | P_t=SNR; %total transmission power, unit norm variance 39 | P_e=P_t^(-0.6); %error variance 40 | 41 | for i=1:M 42 | H_error_1(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e); 43 | H_error_2(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e)*bias; 44 | end 45 | 46 | for i_weight=1:length(u1) 47 | % SNRdB(i_SNRdB) 48 | % i_weight 49 | weights=[u1(i_weight),u2(i_weight)]; 50 | 51 | [C_RS_order1,Pc1] = RS_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNR,tolerance) 52 | % change the order 53 | H_est1(:,:,1)=H_est(:,:,2); 54 | H_est1(:,:,2)=H_est(:,:,1); 55 | weights1(1)=weights(2); 56 | weights1(2)=weights(1); 57 | % different decoding order 58 | [C_order2,Pc2] = RS_Rate_Region(M,weights1,H_est1,H_error_2,H_error_1,SNR,tolerance) 59 | C_RS_order2(2)=C_order2(1); 60 | C_RS_order2(1)=C_order2(2); 61 | 62 | C_RS_order1_user1(i_SNRdB,i_weight) = C_RS_order1(1); 63 | C_RS_order1_user2(i_SNRdB,i_weight) = C_RS_order1(2); 64 | C_RS_order2_user1(i_SNRdB,i_weight) = C_RS_order2(1); 65 | C_RS_order2_user2(i_SNRdB,i_weight) = C_RS_order2(2); 66 | 67 | C_NoRS = MULP_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNRdB(i_SNRdB),tolerance) 68 | % C_NoRS = MULP_rateRegion(M,weights,H_est,H_error_1,H_error_2,SNRdB(i_SNRdB),tolerance) 69 | C_NoRs_user1(i_SNRdB,i_weight)=C_NoRS(1); 70 | C_NoRs_user2(i_SNRdB,i_weight)=C_NoRS(2); 71 | 72 | end %end looping user weights 73 | 74 | end %end looping SNR 75 | 76 | save('Partial_CSIT_Jun12_PiDiv1999.mat','C_NoRs_user1','C_NoRs_user2','C_RS_order1_user1','C_RS_order2_user1','C_RS_order1_user2','C_RS_order2_user2') 77 | -------------------------------------------------------------------------------- /Partial CSIT/main_bias.m: -------------------------------------------------------------------------------- 1 | cvx_setup; 2 | LASTN=maxNumCompThreads(1); 3 | array_index=getenv('PBS_ARRAY_INDEX'); 4 | i_theta=str2num(array_index); 5 | i1 = str2num(array_index); 6 | % rng(i1); 7 | % This code is to reproduced Figure 8 of 8 | % "Sum-Rate Maximization for Linearly Precoded Downlink Multiuser MISO Systems with Partial CSIT: A Rate-Splitting Approach" 9 | % by Hamdi Joudeh and Bruno Clerks 10 | 11 | % Xinyuan Xu 12 | % 1st written: April 2020 13 | % revised: 2020 May 29 14 | 15 | clear all; 16 | tolerance = 10^-3; 17 | Nt = 4; 18 | Nr = 1; 19 | SNRdB = [10 20 30]; 20 | theta = pi/3; 21 | M = 1000; 22 | % Realization of Sample Average Functions 23 | bias = 1/sqrt(2); 24 | 25 | weight = [-3 -1:0.05:1 3]; 26 | u2 = 10.^weight; 27 | u1 = ones(1,length(u2)); 28 | 29 | H_est(:,:,1) = [1 1 1 1]; 30 | H_est(:,:,2) = [1 exp(1i*theta) exp(1i*2*theta) exp(1i*3*theta)]*bias; 31 | 32 | C_NoRs_user1 = zeros(length(SNRdB), length(weight)); 33 | C_NoRs_user2 = zeros(length(SNRdB), length(weight)); 34 | 35 | for i_SNRdB=1:length(SNRdB) 36 | 37 | %Channel error 38 | SNR = 10^(SNRdB(i_SNRdB)/10); 39 | P_t=SNR; %total transmission power, unit norm variance 40 | P_e=P_t^(-0.6); %error variance 41 | 42 | for i=1:M 43 | H_error_1(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e); 44 | H_error_2(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e)*bias; 45 | end 46 | 47 | for i_weight=1:length(u1) 48 | SNRdB(i_SNRdB) 49 | i_weight 50 | weights=[u1(i_weight),u2(i_weight)]; 51 | 52 | [C_RS_order1,Pc1] = RS_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNR,tolerance) 53 | % change the order 54 | H_est1(:,:,1)=H_est(:,:,2); 55 | H_est1(:,:,2)=H_est(:,:,1); 56 | weights1(1)=weights(2); 57 | weights1(2)=weights(1); 58 | % different decoding order 59 | [C_order2,Pc2] = RS_Rate_Region(M,weights1,H_est1,H_error_2,H_error_1,SNR,tolerance) 60 | C_RS_order2(2)=C_order2(1); 61 | C_RS_order2(1)=C_order2(2); 62 | 63 | C_RS_order1_user1(i_SNRdB,i_weight) = C_RS_order1(1); 64 | C_RS_order1_user2(i_SNRdB,i_weight) = C_RS_order1(2); 65 | C_RS_order2_user1(i_SNRdB,i_weight) = C_RS_order2(1); 66 | C_RS_order2_user2(i_SNRdB,i_weight) = C_RS_order2(2); 67 | 68 | C_NoRS = MULP_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNRdB(i_SNRdB),tolerance) 69 | % C_NoRS = MULP_rateRegion(M,weights,H_est,H_error_1,H_error_2,SNRdB(i_SNRdB),tolerance) 70 | C_NoRs_user1(i_SNRdB,i_weight)=C_NoRS(1); 71 | C_NoRs_user2(i_SNRdB,i_weight)=C_NoRS(2); 72 | 73 | end %end looping user weights 74 | 75 | end %end looping SNR 76 | 77 | save('Partial_CSIT_Jun13_bias','C_NoRs_user1','C_NoRs_user2','C_RS_order1_user1','C_RS_order2_user1','C_RS_order1_user2','C_RS_order2_user2') 78 | -------------------------------------------------------------------------------- /Partial CSIT/main4.m: -------------------------------------------------------------------------------- 1 | cvx_setup; 2 | LASTN=maxNumCompThreads(1); 3 | array_index=getenv('PBS_ARRAY_INDEX'); 4 | i_theta=str2num(array_index); 5 | i1 = str2num(array_index); 6 | % rng(i1); 7 | % This code is to reproduced Figure 8 of 8 | % "Sum-Rate Maximization for Linearly Precoded Downlink Multiuser MISO Systems with Partial CSIT: A Rate-Splitting Approach" 9 | % by Hamdi Joudeh and Bruno Clerks 10 | 11 | % Xinyuan Xu 12 | % 1st written: April 2020 13 | % revised: 2020 May 29 14 | 15 | clear all; 16 | tolerance = 10^-4; 17 | Nt = 4; 18 | Nr = 1; 19 | SNRdB = [10 20 30]; 20 | theta = pi/1.999; 21 | M = 1000; 22 | % Realization of Sample Average Functions 23 | bias = 1; 24 | weight = [-3 -1:0.05:1 3]; 25 | u2 = 10.^weight; 26 | u1 = ones(1,length(u2)); 27 | 28 | H_est(:,:,1) = ((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2)); 29 | H_est(:,:,1) = H_est(:,:,1)/norm(H_est(:,:,1))*sqrt(Nt); 30 | H_est(:,:,2) = ((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2)); 31 | H_est(:,:,2) = H_est(:,:,2)/norm(H_est(:,:,2))*sqrt(Nt); 32 | 33 | % H_est(:,:,1) = [1 1 1 1]; 34 | % H_est(:,:,2) = [1 exp(1i*theta) exp(1i*2*theta) exp(1i*3*theta)]*bias; 35 | 36 | C_NoRs_user1 = zeros(length(SNRdB), length(weight)); 37 | C_NoRs_user2 = zeros(length(SNRdB), length(weight)); 38 | 39 | for i_SNRdB=1:length(SNRdB) 40 | 41 | %Channel error 42 | SNR = 10^(SNRdB(i_SNRdB)/10); 43 | P_t=SNR; %total transmission power, unit norm variance 44 | P_e=P_t^(-0.6); %error variance 45 | 46 | for i=1:M 47 | H_error_1(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e); 48 | H_error_2(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e)*bias; 49 | end 50 | 51 | for i_weight=1:length(u1) 52 | % SNRdB(i_SNRdB) 53 | % i_weight 54 | weights=[u1(i_weight),u2(i_weight)]; 55 | 56 | [C_RS_order1,Pc1] = RS_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNR,tolerance) 57 | % change the order 58 | H_est1(:,:,1)=H_est(:,:,2); 59 | H_est1(:,:,2)=H_est(:,:,1); 60 | weights1(1)=weights(2); 61 | weights1(2)=weights(1); 62 | % different decoding order 63 | [C_order2,Pc2] = RS_Rate_Region(M,weights1,H_est1,H_error_2,H_error_1,SNR,tolerance) 64 | C_RS_order2(2)=C_order2(1); 65 | C_RS_order2(1)=C_order2(2); 66 | 67 | C_RS_order1_user1(i_SNRdB,i_weight) = C_RS_order1(1); 68 | C_RS_order1_user2(i_SNRdB,i_weight) = C_RS_order1(2); 69 | C_RS_order2_user1(i_SNRdB,i_weight) = C_RS_order2(1); 70 | C_RS_order2_user2(i_SNRdB,i_weight) = C_RS_order2(2); 71 | 72 | C_NoRS = MULP_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNRdB(i_SNRdB),tolerance) 73 | % C_NoRS = MULP_rateRegion(M,weights,H_est,H_error_1,H_error_2,SNRdB(i_SNRdB),tolerance) 74 | C_NoRs_user1(i_SNRdB,i_weight)=C_NoRS(1); 75 | C_NoRs_user2(i_SNRdB,i_weight)=C_NoRS(2); 76 | 77 | end %end looping user weights 78 | 79 | end %end looping SNR 80 | 81 | save('Partial_CSIT_Jun12_rndH.mat','C_NoRs_user1','C_NoRs_user2','C_RS_order1_user1','C_RS_order2_user1','C_RS_order1_user2','C_RS_order2_user2') 82 | -------------------------------------------------------------------------------- /Partial CSIT/MULP_Rate_Region.m: -------------------------------------------------------------------------------- 1 | function Capacity = MULP_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNRdB,tolerance) 2 | 3 | % The algorithm used is from papers: 4 | % Weighted Sum-Rate Maximization using Weighted MMSE for MIMO-BC 5 | % Beamforming Design, 2008 TWC, Christensen, Agarval, Carvalho, Cioffi 6 | % "Sum-Rate Maximization for Linearly Precoded Downlink Multiuser MISO Systems with Partial CSIT: A Rate-Splitting Approach" 7 | % by Hamdi Joudeh and Bruno Clerks 8 | 9 | [Nr,Nt,K] = size(H_est); 10 | SNR = 10^(SNRdB/10); 11 | Pk = SNR/K; 12 | R_1 = zeros(1,M); R_2 = zeros(1,M); 13 | p1 = H_est(:,:,1)'/norm(H_est(:,:,1))*sqrt(Pk); 14 | p2 = H_est(:,:,2)'/norm(H_est(:,:,2))*sqrt(Pk); 15 | 16 | for i=1:M 17 | H_1(:,:,i) = H_est(:,:,1)+H_error_1(:,:,i); 18 | H_2(:,:,i) = H_est(:,:,2)+H_error_2(:,:,i); 19 | end 20 | 21 | loop = 1; 22 | WMSE_old = 100; 23 | count = 0; 24 | while(loop) 25 | 26 | t1 = 0; t2 = 0; 27 | psi_1 = 0; psi_2 = 0; 28 | f1 = zeros(Nt,Nr); f2 = zeros(Nt,Nr); 29 | v1 = 0; v2 = 0; 30 | U1 = 0; U2 = 0; 31 | 32 | for i=1:M 33 | h1 = H_1(:,:,i); h2 = H_2(:,:,i); 34 | I1 = abs(h1*p2)^2+1; I2 = abs(h2*p1)^2+1; 35 | T1 = abs(h1*p1)^2+I1; T2 = abs(h2*p2)^2+I2; 36 | 37 | E1 = inv(T1)*I1; E2 = inv(T2)*I2; 38 | g1 = inv(T1)*p1'*h1'; g2 = inv(T2)*p2'*h2'; 39 | u1 = inv(E1); u2 = inv(E2); 40 | 41 | U1 = U1+u1; U2 = U2+u2; 42 | t1 = t1+u1*abs(g1)^2; t2 = t2+u2*abs(g2)^2; 43 | psi_1 = psi_1+(u1*abs(g1)^2)*h1'*h1; 44 | psi_2 = psi_2+(u2*abs(g2)^2)*h2'*h2; 45 | f1 = f1+u1*h1'*g1'; f2 = f2+u2*h2'*g2'; 46 | v1 = v1+log2(u1); v2 = v2+log2(u2); 47 | end 48 | 49 | % SAFs 50 | U1=U1./M; U2=U2./M; 51 | t1=t1./M; t2=t2./M; 52 | psi_1=psi_1./M; psi_2=psi_2./M; 53 | f1=f1./M; f2=f2./M; 54 | v1=v1./M; v2=v2./M; 55 | 56 | % cvx optimization 57 | [WMSE,p1,p2]=MULP_update_P(M,weights,H_est,SNR,U1,U2,t1,t2,... 58 | psi_1,psi_2,f1,f2,v1,v2); 59 | 60 | if abs((WMSE-WMSE_old)/WMSE_old)<=tolerance 61 | loop=0; 62 | else 63 | WMSE_old=WMSE; 64 | count = count+1; 65 | end 66 | 67 | if count >= 500 68 | end 69 | 70 | end 71 | 72 | for i=1:M 73 | h1 = H_1(:,:,i); 74 | h2 = H_2(:,:,i); 75 | % equation 3 76 | I1 = abs(h1*p2)^2+1; I2 = abs(h2*p1)^2+1; 77 | T1 = abs(h1*p1)^2+I1; T2 = abs(h2*p2)^2+I2; 78 | % Ick = Tk %SINR, gama on paper % equation 4 79 | y1 = abs(h1*p1)^2*inv(I1); y2 = abs(h2*p2)^2*inv(I2); 80 | % equation 5 81 | R_1(i) = real(log2(1+y1)); R_2(i) = real(log2(1+y2)); 82 | 83 | end 84 | 85 | Capacity(1)=sum(R_1)/M; 86 | Capacity(2)=sum(R_2)/M; 87 | 88 | test =1 ; 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /feasiblity/main_VariableWeights.m: -------------------------------------------------------------------------------- 1 | clear all; 2 | cvx_setup; 3 | LASTN=maxNumCompThreads(1); 4 | array_index=getenv('PBS_ARRAY_INDEX'); 5 | i_th=str2num(array_index); 6 | i1 = str2num(array_index); 7 | rng(i1); 8 | 9 | % Xinyuan Xu 10 | % June 2020 11 | % feasibility of RS with partial CSIT with extra QoS contraints 12 | % main, the basic version: 13 | % fixed SNR, variable weight pairs 14 | % key variable - Rth in array R_thresholds 15 | 16 | tolerance = 10^-3; 17 | Nt=4; 18 | Nr=1; 19 | SNRdB = 20; % rate region should intersect with axis at around 2 to 6 20 | SNR = 10^(SNRdB/10); 21 | P_t=SNR; %total transmission power, unit norm variance 22 | P_e=P_t^(-0.6); %error variance 23 | 24 | u2 = [10,3,1,1/3,0.1]; % 5 rate pairs 25 | u1 = ones(1,length(u2)); 26 | M = 1000; 27 | R_thresholds = [1,1.5:0.1:5.5,6]; % 43 points 28 | NoTest = 100; %HPC 29 | 30 | for i_weight = 1:5 31 | weights = [u1(i_weight), u1(i_weight)]; 32 | 33 | % for i_th = 1:length(R_thresholds) % loop throught different threshold values 34 | % i_threshold 35 | Feasibility_rs = 0; % counter/register 36 | Feasibility_mulp = 0; 37 | % i_th 38 | Rth = R_thresholds(i_th); 39 | for i_test = 1:NoTest 40 | % test feasiblity with a lot of random channels 41 | H_est(:,:,1)= (randn(1,Nt)+j*randn(1,Nt)); 42 | H_est(:,:,1) = H_est(:,:,1)/norm(H_est(:,:,1))*sqrt(Nt); 43 | H_est(:,:,2)= (randn(1,Nt)+j*randn(1,Nt)); 44 | H_est(:,:,2) = H_est(:,:,2)/norm(H_est(:,:,2))*sqrt(Nt); 45 | 46 | for i=1:M 47 | H_error_1(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e); 48 | H_error_2(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e); 49 | end 50 | 51 | [Feasibile_order1_RS] = RS_Rate_Region_feasibility(Rth,M,weights,H_est,H_error_1,H_error_2,SNR,tolerance); 52 | % change the order 53 | H_est1(:,:,1)=H_est(:,:,2); 54 | H_est1(:,:,2)=H_est(:,:,1); 55 | weights1(1)=weights(2); 56 | weights1(2)=weights(1); 57 | % different decoding order 58 | [Feasibile_order2_RS] = RS_Rate_Region_feasibility(Rth,M,weights1,H_est1,H_error_2,H_error_1,SNR,tolerance); 59 | 60 | Feasible_MULP = MULP_Rate_Region_feasibility(Rth, M,weights,H_est,H_error_1,H_error_2,SNR,tolerance); 61 | 62 | % caution! save data operation! read write! 63 | % load Feasibility_Jun1.mat 64 | if Feasibile_order1_RS == 0 && Feasibile_order2_RS == 0 65 | % Feasibility_rs = Feasibility_rs; 66 | else 67 | Feasibility_rs = Feasibility_rs + 1; 68 | end 69 | 70 | if Feasible_MULP == 0 71 | % Feasibility_mulp = Feasibility_mulp; 72 | else 73 | Feasibility_mulp = Feasibility_mulp + 1; 74 | end 75 | 76 | 77 | end % for i_test 78 | 79 | % caution! save data operation! read write! 80 | % File might be corrupt. 81 | load Feasibility_Jun15_Weights.mat 82 | Feasibility_rs = Feasibility_rs / NoTest; 83 | Feasibility_RS(i_weight,i_th) = Feasibility_rs; 84 | % approximate real percentage feasibility (probability) as percentage of feasbile channels in tests 85 | Feasibility_mulp = Feasibility_mulp/ NoTest; 86 | Feasibility_MULP(i_weight,i_th) = Feasibility_mulp; 87 | save('Feasibility_Jun15_Weights.mat','Feasibility_RS','Feasibility_MULP'); 88 | clear Feasibility_MULP 89 | clear Feasibility_RS 90 | % end % for i_th 91 | end % for i_SNR -------------------------------------------------------------------------------- /feasiblity/main.m: -------------------------------------------------------------------------------- 1 | % Xinyuan Xu 2 | % May 2020 3 | % feasibility of RS with partial CSIT with extra QoS contraints 4 | % main, the basic version: 5 | % fixed SNR, fixed weight pair 6 | % the only variable - Rth in array R_thresholds 7 | 8 | clear all; 9 | 10 | tolerance = 10^-2; 11 | Nt=4; 12 | Nr=1; 13 | SNRdB=[10 20 30]; 14 | % SNRdB = 30; 15 | weights = [1,1]; 16 | M = 10;% Realization of Sample Average Functions 17 | % M = 1000; 18 | 19 | % R_thresholds = [0.01, 0.1,0.5, 1:0.05:2,2.5,3]; 20 | % R_thresholds = [1:1:12]; 21 | % test input, to find roughly the region of interst 22 | R_thresholds = [1,1.5,2:0.1:6,6.5,7]; 23 | Feasibility_RS = zeros(length(SNRdB),length(R_thresholds)); 24 | Feasibility_MULP = zeros(length(SNRdB),length(R_thresholds)); 25 | NoTest = 10; % local 26 | % NoTest = 100; HPC 27 | 28 | for i_SNR = 1:3 29 | SNR = 10^(SNRdB(i_SNR)/10); 30 | P_t=SNR; %total transmission power, unit norm variance 31 | P_e=P_t^(-0.6); %error variance 32 | 33 | for i_th = 1:length(R_thresholds) % loop throught different threshold values 34 | % i_th 35 | Feasibility_rs = 0; % counter/register 36 | Feasibility_mulp = 0; 37 | Rth = R_thresholds(i_th); 38 | for i_test = 1:NoTest 39 | % test feasiblity with a lot of random channels 40 | H_est(:,:,1)= (randn(1,Nt)+j*randn(1,Nt)); 41 | H_est(:,:,1) = H_est(:,:,1)/norm(H_est(:,:,1))*sqrt(Nt); 42 | H_est(:,:,2)= (randn(1,Nt)+j*randn(1,Nt)); 43 | H_est(:,:,2) = H_est(:,:,2)/norm(H_est(:,:,2))*sqrt(Nt); 44 | 45 | for i=1:M 46 | H_error_1(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e); 47 | H_error_2(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e); 48 | end 49 | 50 | [Feasibile_order1_RS] = RS_Rate_Region_feasibility(Rth,M,weights,H_est,H_error_1,H_error_2,SNR,tolerance); 51 | % change the order 52 | H_est1(:,:,1)=H_est(:,:,2); 53 | H_est1(:,:,2)=H_est(:,:,1); 54 | weights1(1)=weights(2); 55 | weights1(2)=weights(1); 56 | % different decoding order 57 | [Feasibile_order2_RS] = RS_Rate_Region_feasibility(Rth,M,weights1,H_est1,H_error_2,H_error_1,SNR,tolerance); 58 | 59 | if Feasibile_order1_RS == 0 && Feasibile_order2_RS == 0 60 | % Feasibility_rs = Feasibility_rs; 61 | else 62 | Feasibility_rs = Feasibility_rs + 1; 63 | end 64 | 65 | Feasible_MULP = MULP_Rate_Region_feasibility(Rth, M,weights,H_est,H_error_1,H_error_2,SNR,tolerance); 66 | if Feasible_MULP == 0 67 | % Feasibility_mulp = Feasibility_mulp; 68 | else 69 | Feasibility_mulp = Feasibility_mulp + 1; 70 | end 71 | 72 | end % for i_test 73 | Feasibility_rs = Feasibility_rs / NoTest; 74 | Feasibility_RS(iSNR,i_th) = Feasibility_rs; 75 | % approximate real percentage feasibility (probability) as percentage of feasbile channels in tests 76 | Feasibility_mulp = Feasibility_mulp/ NoTest; 77 | Feasibility_MULP(iSNR,i_th) = Feasibility_mulp; 78 | end % for i_th 79 | end % for i_SNR 80 | save('Feasibilities_30dB', 'R_thresholds','Feasibility_RS','Feasibility_MULP'); 81 | 82 | % plot(R_thresholds, Feasibility_RS) 83 | % title('Feasibility, RS, 10dB, equal weights, 1000random test channels') 84 | % hold on 85 | % plot(R_thresholds, Feasibility_MULP) 86 | % title('Feasibility, NoRS, 10dB, equal weights, 1000random test channels') 87 | -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/comparision/MULP_rateRegion.m: -------------------------------------------------------------------------------- 1 | function Capacity = MULP_rateRegion(weights,H,SNRdB,tolerance) 2 | 3 | %------------------Algorithm WMMSE Algorithm in Paper: [Weighted 4 | %Sum-Rate Maximization using Weighted MMSE for MIMO-BC 5 | %Beamforming Design]------------------------------------------- 6 | 7 | 8 | SNR = 10^(SNRdB/10); 9 | 10 | [A_U,NT,N_user] = size(H); 11 | H_tot=[]; 12 | for i_user = 1:N_user 13 | H_tot = cat(1,H_tot,H(:,:,i_user)); %size: (A_U*N_user)*NT 14 | end 15 | 16 | P_k=SNR/N_user; 17 | for i_user=1:N_user 18 | h1=H(:,:,i_user); 19 | B(:,:,i_user)=h1'/norm(h1)*sqrt(P_k); 20 | end 21 | 22 | loop=1; 23 | cap_tot_past=100000; 24 | count=0; 25 | while(loop) 26 | 27 | %Step 2: MMSE Receiver Calculation 28 | for i_user =1 : N_user 29 | % B 30 | R(:,:,i_user)=eye(A_U); 31 | for j_user=1:N_user 32 | if j_user~=i_user 33 | R(:,:,i_user)=R(:,:,i_user)+H(:,:,i_user)*B(:,:,j_user)*B(:,:,j_user)'*H(:,:,i_user)'; 34 | end 35 | end 36 | A_MMSE{i_user}=B(:,:,i_user)'*H(:,:,i_user)'*inv(H(:,:,i_user)*B(:,:,i_user)*B(:,:,i_user)'*H(:,:,i_user)'+R(:,:,i_user)); 37 | end 38 | A_MMSE_blkdiag = blkdiag(A_MMSE{:}); %size: (A_U*N_user)*(A_U*N_user) 39 | 40 | %Step 3: MSE Weight 41 | for i_user=1:N_user 42 | E(:,:,i_user)=inv(eye(A_U)+B(:,:,i_user)'*H(:,:,i_user)'*inv(R(:,:,i_user))*H(:,:,i_user)*B(:,:,i_user)); 43 | W{i_user}=weights(i_user)*inv(E(:,:,i_user)); 44 | end 45 | W_blkdiag = blkdiag(W{:}); %size: (A_U*N_user)*(A_U*N_user) 46 | 47 | %Step 4: WMMSE transmit filter 48 | 49 | B_bar=inv(H_tot'*A_MMSE_blkdiag'*W_blkdiag*A_MMSE_blkdiag*H_tot+trace(W_blkdiag*A_MMSE_blkdiag*A_MMSE_blkdiag')*eye(NT)/SNR)*H_tot'*A_MMSE_blkdiag'*W_blkdiag; 50 | 51 | b=sqrt(SNR/trace(B_bar*B_bar')); 52 | B_MMSE=b*B_bar; %size: NT*(A_U*N_user) 53 | for i_user=1:N_user 54 | B(:,:,i_user)=B_MMSE(:,(i_user-1)*A_U+1:i_user*A_U); 55 | end 56 | 57 | 58 | %loop determination 59 | for i_user=1:N_user 60 | R(:,:,i_user)=eye(A_U); 61 | for j_user=1:N_user 62 | if j_user~=i_user 63 | R(:,:,i_user)=R(:,:,i_user)+H(:,:,i_user)*B(:,:,j_user)*B(:,:,j_user)'*H(:,:,i_user)'; 64 | end 65 | end 66 | E(:,:,i_user)=inv(eye(A_U)+B(:,:,i_user)'*H(:,:,i_user)'*inv(R(:,:,i_user))*H(:,:,i_user)*B(:,:,i_user)); 67 | Capacity_loop(i_user)=real(log2(det(inv(E(:,:,i_user))))); 68 | end 69 | cap_tot=sum(Capacity_loop); 70 | if abs(cap_tot-cap_tot_past)=2000 78 | break; 79 | end 80 | end 81 | 82 | %Calculate the rate of each UE 83 | % trace(B(:,:,1)*B(:,:,1)')+trace(B(:,:,2)*B(:,:,2)') 84 | % SNR 85 | 86 | for i_user=1:N_user 87 | R(:,:,i_user)=eye(A_U); 88 | for j_user=1:N_user 89 | if j_user~=i_user 90 | R(:,:,i_user)=R(:,:,i_user)+H(:,:,i_user)*B(:,:,j_user)*B(:,:,j_user)'*H(:,:,i_user)'; 91 | end 92 | end 93 | E(:,:,i_user)=inv(eye(A_U)+B(:,:,i_user)'*H(:,:,i_user)'*inv(R(:,:,i_user))*H(:,:,i_user)*B(:,:,i_user)); 94 | Capacity(i_user)=real(log2(det(inv(E(:,:,i_user))))); 95 | end 96 | 97 | 98 | 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /feasiblity/main_feasibility1.m: -------------------------------------------------------------------------------- 1 | % try to reduce computation time needed 2 | cvx_setup; 3 | LASTN=maxNumCompThreads(1); 4 | array_index=getenv('PBS_ARRAY_INDEX'); 5 | i_theta=str2num(array_index); 6 | i1 = str2num(array_index); 7 | rng(i1); 8 | 9 | % Xinyuan Xu 10 | % May 2020 11 | % feasibility of RS with partial CSIT with extra QoS contraints 12 | % main, the basic version: 13 | % fixed SNR, fixed weight pair 14 | % the only variable - Rth in array R_thresholds 15 | 16 | clear all; 17 | 18 | tolerance = 10^-2; 19 | Nt=4; 20 | Nr=1; 21 | SNRdB=[10 20 30]; 22 | % SNRdB = 30; 23 | weights = [1,1]; 24 | % Realization of Sample Average Functions 25 | M = 1000; 26 | 27 | % R_thresholds = [1:1:12]; 28 | % test input, to find roughly the region of interst 29 | R_thresholds = [1.5,2:0.25:6,6.5,7]; 30 | Feasibility_RS = zeros(length(SNRdB),length(R_thresholds)); 31 | Feasibility_MULP = zeros(length(SNRdB),length(R_thresholds)); 32 | % NoTest = 10; % local 33 | NoTest = 100; %HPC 34 | 35 | for i_SNR = 1:3 36 | SNR = 10^(SNRdB(i_SNR)/10); 37 | P_t=SNR; %total transmission power, unit norm variance 38 | P_e=P_t^(-0.6); %error variance 39 | 40 | for i_th = 1:length(R_thresholds) % loop throught different threshold values 41 | % i_th 42 | Feasibility_rs = 0; % counter/register 43 | Feasibility_mulp = 0; 44 | Rth = R_thresholds(i_th); 45 | for i_test = 1:NoTest 46 | % test feasiblity with a lot of random channels 47 | H_est(:,:,1)= (randn(1,Nt)+j*randn(1,Nt)); 48 | H_est(:,:,1) = H_est(:,:,1)/norm(H_est(:,:,1))*sqrt(Nt); 49 | H_est(:,:,2)= (randn(1,Nt)+j*randn(1,Nt)); 50 | H_est(:,:,2) = H_est(:,:,2)/norm(H_est(:,:,2))*sqrt(Nt); 51 | 52 | for i=1:M 53 | H_error_1(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e); 54 | H_error_2(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e); 55 | end 56 | 57 | [Feasibile_order1_RS] = RS_Rate_Region_feasibility(Rth,M,weights,H_est,H_error_1,H_error_2,SNR,tolerance); 58 | % change the order 59 | H_est1(:,:,1)=H_est(:,:,2); 60 | H_est1(:,:,2)=H_est(:,:,1); 61 | weights1(1)=weights(2); 62 | weights1(2)=weights(1); 63 | % different decoding order 64 | [Feasibile_order2_RS] = RS_Rate_Region_feasibility(Rth,M,weights1,H_est1,H_error_2,H_error_1,SNR,tolerance); 65 | 66 | if Feasibile_order1_RS == 0 && Feasibile_order2_RS == 0 67 | % Feasibility_rs = Feasibility_rs; 68 | else 69 | Feasibility_rs = Feasibility_rs + 1; 70 | end 71 | 72 | Feasible_MULP = MULP_Rate_Region_feasibility(Rth, M,weights,H_est,H_error_1,H_error_2,SNR,tolerance); 73 | if Feasible_MULP == 0 74 | % Feasibility_mulp = Feasibility_mulp; 75 | else 76 | Feasibility_mulp = Feasibility_mulp + 1; 77 | end 78 | 79 | end % for i_test 80 | Feasibility_rs = Feasibility_rs / NoTest; 81 | Feasibility_RS(i_SNR,i_th) = Feasibility_rs; 82 | % approximate real percentage feasibility (probability) as percentage of feasbile channels in tests 83 | Feasibility_mulp = Feasibility_mulp/ NoTest; 84 | Feasibility_MULP(i_SNR,i_th) = Feasibility_mulp; 85 | end % for i_th 86 | end % for i_SNR 87 | save('Feasibilities_EqualWeight_31May', 'R_thresholds','Feasibility_RS','Feasibility_MULP'); 88 | 89 | % plot(R_thresholds, Feasibility_RS) 90 | % title('Feasibility, RS, 10dB, equal weights, 1000random test channels') 91 | % hold on 92 | % plot(R_thresholds, Feasibility_MULP) 93 | % title('Feasibility, NoRS, 10dB, equal weights, 1000random test channels') 94 | -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/EURASIP JWCN/MULP_rateRegion.m: -------------------------------------------------------------------------------- 1 | function Capacity = WMMSE_rateRegion(weights,H,SNRdB,tolerance) 2 | 3 | %------------------Algorithm WMMSE Algorithm in Paper: [Weighted 4 | %Sum-Rate Maximization using Weighted MMSE for MIMO-BC 5 | %Beamforming Design]------------------------------------------- 6 | 7 | 8 | SNR = 10^(SNRdB/10); 9 | 10 | [A_U,NT,N_user] = size(H); 11 | H_tot=[]; 12 | for i_user = 1:N_user 13 | H_tot = cat(1,H_tot,H(:,:,i_user)); %size: (A_U*N_user)*NT 14 | end 15 | 16 | %Step 1: initialization B 17 | P_k=SNR/N_user; 18 | 19 | for i_user=1:N_user 20 | h1=H(:,:,i_user); 21 | B(:,:,i_user)=h1'/norm(h1)*sqrt(P_k); 22 | end 23 | 24 | loop=1; 25 | cap_tot_past=100000; 26 | count=0; 27 | while(loop) 28 | 29 | %Step 2: MMSE Receiver Calculation 30 | for i_user =1 : N_user 31 | % B 32 | R(:,:,i_user)=eye(A_U); 33 | for j_user=1:N_user 34 | if j_user~=i_user 35 | R(:,:,i_user)=R(:,:,i_user)+H(:,:,i_user)*B(:,:,j_user)*B(:,:,j_user)'*H(:,:,i_user)'; 36 | end 37 | end 38 | A_MMSE{i_user}=B(:,:,i_user)'*H(:,:,i_user)'*inv(H(:,:,i_user)*B(:,:,i_user)*B(:,:,i_user)'*H(:,:,i_user)'+R(:,:,i_user)); 39 | end 40 | A_MMSE_blkdiag = blkdiag(A_MMSE{:}); %size: (A_U*N_user)*(A_U*N_user) 41 | 42 | %Step 3: MSE Weight 43 | for i_user=1:N_user 44 | E(:,:,i_user)=inv(eye(A_U)+B(:,:,i_user)'*H(:,:,i_user)'*inv(R(:,:,i_user))*H(:,:,i_user)*B(:,:,i_user)); 45 | W{i_user}=weights(i_user)*inv(E(:,:,i_user)); 46 | end 47 | W_blkdiag = blkdiag(W{:}); %size: (A_U*N_user)*(A_U*N_user) 48 | 49 | %Step 4: WMMSE transmit filter 50 | 51 | B_bar=inv(H_tot'*A_MMSE_blkdiag'*W_blkdiag*A_MMSE_blkdiag*H_tot+trace(W_blkdiag*A_MMSE_blkdiag*A_MMSE_blkdiag')*eye(NT)/SNR)*H_tot'*A_MMSE_blkdiag'*W_blkdiag; 52 | 53 | b=sqrt(SNR/trace(B_bar*B_bar')); 54 | B_MMSE=b*B_bar; %size: NT*(A_U*N_user) 55 | for i_user=1:N_user 56 | B(:,:,i_user)=B_MMSE(:,(i_user-1)*A_U+1:i_user*A_U); 57 | end 58 | 59 | 60 | %loop determination 61 | for i_user=1:N_user 62 | R(:,:,i_user)=eye(A_U); 63 | for j_user=1:N_user 64 | if j_user~=i_user 65 | R(:,:,i_user)=R(:,:,i_user)+H(:,:,i_user)*B(:,:,j_user)*B(:,:,j_user)'*H(:,:,i_user)'; 66 | end 67 | end 68 | E(:,:,i_user)=inv(eye(A_U)+B(:,:,i_user)'*H(:,:,i_user)'*inv(R(:,:,i_user))*H(:,:,i_user)*B(:,:,i_user)); 69 | Capacity_loop(i_user)=real(log2(det(inv(E(:,:,i_user))))); 70 | end 71 | cap_tot=sum(Capacity_loop); 72 | if abs(cap_tot-cap_tot_past)=2000 80 | break; 81 | end 82 | end 83 | 84 | %Calculate the capacity of each UE 85 | % trace(B(:,:,1)*B(:,:,1)')+trace(B(:,:,2)*B(:,:,2)') 86 | % SNR 87 | 88 | for i_user=1:N_user 89 | R(:,:,i_user)=eye(A_U); 90 | for j_user=1:N_user 91 | if j_user~=i_user 92 | R(:,:,i_user)=R(:,:,i_user)+H(:,:,i_user)*B(:,:,j_user)*B(:,:,j_user)'*H(:,:,i_user)'; 93 | end 94 | end 95 | E(:,:,i_user)=inv(eye(A_U)+B(:,:,i_user)'*H(:,:,i_user)'*inv(R(:,:,i_user))*H(:,:,i_user)*B(:,:,i_user)); 96 | Capacity(i_user)=real(log2(det(inv(E(:,:,i_user))))); 97 | end 98 | 99 | 100 | 101 | 102 | 103 | 104 | -------------------------------------------------------------------------------- /feasiblity/MULP_Rate_Region_feasibility.m: -------------------------------------------------------------------------------- 1 | function Feasible = MULP_Rate_Region_feasibility(Rth, M,weights,H_est,H_error_1,H_error_2,SNR,tolerance) 2 | 3 | % The algorithm used is from papers: 4 | % Weighted Sum-Rate Maximization using Weighted MMSE for MIMO-BC 5 | % Beamforming Design, 2008 TWC, Christensen, Agarval, Carvalho, Cioffi 6 | % "Sum-Rate Maximization for Linearly Precoded Downlink Multiuser MISO Systems with Partial CSIT: A Rate-Splitting Approach" 7 | % by Hamdi Joudeh and Bruno Clerks 8 | 9 | % % % test only 10 | % Rth = 2.5; 11 | % weights = [1,1]; 12 | % SNR = 10; 13 | 14 | [Nr,Nt,K] = size(H_est); 15 | Pk = SNR/K; 16 | R_1 = zeros(1,M); R_2 = zeros(1,M); 17 | p1 = H_est(:,:,1)'/norm(H_est(:,:,1))*sqrt(Pk); 18 | p2 = H_est(:,:,2)'/norm(H_est(:,:,2))*sqrt(Pk); 19 | 20 | feasible = zeros(1,2); 21 | 22 | for i=1:M 23 | H_1(:,:,i) = H_est(:,:,1)+H_error_1(:,:,i); 24 | H_2(:,:,i) = H_est(:,:,2)+H_error_2(:,:,i); 25 | end 26 | 27 | for method = 1:2 % loop through 2 different initializaiton methods 28 | % no more precoder for common message 29 | % 2 variation of initialzation for private parts 30 | % MRC->method_1 and ZF->method_3 31 | if method == 2 % fixing the index problem 32 | [p1,p2,pc] = initialize_precoders(H_est, SNR, 3); 33 | else 34 | [p1,p2,pc] = initialize_precoders(H_est, SNR, 1); 35 | end 36 | 37 | 38 | loop = 1; 39 | WMSE_old = 100; 40 | count = 0; 41 | while(loop) 42 | 43 | t1 = 0; t2 = 0; 44 | psi_1 = 0; psi_2 = 0; 45 | f1 = zeros(Nt,Nr); f2 = zeros(Nt,Nr); 46 | v1 = 0; v2 = 0; 47 | U1 = 0; U2 = 0; 48 | 49 | for i=1:M 50 | h1 = H_1(:,:,i); h2 = H_2(:,:,i); 51 | I1 = abs(h1*p2)^2+1; I2 = abs(h2*p1)^2+1; 52 | T1 = abs(h1*p1)^2+I1; T2 = abs(h2*p2)^2+I2; 53 | 54 | E1 = inv(T1)*I1; E2 = inv(T2)*I2; 55 | g1 = inv(T1)*p1'*h1'; g2 = inv(T2)*p2'*h2'; 56 | u1 = inv(E1); u2 = inv(E2); 57 | 58 | U1 = U1+u1; U2 = U2+u2; 59 | t1 = t1+u1*abs(g1)^2; t2 = t2+u2*abs(g2)^2; 60 | psi_1 = psi_1+(u1*abs(g1)^2)*h1'*h1; 61 | psi_2 = psi_2+(u2*abs(g2)^2)*h2'*h2; 62 | f1 = f1+u1*h1'*g1'; f2 = f2+u2*h2'*g2'; 63 | v1 = v1+log2(u1); v2 = v2+log2(u2); 64 | end 65 | 66 | % SAFs 67 | U1=U1./M; U2=U2./M; 68 | t1=t1./M; t2=t2./M; 69 | psi_1=psi_1./M; psi_2=psi_2./M; 70 | f1=f1./M; f2=f2./M; 71 | v1=v1./M; v2=v2./M; 72 | 73 | % cvx optimization 74 | % [WMSE,p1,p2]=MULP_update_P(M,weights,H_est,SNR,U1,U2,t1,t2,psi_1,psi_2,f1,f2,v1,v2); 75 | [feasible(method),WMSE,p1,p2]=MULP_update_P_feasibility(Rth,weights,H_est,SNR,U1,U2,t1,t2,psi_1,psi_2,f1,f2,v1,v2); 76 | 77 | if feasible(method) == 0 78 | loop = 0; 79 | break; % while 80 | end 81 | 82 | if abs((WMSE-WMSE_old)/WMSE_old)<=tolerance 83 | loop=0; 84 | else 85 | WMSE_old=WMSE; 86 | count = count+1; 87 | end 88 | 89 | if count >= 500 90 | loop=0; 91 | end 92 | 93 | end 94 | end 95 | 96 | if feasible == zeros(1,2) 97 | Feasible = 0; 98 | else 99 | Feasible = 1; 100 | end 101 | -------------------------------------------------------------------------------- /feasiblity/main_feasibility0.m: -------------------------------------------------------------------------------- 1 | clear all; 2 | cvx_setup; 3 | LASTN=maxNumCompThreads(1); 4 | array_index=getenv('PBS_ARRAY_INDEX'); 5 | i_th=str2num(array_index); 6 | i1 = str2num(array_index); 7 | rng(i1); 8 | 9 | % Xinyuan Xu 10 | % May 2020 11 | % feasibility of RS with partial CSIT with extra QoS contraints 12 | % main, the basic version: 13 | % fixed SNR, fixed weight pair 14 | % the only variable - Rth in array R_thresholds 15 | 16 | tolerance = 10^-3; 17 | Nt=4; 18 | Nr=1; 19 | SNRdB=[10 20 30]; 20 | % SNRdB = 30; 21 | weights = [1,1]; 22 | % Realization of Sample Average Functions 23 | M = 1000; 24 | 25 | % R_thresholds = [1:1:12]; 26 | % test input, to find roughly the region of interst 27 | R_thresholds = [1,1.5,2:0.1:6,6.5,7]; 28 | % Feasibility_RS = zeros(length(SNRdB),length(R_thresholds)); 29 | % Feasibility_MULP = zeros(length(SNRdB),length(R_thresholds)); 30 | % NoTest = 10; % local 31 | NoTest = 100; %HPC 32 | 33 | for i_SNR = 1:3 34 | SNR = 10^(SNRdB(i_SNR)/10); 35 | P_t=SNR; %total transmission power, unit norm variance 36 | P_e=P_t^(-0.6); %error variance 37 | 38 | % for i_th = 1:length(R_thresholds) % loop throught different threshold values 39 | % i_threshold 40 | Feasibility_rs = 0; % counter/register 41 | Feasibility_mulp = 0; 42 | i_th 43 | Rth = R_thresholds(i_th); 44 | for i_test = 1:NoTest 45 | % use batch processing in HPC to replace this loop 46 | % test feasiblity with a lot of random channels 47 | H_est(:,:,1)= (randn(1,Nt)+j*randn(1,Nt)); 48 | H_est(:,:,1) = H_est(:,:,1)/norm(H_est(:,:,1))*sqrt(Nt); 49 | H_est(:,:,2)= (randn(1,Nt)+j*randn(1,Nt)); 50 | H_est(:,:,2) = H_est(:,:,2)/norm(H_est(:,:,2))*sqrt(Nt); 51 | 52 | for i=1:M 53 | H_error_1(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e); 54 | H_error_2(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e); 55 | end 56 | 57 | [Feasibile_order1_RS] = RS_Rate_Region_feasibility(Rth,M,weights,H_est,H_error_1,H_error_2,SNR,tolerance); 58 | % change the order 59 | H_est1(:,:,1)=H_est(:,:,2); 60 | H_est1(:,:,2)=H_est(:,:,1); 61 | weights1(1)=weights(2); 62 | weights1(2)=weights(1); 63 | % different decoding order 64 | [Feasibile_order2_RS] = RS_Rate_Region_feasibility(Rth,M,weights1,H_est1,H_error_2,H_error_1,SNR,tolerance); 65 | 66 | Feasible_MULP = MULP_Rate_Region_feasibility(Rth, M,weights,H_est,H_error_1,H_error_2,SNR,tolerance); 67 | 68 | % caution! save data operation! read write! 69 | % load Feasibility_Jun1.mat 70 | if Feasibile_order1_RS == 0 && Feasibile_order2_RS == 0 71 | % Feasibility_rs = Feasibility_rs; 72 | else 73 | Feasibility_rs = Feasibility_rs + 1; 74 | end 75 | 76 | if Feasible_MULP == 0 77 | % Feasibility_mulp = Feasibility_mulp; 78 | else 79 | Feasibility_mulp = Feasibility_mulp + 1; 80 | end 81 | % save('Feasibility_Jun1.mat','Feasibility_RS','Feasibility_MULP'); 82 | % clear Feasibility_MULP 83 | % clear Feasibility_RS 84 | 85 | 86 | end % for i_test 87 | 88 | % caution! save data operation! read write! 89 | % File might be corrupt. 90 | load Feasibility_Jun1.mat 91 | Feasibility_rs = Feasibility_rs / NoTest; 92 | Feasibility_RS(i_SNR,i_th) = Feasibility_rs; 93 | % approximate real percentage feasibility (probability) as percentage of feasbile channels in tests 94 | Feasibility_mulp = Feasibility_mulp/ NoTest; 95 | Feasibility_MULP(i_SNR,i_th) = Feasibility_mulp; 96 | save('Feasibility_Jun1.mat','Feasibility_RS','Feasibility_MULP'); 97 | clear Feasibility_MULP 98 | clear Feasibility_RS 99 | % end % for i_th 100 | end % for i_SNR 101 | % save('Feasibilities_EqualWeight_30May2200', 'R_thresholds','Feasibility_RS','Feasibility_MULP'); 102 | 103 | % plot(R_thresholds, Feasibility_RS) 104 | % title('Feasibility, RS, 10dB, equal weights, 1000random test channels') 105 | % hold on 106 | % plot(R_thresholds, Feasibility_MULP) 107 | % title('Feasibility, NoRS, 10dB, equal weights, 1000random test channels') 108 | -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/WSR_WMMSE_Mar2.m: -------------------------------------------------------------------------------- 1 | clear all 2 | P = 4; % transmit antennas 3 | K = 2; % two users 4 | Q =2; % each user has two antennas 5 | 6 | SNRdB =[-10,0,10,20]; 7 | 8 | weight=[-3,-1:0.05:1,3]; 9 | u2=10.^weight; 10 | u1=ones(1,length(u2)); 11 | rate1=zeros(length(u2),1); 12 | rate2=zeros(length(u2),1); 13 | bias = 1; 14 | % bias = 1/sqrt(2); 15 | 16 | theta = pi/3; 17 | 18 | for s = 1:length(SNRdB) 19 | Etx = db2pow(SNRdB(s)) 20 | for i=1:length(u2) 21 | R1_average = 0; 22 | R2_average = 0; 23 | 24 | iteration = 1; 25 | for repetition=1:iteration 26 | H(:,:,1)=[1,1,1,1;1,1,1,1]; 27 | H(:,:,2)=[1, exp(1i*1*theta),exp(1i*2*theta),exp(1i*3*theta);1, exp(1i*1*theta),exp(1i*2*theta),exp(1i*3*theta)]*bias; 28 | % H(:,:,1)=(1/sqrt(2))*(randn(Q,P)+1i*randn(Q,P)); 29 | % H(:,:,2)=(1/sqrt(2))*(randn(Q,P)+1i*randn(Q,P)); 30 | % one random pair of channel realization 31 | 32 | %initialize transmit filter for the 2 user 33 | B(:,:,1)=H(:,:,1)'; 34 | B(:,:,2)=H(:,:,2)'; 35 | 36 | % energy of current random transmit filter 37 | Etf = trace(B(:,:,1)*B(:,:,1)')+trace(B(:,:,2)*B(:,:,2)'); 38 | 39 | % imagining about this normalization 40 | B(:,:,1)= B(:,:,1)./sqrt( Etf ).*sqrt(Etx); 41 | B(:,:,2)=B(:,:,2)./sqrt( Etf ).*sqrt(Etx); 42 | Etf = trace(B(:,:,1)*B(:,:,1)')+trace(B(:,:,2)*B(:,:,2)'); 43 | 44 | % this threshold probably slows things down 45 | % tolerence = 10^-6; 46 | tolerence = 10^-6; 47 | 48 | % R1 = 1; R2 = 1; 49 | diff = 1; 50 | WSR = 0; 51 | counter = 0 ; 52 | 53 | while (diff > tolerence) 54 | 55 | % (6) effective noise covariance matrix 56 | % R = eye(Q,Q)+H(:,:,1)*B(:,:,2)*B(:,:,2)'*H(:,:,1)'+H(:,:,2)*B(:,:,1)*B(:,:,1)'*H(:,:,2)'; 57 | R1 = eye(Q,Q)+H(:,:,1)*B(:,:,2)*B(:,:,2)'*H(:,:,1)'; 58 | R2 = eye(Q,Q)+H(:,:,2)*B(:,:,1)*B(:,:,1)'*H(:,:,2)'; 59 | 60 | 61 | % (7) MMSE receive filter 62 | A(:,:,1) = B(:,:,1)'*H(:,:,1)'*inv(H(:,:,1)*B(:,:,1)*B(:,:,1)'*H(:,:,1)'+R1); 63 | A(:,:,2) = B(:,:,2)'*H(:,:,2)'*inv(H(:,:,2)*B(:,:,2)*B(:,:,2)'*H(:,:,2)'+R2); 64 | 65 | % (8) MMSE-matrix 66 | E(:,:,1)= inv( eye(Q,Q)+B(:,:,1)'*H(:,:,1)'*inv(R1)*H(:,:,1)*B(:,:,1) ); 67 | E(:,:,2)= inv( eye(Q,Q)+B(:,:,2)'*H(:,:,2)'*inv(R2)*H(:,:,2)*B(:,:,2) ); 68 | 69 | % (21) weight matrix of user 70 | W(:,:,1) = u1(i)*inv(E(:,:,1)); 71 | W(:,:,2) = u2(i)*inv(E(:,:,2)); 72 | 73 | % is there easier way to express these block-diagonal matrices? 74 | W_diag = [W(:,:,1),zeros(2,2);zeros(2,2),W(:,:,2)]; 75 | A_diag = [A(:,:,1),zeros(2,2);zeros(2,2),A(:,:,2)]; 76 | H_stacked = [H(:,:,1); H(:,:,2)]; 77 | 78 | % (22) 79 | % Etf = trace(B(:,:,1)*B(:,:,1)')+trace(B(:,:,2)*B(:,:,2)'); 80 | B_bar = H_stacked'*A_diag'*W_diag*A_diag*H_stacked; 81 | B_bar = B_bar+trace(W_diag*(A_diag*(A_diag')))/Etx*eye(size(B_bar)); 82 | B_bar = inv(B_bar)*H_stacked'*A_diag'*W_diag; 83 | 84 | % (23) 85 | b = sqrt(Etx/trace(B_bar*B_bar')); 86 | B_WMMSE = b *B_bar; 87 | B(:,:,1)=B_WMMSE(:,1:2); 88 | B(:,:,2)=B_WMMSE(:,3:4); 89 | Etf = trace(B(:,:,1)*B(:,:,1)')+trace(B(:,:,2)*B(:,:,2)'); 90 | 91 | R1 = abs(log2(det(inv(E(:,:,1))))); 92 | R2 = abs(log2(det(inv(E(:,:,2))))); 93 | 94 | WSR_new = u1(i)*R1+u2(i)*R2; 95 | 96 | diff = abs(WSR_new/WSR-1); 97 | WSR = WSR_new; 98 | 99 | % counter = counter +1; % sometimes the code do not converge 100 | % if counter >= 2000 101 | % break 102 | % end 103 | end 104 | % if counter~=2000 105 | % R1_average = R1_average + R1/100; 106 | % R2_average = R2_average + R2/100; 107 | % end 108 | R1_average = R1_average + R1/iteration; 109 | R2_average = R2_average + R2/iteration; 110 | end 111 | [i, R1_average, R2_average] 112 | rate1(i) = R1_average; 113 | rate2(i) = R2_average; 114 | end 115 | 116 | figure 117 | % plot(rate1,rate2,'*') 118 | k = convhull(rate1, rate2); 119 | x1=rate1(k); 120 | y1=rate2(k); 121 | xx = floor(x1.*10^5)./(10^5); 122 | ind = find(xx==0); 123 | [l,ind_ini]= max(x1); 124 | plot(x1(ind_ini(1):ind(1)),y1(ind_ini(1):ind(1)),'bo-') 125 | title("WSR-MMSE,"+SNRdB(s)+"dB") 126 | xlabel('R1') 127 | ylabel('R2') 128 | end 129 | 130 | 131 | 132 | 133 | -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/EURASIP JWCN/DPC_rateRegion.m: -------------------------------------------------------------------------------- 1 | function Capacity = DPC_rateRegion(weights,H,SNRdB,tolerance) 2 | 3 | %------------------Algorithm proposed in Paper: Downlink Capacity 4 | %Evaluation of Cellular Networks With Know-Interference Cancellation 5 | %(Algorithm 1) 6 | 7 | 8 | 9 | SNR = 10^(SNRdB/10); 10 | 11 | [NT,A_U,N_user] = size(H) ; 12 | 13 | %The algorithm is based on descend weights sequence of UEs 14 | weights=weights(:); 15 | [sortedWeights, index_UE]=sort(weights,'descend'); 16 | H = H(:,:,index_UE); %sorted H according to descend weights 17 | 18 | %Step 1: Q initialization 19 | Q = zeros(A_U,A_U,N_user); 20 | 21 | 22 | gradient = zeros(A_U,A_U,N_user); %initialized gradient 23 | 24 | 25 | loop=1; 26 | cap_tot_past=0; 27 | count=0; 28 | %The algorithm iterates "Iterations" times to make Q converges 29 | while(loop) 30 | 31 | %covariance of each UE 32 | for i_user=1:N_user 33 | HQH(:,:,i_user)=H(:,:,i_user)*Q(:,:,i_user)*H(:,:,i_user)'; 34 | end 35 | 36 | % Calculate the gradient of each UE on Q_i 37 | for i_user=1:N_user 38 | gradient_i_part = zeros(A_U,A_U); 39 | for j_user=i_user:N_user-1 40 | gradient_i_part = gradient_i_part+(sortedWeights(j_user)-sortedWeights(j_user+1))*... 41 | (H(:,:,i_user)'*inv( eye(NT)+sum(HQH(:,:,1:j_user),3))*H(:,:,i_user)); 42 | end 43 | gradient(:,:,i_user) = gradient_i_part + sortedWeights(N_user)*H(:,:,i_user)'*inv(eye(NT)+sum(HQH,3))*H(:,:,i_user); 44 | end 45 | 46 | %Step 2 & Step 3: principal eigenvector and the corresponding principal 47 | %eigenvalues of the gradient 48 | 49 | for i_user=1:N_user 50 | [V,D]=eig(gradient(:,:,i_user)); 51 | [eigenValue(i_user) index_principal] = max(diag(D)); 52 | eigenVector(:,i_user)=V(:,index_principal); 53 | end 54 | 55 | %Step 4: optimal user selection 56 | [~, i_opt_UE]=max(eigenValue); 57 | 58 | 59 | % Step 5: calculating t, bisection or Matlab optimization toolbox 60 | % Using MATLAB optimization toolbox, reference from 'J. Lee and N. Jindal, 61 | %"Symmetric capacity of a downlink MIMO channel," IEEE ISIT 2006.' 62 | 63 | obj_t = @(t) -obj_vvh(t,i_opt_UE,Q,sortedWeights,H,SNR,eigenVector(:,i_opt_UE)); 64 | t_opt=fminbnd(obj_t,0,1); 65 | 66 | % Update Q 67 | for i_user=1:N_user 68 | if (i_user==i_opt_UE) 69 | Q(:,:,i_user)=t_opt*Q(:,:,i_user)+(1-t_opt)*SNR*eigenVector(:,i_user)*eigenVector(:,i_user)'; 70 | else 71 | Q(:,:,i_user)=t_opt*Q(:,:,i_user); 72 | end 73 | end 74 | 75 | for i_user=1:N_user 76 | info_UE(:,:,i_user) = eye(NT); 77 | for j_user=1:i_user 78 | info_UE(:,:,i_user) = info_UE(:,:,i_user) + H(:,:,j_user)*Q(:,:,j_user)*H(:,:,j_user)'; 79 | end 80 | end 81 | 82 | Capacity = zeros(N_user,1); 83 | Capacity(index_UE(1)) = log2(real(det(info_UE(:,:,1)))); 84 | for i_user=2:N_user 85 | Capacity(index_UE(i_user)) = log2(real(det(info_UE(:,:,i_user)))/real(det(info_UE(:,:,i_user-1)))); 86 | end 87 | 88 | cap_tot_1=sum(Capacity); 89 | if abs(cap_tot_1-cap_tot_past)<=tolerance 90 | loop=0; 91 | else 92 | cap_tot_past=cap_tot_1; 93 | count=count+1; 94 | end 95 | 96 | if count>=200 97 | break; 98 | end 99 | 100 | end 101 | 102 | % Calculate R 103 | for i_user=1:N_user 104 | info_UE(:,:,i_user) = eye(NT); 105 | for j_user=1:i_user 106 | info_UE(:,:,i_user) = info_UE(:,:,i_user) + H(:,:,j_user)*Q(:,:,j_user)*H(:,:,j_user)'; 107 | end 108 | end 109 | 110 | Capacity = zeros(N_user,1); 111 | Capacity(index_UE(1)) = log2(real(det(info_UE(:,:,1)))); 112 | for i_user=2:N_user 113 | Capacity(index_UE(i_user)) = log2(real(det(info_UE(:,:,i_user)))/real(det(info_UE(:,:,i_user-1)))); 114 | end 115 | 116 | 117 | % 118 | % Sub-function 119 | % 120 | function f=obj_vvh(t,i_opt_UE,Q,weights,H,SNR,v); 121 | 122 | [NT,A_U,N_user] = size(H); 123 | 124 | for i_user=1:N_user 125 | if(i_user==i_opt_UE) 126 | Q(:,:,i_user)=t*Q(:,:,i_user)+(1-t)*SNR*v*v'; 127 | else 128 | Q(:,:,i_user)=t*Q(:,:,i_user); 129 | end; 130 | end; 131 | 132 | for i_user=1:N_user 133 | HQH(:,:,i_user)=H(:,:,i_user)*Q(:,:,i_user)*H(:,:,i_user)'; 134 | end; 135 | 136 | cap_part1=0; 137 | for i_user=1:N_user-1 138 | cap_part1=cap_part1+(weights(i_user)-weights(i_user+1))*log2(det(eye(NT)+sum(HQH(:,:,1:i_user),3))); 139 | end; 140 | 141 | cap_part2=weights(N_user)*log2(det(eye(NT)+sum(HQH(:,:,1:N_user),3))); 142 | 143 | f=cap_part1+cap_part2; -------------------------------------------------------------------------------- /Partial CSIT/main.m: -------------------------------------------------------------------------------- 1 | % This code is to reproduced Figure 8 of 2 | % "Sum-Rate Maximization for Linearly Precoded Downlink Multiuser MISO Systems with Partial CSIT: A Rate-Splitting Approach" 3 | % by Hamdi Joudeh and Bruno Clerks 4 | 5 | % Xinyuan Xu 6 | % 1st written: April 2020 7 | % revised: 2020 May 29 8 | 9 | % code templete for main 10 | % different job variation in main{x} for different submission to HPC. 11 | 12 | clear all; 13 | tolerance = 10^-4; 14 | Nt = 4; 15 | Nr = 1; 16 | SNRdB = [10 20 30]; 17 | theta = pi/3; 18 | M = 1000; 19 | % Realization of Sample Average Functions 20 | bias = 1; 21 | weight = [-3 -1:0.05:1 3]; 22 | u2 = 10.^weight; 23 | u1 = ones(1,length(u2)); 24 | 25 | H_est(:,:,1) = [1 1 1 1]; 26 | H_est(:,:,2) = [1 exp(1i*theta) exp(1i*2*theta) exp(1i*3*theta)]*bias; 27 | 28 | C_NoRs_user1 = zeros(length(SNRdB), length(weight)); 29 | C_NoRs_user2 = zeros(length(SNRdB), length(weight)); 30 | 31 | for i_SNRdB=1:length(SNRdB) 32 | 33 | %Channel error 34 | SNR = 10^(SNRdB(i_SNRdB)/10); 35 | P_t=SNR; %total transmission power, unit norm variance 36 | P_e=P_t^(-0.6); %error variance 37 | 38 | for i=1:M 39 | H_error_1(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e); 40 | H_error_2(:,:,i)=((randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2))*sqrt(P_e)*bias; 41 | end 42 | 43 | for i_weight=1:length(u1) 44 | % SNRdB(i_SNRdB) 45 | % i_weight 46 | weights=[u1(i_weight),u2(i_weight)]; 47 | 48 | [C_RS_order1,Pc1] = RS_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNR,tolerance) 49 | % change the order 50 | H_est1(:,:,1)=H_est(:,:,2); 51 | H_est1(:,:,2)=H_est(:,:,1); 52 | weights1(1)=weights(2); 53 | weights1(2)=weights(1); 54 | % different decoding order 55 | [C_order2,Pc2] = RS_Rate_Region(M,weights1,H_est1,H_error_2,H_error_1,SNR,tolerance) 56 | C_RS_order2(2)=C_order2(1); 57 | C_RS_order2(1)=C_order2(2); 58 | 59 | C_RS_order1_user1(i_SNRdB,i_weight) = C_RS_order1(1); 60 | C_RS_order1_user2(i_SNRdB,i_weight) = C_RS_order1(2); 61 | C_RS_order2_user1(i_SNRdB,i_weight) = C_RS_order2(1); 62 | C_RS_order2_user2(i_SNRdB,i_weight) = C_RS_order2(2); 63 | 64 | C_NoRS = MULP_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNRdB(i_SNRdB),tolerance) 65 | % C_NoRS = MULP_rateRegion(M,weights,H_est,H_error_1,H_error_2,SNRdB(i_SNRdB),tolerance) 66 | C_NoRs_user1(i_SNRdB,i_weight)=C_NoRS(1); 67 | C_NoRs_user2(i_SNRdB,i_weight)=C_NoRS(2); 68 | 69 | end %end looping user weights 70 | 71 | end %end looping SNR 72 | 73 | x=[C_RS_order1_user1(1,:) C_RS_order2_user1(1,:)]; 74 | y=[C_RS_order1_user2(1,:) C_RS_order2_user2(1,:)]; 75 | k=convhull(x,y); 76 | x1 = x(k); 77 | y1 = y(k); 78 | xx=floor(x1.*10^(5))./(10^(5)); 79 | ind=find(xx==0); 80 | [~,ind_ini]=max(xx); 81 | plot(x1(ind_ini(1):ind(1)),y1(ind_ini(1):ind(1))) 82 | hold on,grid on 83 | 84 | x=C_NoRs_user1(1,:); 85 | y=C_NoRs_user2(1,:); 86 | k=convhull(x,y); 87 | x1 = x(k); 88 | y1 = y(k); 89 | xx=floor(x1.*10^(5))./(10^(5)); 90 | ind=find(xx==0); 91 | [~,ind_ini]=max(x1); 92 | plot(x1(ind_ini(1):ind(1)),y1(ind_ini(1):ind(1))) 93 | hold on,grid on 94 | 95 | x=[C_RS_order1_user1(2,:) C_RS_order2_user1(2,:)]; 96 | y=[C_RS_order1_user2(2,:) C_RS_order2_user2(2,:)]; 97 | k=convhull(x,y); 98 | x1 = x(k); 99 | y1 = y(k); 100 | xx=floor(x1.*10^(5))./(10^(5)); 101 | ind=find(xx==0); 102 | [~,ind_ini]=max(xx); 103 | plot(x1(ind_ini(1):ind(1)),y1(ind_ini(1):ind(1))) 104 | hold on,grid on 105 | 106 | x=C_NoRs_user1(2,:); 107 | y=C_NoRs_user2(2,:); 108 | k=convhull(x,y); 109 | x1 = x(k); 110 | y1 = y(k); 111 | xx=floor(x1.*10^(5))./(10^(5)); 112 | ind=find(xx==0); 113 | [~,ind_ini]=max(x1); 114 | plot(x1(ind_ini(1):ind(1)),y1(ind_ini(1):ind(1))) 115 | hold on,grid on 116 | 117 | x=[C_RS_order1_user1(3,:) C_RS_order2_user1(3,:)]; 118 | y=[C_RS_order1_user2(3,:) C_RS_order2_user2(3,:)]; 119 | k=convhull(x,y); 120 | x1 = x(k); 121 | y1 = y(k); 122 | xx=floor(x1.*10^(5))./(10^(5)); 123 | ind=find(xx==0); 124 | [~,ind_ini]=max(xx); 125 | plot(x1(ind_ini(1):ind(1)),y1(ind_ini(1):ind(1))) 126 | hold on,grid on 127 | 128 | x=C_NoRs_user1(3,:); 129 | y=C_NoRs_user2(3,:); 130 | k=convhull(x,y); 131 | x1 = x(k); 132 | y1 = y(k); 133 | xx=floor(x1.*10^(5))./(10^(5)); 134 | ind=find(xx==0); 135 | [~,ind_ini]=max(x1); 136 | plot(x1(ind_ini(1):ind(1)),y1(ind_ini(1):ind(1))) 137 | hold on,grid on 138 | 139 | title('RS with partial CSIT') 140 | legend('10dB RS','10dB MU-LP','20dB RS','20dB MU-LP','30dB RS','30dB MU-LP') 141 | xlabel('R1 (bit/s/Hz)') 142 | ylabel('R2 (bit/s/Hz)') 143 | 144 | % save('Partial_CSIT_Nt4','C_NoRS_user1','C_NoRS_user2','C_RS_order1_user1','C_RS_order2_user1','C_RS_order1_user2','C_RS_order2_user2') 145 | legend('RS','MULP') 146 | 147 | -------------------------------------------------------------------------------- /feasiblity/RS_Rate_Region_feasibility.m: -------------------------------------------------------------------------------- 1 | % This code is to reproduced Figure 8 of 2 | % "Sum-Rate Maximization for Linearly Precoded Downlink Multiuser MISO Systems with Partial CSIT: A Rate-Splitting Approach" 3 | % by Hamdi Joudeh and Bruno Clerks 4 | 5 | % Xinyuan Xu 6 | % April 2020 7 | 8 | function [Feasible] = RS_Rate_Region(Rth,M,weights,H_est,H_error_1,H_error_2,SNR,tolerance) 9 | % function [Feasible] = RS_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNR,tolerance) 10 | [Nr,Nt,K] = size(H_est); 11 | % introduce Rth, threshold rate / QoS requirement 12 | % introduce Boolean Variable 'feasible' 13 | 14 | % % % test only 15 | % % Rth = 0; 16 | % 0, should be all feasible, 100 low SNR should not be feasible 17 | % % Rth = 0,0.5, 1, 10, 100; 18 | % % in an experiement, 1.3 is a kind of 50% 50% for SNR around 20dB, theta = 19 | % % pi/3, weight = [1,1] 20 | % weights = [1,1]; 21 | % SNR = 10; 22 | % % test variables -> to fix 23 | 24 | % Feasible: the outcome of trying all 4 initialization methods 25 | feasible = zeros(1,4); 26 | 27 | for i=1:M 28 | H_1(:,:,i) = H_est(:,:,1)+H_error_1(:,:,i); 29 | H_2(:,:,i) = H_est(:,:,2)+H_error_2(:,:,i); 30 | end 31 | 32 | for method = 1:4 % loop through 4 different initializaiton methods 33 | [p1,p2,pc] = initialize_precoders(H_est, SNR, method); 34 | % trace(p1'*p1)+trace(p2'*p2)+trace(pc'*pc) 35 | loop=1; 36 | AWSMSE_old=0.1; 37 | count=0; 38 | while (loop) 39 | % reset realizations 40 | tc1 = 0; tc2 = 0; 41 | t1 = 0; t2 = 0; 42 | 43 | Uc1 = 0; Uc2 = 0; 44 | U1 = 0; U2 = 0; 45 | 46 | psi_c1 = 0; psi_c2 = 0; 47 | psi_1 = 0; psi_2 = 0; 48 | 49 | fc1 = zeros(Nt,Nr); fc2 = zeros(Nt,Nr); 50 | f1 = zeros(Nt,Nr); f2 = zeros(Nt,Nr); 51 | 52 | vc1 = 0; vc2 = 0; 53 | v1 = 0; v2 = 0; 54 | 55 | for i=1:M 56 | h1 = H_1(:,:,i); h2 = H_2(:,:,i); 57 | 58 | % average receive power for a given channel state. equation (3) 59 | I1 = abs(h1*p2)^2+1; I2 = abs(h2*p1)^2+1; 60 | T1 = abs(h1*p1)^2+I1; T2 = abs(h2*p2)^2+I2; 61 | Tc1 = abs(h1*pc)^2+T1; Tc2 = abs(h2*pc)^2+T2; 62 | 63 | % Optimum Minimum MSE equalizers. equation (20) 64 | gc1 = pc'*h1'*inv(Tc1); gc2 = pc'*h2'*inv(Tc2); 65 | g1 = p1'*h1'*inv(T1); g2 = p2'*h2'*inv(T2); 66 | 67 | % MMSE, equation (21) % Ick = Tk 68 | MMSE_c1 = inv(Tc1)*T1; MMSE_c2 = inv(Tc2)*T2; 69 | MMSE1 = inv(T1)*I1; MMSE2 = inv(T2)*I2; 70 | 71 | % optimum MMSE weights, between equation 24 and 25 72 | uc1 = inv(MMSE_c1); uc2 = inv(MMSE_c2); 73 | u1 = inv(MMSE1); u2 = inv(MMSE2); 74 | 75 | Uc1 = Uc1+uc1; Uc2 = Uc2+uc2; 76 | U1 = U1+u1; U2 = U2+u2; 77 | 78 | % D, 1) Updating the Equalizers and Weights 79 | % sum of realizations 80 | tc1 = tc1+uc1*abs(gc1)^2; tc2 = tc2+uc2*abs(gc2)^2; 81 | t1 = t1+u1*abs(g1)^2; t2 = t2+u2*abs(g2)^2; 82 | 83 | psi_c1 = psi_c1+(uc1*abs(gc1)^2)*h1'*h1; 84 | psi_c2 = psi_c2+(uc2*abs(gc2)^2)*h2'*h2; 85 | psi_1 = psi_1+(u1*abs(g1)^2)*h1'*h1; 86 | psi_2 = psi_2+(u2*abs(g2)^2)*h2'*h2; 87 | 88 | fc1 = fc1+uc1*h1'*gc1'; fc2 = fc2+uc2*h2'*gc2'; 89 | f1 = f1+u1*h1'*g1'; f2 = f2+u2*h2'*g2'; 90 | 91 | vc1 = vc1+log2(uc1); vc2 = vc2+log2(uc2); 92 | v1 = v1+log2(u1); v2 = v2+log2(u2); 93 | end % for 94 | 95 | % averaging over the correpsonding realizaitons 96 | Uc1 = Uc1/M; Uc2 = Uc2/M; 97 | U1 = U1/M; U2 = U2/M; 98 | 99 | tc1 = tc1/M; tc2 = tc2/M; 100 | t1 = t1/M; t2 = t2/M; 101 | 102 | psi_c1 = psi_c1./M; psi_c2 = psi_c2./M; 103 | psi_1 = psi_1./M; psi_2 = psi_2./M; 104 | 105 | fc1 = fc1./M; fc2 = fc2./M; 106 | f1 = f1./M; f2 = f2./M; 107 | 108 | vc1 = vc1/M; vc2 = vc2/M; 109 | v1 = v1/M; v2 = v2/M; 110 | 111 | %Step 4: Update P 112 | [feasible(method), AWSMSE,p1,p2,pc]=RS_update_P_feasibility(Rth, H_est,weights,SNR,Uc1,Uc2,U1,U2,tc1,tc2,t1,t2,... 113 | psi_c1,psi_c2,psi_1,psi_2,fc1,fc2,f1,f2,vc1,vc2,v1,v2); 114 | if feasible(method) == 0 115 | loop = 0; 116 | break; % while 117 | end 118 | 119 | if abs((AWSMSE-AWSMSE_old)/AWSMSE_old)<=tolerance 120 | loop=0; 121 | else 122 | AWSMSE_old = AWSMSE; 123 | count = count+1; 124 | end 125 | 126 | if count>=500 127 | loop=0; 128 | break; 129 | end 130 | 131 | end %while 132 | 133 | 134 | end % for method 135 | 136 | if feasible == zeros(1,4) 137 | Feasible = 0; 138 | else 139 | Feasible = 1; 140 | end 141 | -------------------------------------------------------------------------------- /Partial CSIT/RS_Rate_Region.m: -------------------------------------------------------------------------------- 1 | % This code is to reproduced Figure 8 of 2 | % "Sum-Rate Maximization for Linearly Precoded Downlink Multiuser MISO Systems with Partial CSIT: A Rate-Splitting Approach" 3 | % by Hamdi Joudeh and Bruno Clerks 4 | 5 | % Xinyuan Xu 6 | % 1st written: April 2020 7 | % revised: 2020 May 29 8 | 9 | function [Capacity,P_c] = RS_Rate_Region(M,weights,H_est,H_error_1,H_error_2,SNR,tolerance) 10 | 11 | R1 = zeros(1,M); R2 = zeros(1,M); 12 | 13 | [Nr,Nt,K] = size(H_est); 14 | 15 | for i=1:M 16 | H_1(:,:,i) = H_est(:,:,1)+H_error_1(:,:,i); 17 | H_2(:,:,i) = H_est(:,:,2)+H_error_2(:,:,i); 18 | end 19 | 20 | % MRC+SVD 21 | h1 = H_est(:,:,1); 22 | h2 = H_est(:,:,2); 23 | H = [h1' h2']; 24 | [U,~,~] = svd(H); 25 | p_c_hat = U(:,1); 26 | 27 | P_c=SNR*0.8; 28 | P_k=SNR-P_c; 29 | 30 | p1=h1'/norm(h1)*sqrt(P_k*0.5); 31 | p2=h2'/norm(h2)*sqrt(P_k*0.5); 32 | pc=p_c_hat*sqrt(P_c); 33 | 34 | 35 | loop=1; 36 | AWSMSE_old=0; 37 | count=0; 38 | while (loop) 39 | % reset realizations 40 | tc1 = 0; tc2 = 0; 41 | t1 = 0; t2 = 0; 42 | 43 | Uc1 = 0; Uc2 = 0; 44 | U1 = 0; U2 = 0; 45 | 46 | psi_c1 = 0; psi_c2 = 0; 47 | psi_1 = 0; psi_2 = 0; 48 | 49 | fc1 = zeros(Nt,Nr); fc2 = zeros(Nt,Nr); 50 | f1 = zeros(Nt,Nr); f2 = zeros(Nt,Nr); 51 | 52 | vc1 = 0; vc2 = 0; 53 | v1 = 0; v2 = 0; 54 | 55 | 56 | for i=1:M 57 | h1 = H_1(:,:,i); h2 = H_2(:,:,i); 58 | 59 | % average receive power for a given channel state. equation (3) 60 | I1 = abs(h1*p2)^2+1; I2 = abs(h2*p1)^2+1; 61 | T1 = abs(h1*p1)^2+I1; T2 = abs(h2*p2)^2+I2; 62 | Tc1 = abs(h1*pc)^2+T1; Tc2 = abs(h2*pc)^2+T2; 63 | 64 | % Optimum Minimum MSE equalizers. equation (20) 65 | gc1 = pc'*h1'*inv(Tc1); gc2 = pc'*h2'*inv(Tc2); 66 | g1 = p1'*h1'*inv(T1); g2 = p2'*h2'*inv(T2); 67 | 68 | % MMSE, equation (21) % Ick = Tk 69 | MMSE_c1 = inv(Tc1)*T1; MMSE_c2 = inv(Tc2)*T2; 70 | MMSE1 = inv(T1)*I1; MMSE2 = inv(T2)*I2; 71 | 72 | % optimum MMSE weights, between equation 24 and 25 73 | uc1 = inv(MMSE_c1); uc2 = inv(MMSE_c2); 74 | u1 = inv(MMSE1); u2 = inv(MMSE2); 75 | 76 | Uc1 = Uc1+uc1; Uc2 = Uc2+uc2; 77 | U1 = U1+u1; U2 = U2+u2; 78 | 79 | % D, 1) Updating the Equalizers and Weights 80 | % sum of realizations 81 | tc1 = tc1+uc1*abs(gc1)^2; tc2 = tc2+uc2*abs(gc2)^2; 82 | t1 = t1+u1*abs(g1)^2; t2 = t2+u2*abs(g2)^2; 83 | 84 | psi_c1 = psi_c1+(uc1*abs(gc1)^2)*h1'*h1; 85 | psi_c2 = psi_c2+(uc2*abs(gc2)^2)*h2'*h2; 86 | psi_1 = psi_1+(u1*abs(g1)^2)*h1'*h1; 87 | psi_2 = psi_2+(u2*abs(g2)^2)*h2'*h2; 88 | 89 | fc1 = fc1+uc1*h1'*gc1'; fc2 = fc2+uc2*h2'*gc2'; 90 | f1 = f1+u1*h1'*g1'; f2 = f2+u2*h2'*g2'; 91 | 92 | vc1 = vc1+log2(uc1); vc2 = vc2+log2(uc2); 93 | v1 = v1+log2(u1); v2 = v2+log2(u2); 94 | end % for 95 | 96 | % averaging over the correpsonding realizaitons 97 | Uc1 = Uc1/M; Uc2 = Uc2/M; 98 | U1 = U1/M; U2 = U2/M; 99 | 100 | tc1 = tc1/M; tc2 = tc2/M; 101 | t1 = t1/M; t2 = t2/M; 102 | 103 | psi_c1 = psi_c1./M; psi_c2 = psi_c2./M; 104 | psi_1 = psi_1./M; psi_2 = psi_2./M; 105 | 106 | fc1 = fc1./M; fc2 = fc2./M; 107 | f1 = f1./M; f2 = f2./M; 108 | 109 | vc1 = vc1/M; vc2 = vc2/M; 110 | v1 = v1/M; v2 = v2/M; 111 | 112 | 113 | %Step 4: Update P 114 | [AWSMSE,p1,p2,pc]=RS_update_P(H_est,weights,SNR,Uc1,Uc2,U1,U2,tc1,tc2,t1,t2,... 115 | psi_c1,psi_c2,psi_1,psi_2,fc1,fc2,f1,f2,vc1,vc2,v1,v2); 116 | 117 | if abs((AWSMSE-AWSMSE_old)/AWSMSE_old)<=tolerance 118 | loop=0; 119 | else 120 | AWSMSE_old = AWSMSE; 121 | count = count+1; 122 | end 123 | 124 | if count>=500 125 | loop=0; 126 | break; 127 | end 128 | 129 | end 130 | 131 | P_c = real(trace(pc*pc')); 132 | 133 | for i=1:M 134 | h1 = H_1(:,:,i); h2 = H_2(:,:,i); 135 | 136 | % equation 3 137 | I1 = abs(h1*p2)^2+1; I2 = abs(h2*p1)^2+1; 138 | T1 = abs(h1*p1)^2+I1; T2 = abs(h2*p2)^2+I2; 139 | % Tc1 = abs(h1*pc)^2+T1; Tc2 = abs(h2*pc)^2+T2; 140 | % Ick = Tk %SINR, gama on paper % equation 4 141 | yc1 = abs(h1*pc)^2*inv(T1); yc2 = abs(h2*pc)^2*inv(T2); 142 | y1 = abs(h1*p1)^2*inv(I1); y2 = abs(h2*p2)^2*inv(I2); 143 | 144 | % equation 5 145 | Rc1 = real(log2(1+yc1)); 146 | Rc2 = real(log2(1+yc2)); 147 | Rc = min(Rc1,Rc2); 148 | R1(i) = real(log2(1+y1))+Rc; 149 | R2(i) = real(log2(1+y2)); 150 | end 151 | 152 | Capacity(1)=sum(R1)/M; 153 | Capacity(2)=sum(R2)/M; 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/comparision/test_WSR_WMMSE.m: -------------------------------------------------------------------------------- 1 | % compare my code outcome with lina's code 2 | 3 | % Lina's Code first 4 | clc;clear all; clf 5 | %accuracy of convergence 6 | tolerance = 10^-6; 7 | 8 | %channel angle between user1 and user2 9 | theta1=0; 10 | theta2=2*pi/9; 11 | 12 | %SNR in dB 13 | SNRdB=10; 14 | 15 | %channel bias 16 | bias=1; 17 | 18 | %user weights 19 | weight=[-3 -1:0.05:1 3]; 20 | u2=10.^weight; 21 | u1=ones(1,length(u2)); 22 | 23 | %channel realization (NT=4) 24 | H_BC(:,:,1)=[1 exp(1i*theta1) exp(1i*2*theta1) exp(1i*3*theta1); 1,1,1,1]; 25 | 26 | for i_theta2=1:length(theta2) 27 | 28 | %channel realization (NT=4) 29 | H_BC(:,:,2)=[1 exp(1i*theta2(i_theta2)) exp(1i*2*theta2(i_theta2)) exp(1i*3*theta2(i_theta2));1 exp(1i*theta2(i_theta2)) exp(1i*2*theta2(i_theta2)) exp(1i*3*theta2(i_theta2))]*bias; 30 | 31 | 32 | for i_weight=1:length(u1) 33 | i_weight 34 | 35 | weights=[u1(i_weight),u2(i_weight)]; 36 | Capacity_MULP = MULP_rateRegion(weights,H_BC,SNRdB,tolerance); 37 | 38 | capacity_MULP_UE1(i_theta2,i_weight)=Capacity_MULP(1); 39 | capacity_MULP_UE2(i_theta2,i_weight)=Capacity_MULP(2); 40 | 41 | end %end user weights 42 | 43 | end %end theta 44 | 45 | x=capacity_MULP_UE1(1,:); 46 | y=capacity_MULP_UE2(1,:); 47 | k=convhull(x,y); 48 | x1 = x(k); 49 | y1 = y(k); 50 | xx=floor(x1.*10^(5))./(10^(5)); 51 | ind=find(xx==0); 52 | [~,ind_ini]=max(x1); 53 | plot(x1(ind_ini(1):ind(1)),y1(ind_ini(1):ind(1)),'-.','LineWidth',2,'Color', [0.4660 0.6740 0.1880]) 54 | 55 | title("Compareison \theta=2\pi/9 "+ SNRdB + "dB") 56 | xlabel('R_{1,tot} (bit/s/Hz)') 57 | ylabel('R_{2,tot} (bit/s/Hz)') 58 | hold on 59 | 60 | % clear all 61 | P = 4; % transmit antennas 62 | K = 2; % two users 63 | Q =2; % each user has two antennas 64 | 65 | % SNRdB =[-10,0,10,20]; 66 | % SNRdB =20; 67 | 68 | weight=[-3,-1:0.05:1,3]; 69 | u2=10.^weight; 70 | u1=ones(1,length(u2)); 71 | rate1=zeros(length(u2),1); 72 | rate2=zeros(length(u2),1); 73 | 74 | for s = 1:length(SNRdB) 75 | Etx = db2pow(SNRdB(s)) 76 | for i=1:length(u2) 77 | R1_average = 0; 78 | R2_average = 0; 79 | 80 | iteration = 1; 81 | for repetition=1:iteration 82 | % H(:,:,1)=(1/sqrt(2))*(randn(Q,P)+1i*randn(Q,P)); 83 | % H(:,:,2)=(1/sqrt(2))*(randn(Q,P)+1i*randn(Q,P)); 84 | % one random pair of channel realization 85 | H(:,:,1)=[1 exp(1i*theta1) exp(1i*2*theta1) exp(1i*3*theta1); 1,1,1,1]; 86 | H(:,:,2)=[1 exp(1i*theta2(i_theta2)) exp(1i*2*theta2(i_theta2)) exp(1i*3*theta2(i_theta2));1 exp(1i*theta2(i_theta2)) exp(1i*2*theta2(i_theta2)) exp(1i*3*theta2(i_theta2))]*bias; 87 | 88 | %initialize transmit filter for the 2 user 89 | % B(:,:,1)=H(:,:,1)'; 90 | % B(:,:,2)=H(:,:,2)'; 91 | 92 | B(:,:,1)=H(:,:,1)'/norm(H(:,:,1))*sqrt(Etx/2); 93 | B(:,:,2)=H(:,:,2)'/norm(H(:,:,2))*sqrt(Etx/2); 94 | 95 | tolerence = 10^-6; 96 | 97 | % R1 = 1; R2 = 1; 98 | diff = 1; 99 | WSR = 0; 100 | counter = 0 ; 101 | 102 | while (diff > tolerence) 103 | 104 | % (6) effective noise covariance matrix 105 | % R = eye(Q,Q)+H(:,:,1)*B(:,:,2)*B(:,:,2)'*H(:,:,1)'+H(:,:,2)*B(:,:,1)*B(:,:,1)'*H(:,:,2)'; 106 | R1 = eye(Q,Q)+H(:,:,1)*B(:,:,2)*B(:,:,2)'*H(:,:,1)'; 107 | R2 = eye(Q,Q)+H(:,:,2)*B(:,:,1)*B(:,:,1)'*H(:,:,2)'; 108 | 109 | 110 | % (7) MMSE receive filter 111 | A(:,:,1) = B(:,:,1)'*H(:,:,1)'*inv(H(:,:,1)*B(:,:,1)*B(:,:,1)'*H(:,:,1)'+R1); 112 | A(:,:,2) = B(:,:,2)'*H(:,:,2)'*inv(H(:,:,2)*B(:,:,2)*B(:,:,2)'*H(:,:,2)'+R2); 113 | 114 | % (8) MMSE-matrix 115 | E(:,:,1)= inv( eye(Q,Q)+B(:,:,1)'*H(:,:,1)'*inv(R1)*H(:,:,1)*B(:,:,1) ); 116 | E(:,:,2)= inv( eye(Q,Q)+B(:,:,2)'*H(:,:,2)'*inv(R2)*H(:,:,2)*B(:,:,2) ); 117 | 118 | % (21) weight matrix of user 119 | W(:,:,1) = u1(i)*inv(E(:,:,1)); 120 | W(:,:,2) = u2(i)*inv(E(:,:,2)); 121 | 122 | % is there easier way to express these block-diagonal matrices? 123 | W_diag = [W(:,:,1),zeros(2,2);zeros(2,2),W(:,:,2)]; 124 | A_diag = [A(:,:,1),zeros(2,2);zeros(2,2),A(:,:,2)]; 125 | H_stacked = [H(:,:,1); H(:,:,2)]; 126 | 127 | % (22) 128 | % Etf = trace(B(:,:,1)*B(:,:,1)')+trace(B(:,:,2)*B(:,:,2)'); 129 | B_bar = H_stacked'*A_diag'*W_diag*A_diag*H_stacked; 130 | B_bar = B_bar+trace(W_diag*(A_diag*(A_diag')))/Etx*eye(size(B_bar)); 131 | B_bar = inv(B_bar)*H_stacked'*A_diag'*W_diag; 132 | 133 | % (23) 134 | b = sqrt(Etx/trace(B_bar*B_bar')); 135 | B_WMMSE = b *B_bar; 136 | B(:,:,1)=B_WMMSE(:,1:2); 137 | B(:,:,2)=B_WMMSE(:,3:4); 138 | Etf = trace(B(:,:,1)*B(:,:,1)')+trace(B(:,:,2)*B(:,:,2)'); 139 | 140 | R1 = abs(log2(det(inv(E(:,:,1))))); 141 | R2 = abs(log2(det(inv(E(:,:,2))))); 142 | 143 | WSR_new = u1(i)*R1+u2(i)*R2; 144 | 145 | diff = abs(WSR_new/WSR-1); 146 | WSR = WSR_new; 147 | 148 | % counter = counter +1; % sometimes the code do not converge 149 | % if counter >= 2000 150 | % break 151 | % end 152 | end 153 | % if counter~=2000 154 | % R1_average = R1_average + R1/100; 155 | % R2_average = R2_average + R2/100; 156 | % end 157 | R1_average = R1_average + R1/iteration; 158 | R2_average = R2_average + R2/iteration; 159 | end 160 | [i, R1_average, R2_average] 161 | rate1(i) = R1_average; 162 | rate2(i) = R2_average; 163 | end 164 | 165 | % plot(rate1,rate2,'*') 166 | k = convhull(rate1, rate2); 167 | x1=rate1(k); 168 | y1=rate2(k); 169 | xx = floor(x1.*10^5)./(10^5); 170 | ind = find(xx==0); 171 | [l,ind_ini]= max(x1); 172 | plot(x1(ind_ini(1):ind(1)),y1(ind_ini(1):ind(1)),'b-') 173 | legend("Lina","James") 174 | xlabel('R1(bps/Hz)') 175 | ylabel('R2(bps/Hz)') 176 | end 177 | 178 | 179 | 180 | 181 | -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/main.m: -------------------------------------------------------------------------------- 1 | clear all 2 | P = 4; % transmit antennas 3 | K = 2; % two users 4 | Q = 2; % each user has two antennas 5 | 6 | % SNRdB =[-10,0,10,20]; 7 | SNRdB = 10; 8 | % Etx = db2pow(SNRdB); %? is this a design variable? 9 | % total block power constraints 10 | 11 | weight=[-3,-1:0.05:1,3]; 12 | u2=10.^weight; 13 | u1=ones(1,length(u2)); 14 | Capacity_WMMSE_user1=zeros(length(u2),1); 15 | Capacity_WMMSE_user2=zeros(length(u2),1); 16 | Capacity_DPC_user1 =zeros(length(u1),1); 17 | Capacity_DPC_user2 =zeros(length(u1),1); 18 | 19 | theta = pi/3; 20 | 21 | tolerance = 10^-3; 22 | 23 | for s = 1:length(SNRdB) 24 | Etx = db2pow(SNRdB(s)); 25 | for i_weight=1:length(u2) 26 | R1_average = 0; 27 | R2_average = 0; 28 | 29 | iteration = 100; 30 | i_channel = 1; 31 | for repetition=1:iteration 32 | % H_BC(:,:,1)=[1,1,1,1;1,1,1,1]; 33 | % H_BC(:,:,2)=[1, exp(1i*1*theta),exp(1i*2*theta),exp(1i*3*theta);1, exp(1i*1*theta),exp(1i*2*theta),exp(1i*3*theta)]; 34 | % H(:,:,1)=(1/sqrt(2))*(randn(Q,P)+1i*randn(Q,P)); 35 | % H(:,:,2)=(1/sqrt(2))*(randn(Q,P)+1i*randn(Q,P)); 36 | % one random pair of channel realization 37 | 38 | H_BC(:,:,1)=1/sqrt(2)*(randn(Q,P)+1i*randn(Q,P)); 39 | H_BC(:,:,2)=1/sqrt(2)*(randn(Q,P)+1i*randn(Q,P)); 40 | 41 | H_MAC(:,:,1)=H_BC(:,:,1)'; 42 | H_MAC(:,:,2)=H_BC(:,:,2)'; 43 | 44 | weights=[u1(i_weight),u2(i_weight)]; 45 | Capacity_DPC = DPC_rateRegion(weights,H_MAC,SNRdB,tolerance); 46 | capacity_DPC_UE1(i_channel)=Capacity_DPC(1); 47 | capacity_DPC_UE2(i_channel)=Capacity_DPC(2); 48 | 49 | %initialize transmit filter for the 2 user 50 | B(:,:,1)=H_BC(:,:,1)'; 51 | B(:,:,2)=H_BC(:,:,2)'; 52 | 53 | % energy of current random transmit filter 54 | Etf = trace(B(:,:,1)*B(:,:,1)')+trace(B(:,:,2)*B(:,:,2)'); 55 | 56 | % imagining about this normalization 57 | B(:,:,1)= B(:,:,1)./sqrt( Etf ).*sqrt(Etx); 58 | B(:,:,2)=B(:,:,2)./sqrt( Etf ).*sqrt(Etx); 59 | Etf = trace(B(:,:,1)*B(:,:,1)')+trace(B(:,:,2)*B(:,:,2)'); 60 | 61 | % R1 = 1; R2 = 1; 62 | diff = 1; 63 | WSR = 0; 64 | counter = 0 ; 65 | 66 | while (diff > tolerance) 67 | 68 | % (6) effective noise covariance matrix 69 | % R = eye(Q,Q)+H(:,:,1)*B(:,:,2)*B(:,:,2)'*H(:,:,1)'+H(:,:,2)*B(:,:,1)*B(:,:,1)'*H(:,:,2)'; 70 | R1 = eye(Q,Q)+H_BC(:,:,1)*B(:,:,2)*B(:,:,2)'*H_BC(:,:,1)'; 71 | R2 = eye(Q,Q)+H_BC(:,:,2)*B(:,:,1)*B(:,:,1)'*H_BC(:,:,2)'; 72 | 73 | 74 | % (7) MMSE receive filter 75 | A(:,:,1) = B(:,:,1)'*H_BC(:,:,1)'*inv(H_BC(:,:,1)*B(:,:,1)*B(:,:,1)'*H_BC(:,:,1)'+R1); 76 | A(:,:,2) = B(:,:,2)'*H_BC(:,:,2)'*inv(H_BC(:,:,2)*B(:,:,2)*B(:,:,2)'*H_BC(:,:,2)'+R2); 77 | 78 | % (8) MMSE-matrix 79 | E(:,:,1)= inv( eye(Q,Q)+B(:,:,1)'*H_BC(:,:,1)'*inv(R1)*H_BC(:,:,1)*B(:,:,1) ); 80 | E(:,:,2)= inv( eye(Q,Q)+B(:,:,2)'*H_BC(:,:,2)'*inv(R2)*H_BC(:,:,2)*B(:,:,2) ); 81 | 82 | % (21) weight matrix of user 83 | W(:,:,1) = u1(i_weight)*inv(E(:,:,1)); 84 | W(:,:,2) = u2(i_weight)*inv(E(:,:,2)); 85 | 86 | % is there easier way to express these block-diagonal matrices? 87 | W_diag = [W(:,:,1),zeros(2,2);zeros(2,2),W(:,:,2)]; 88 | A_diag = [A(:,:,1),zeros(2,2);zeros(2,2),A(:,:,2)]; 89 | H_stacked = [H_BC(:,:,1); H_BC(:,:,2)]; 90 | 91 | % (22) 92 | % Etf = trace(B(:,:,1)*B(:,:,1)')+trace(B(:,:,2)*B(:,:,2)'); 93 | B_bar = H_stacked'*A_diag'*W_diag*A_diag*H_stacked; 94 | B_bar = B_bar+trace(W_diag*(A_diag*(A_diag')))/Etx*eye(size(B_bar)); 95 | B_bar = inv(B_bar)*H_stacked'*A_diag'*W_diag; 96 | 97 | % (23) 98 | b = sqrt(Etx/trace(B_bar*B_bar')); 99 | B_WMMSE = b *B_bar; 100 | B(:,:,1)=B_WMMSE(:,1:2); 101 | B(:,:,2)=B_WMMSE(:,3:4); 102 | Etf = trace(B(:,:,1)*B(:,:,1)')+trace(B(:,:,2)*B(:,:,2)'); 103 | 104 | R1 = abs(log2(det(inv(E(:,:,1))))); 105 | R2 = abs(log2(det(inv(E(:,:,2))))); 106 | 107 | WSR_new = u1(i_weight)*R1+u2(i_weight)*R2; 108 | 109 | diff = abs(WSR_new/WSR-1); 110 | WSR = WSR_new; 111 | 112 | % counter = counter +1; % sometimes the code do not converge 113 | % if counter >= 2000 114 | % break 115 | % end 116 | end 117 | % if counter~=2000 118 | % R1_average = R1_average + R1/100; 119 | % R2_average = R2_average + R2/100; 120 | % end 121 | R1_average = R1_average + R1/iteration; 122 | R2_average = R2_average + R2/iteration; 123 | end 124 | [i_weight, R1_average, R2_average] 125 | Capacity_WMMSE_user1(i_weight) = R1_average; 126 | Capacity_WMMSE_user2(i_weight) = R2_average; 127 | Capacity_DPC_user1(i_weight)=mean(capacity_DPC_UE1); 128 | Capacity_DPC_user2(i_weight)=mean(capacity_DPC_UE2); 129 | 130 | end 131 | 132 | figure 133 | % plot(rate1,rate2,'*') 134 | k = convhull(Capacity_WMMSE_user1, Capacity_WMMSE_user2); 135 | x1=Capacity_WMMSE_user1(k); 136 | y1=Capacity_WMMSE_user2(k); 137 | xx = floor(x1.*10^5)./(10^5); 138 | ind = find(xx==0); 139 | [l,ind_ini]= max(x1); 140 | plot(x1(ind_ini(1):ind(1)),y1(ind_ini(1):ind(1)),'b-') 141 | title("WSR-MMSE,"+SNRdB(s)+"dB") 142 | xlabel('R1') 143 | ylabel('R2') 144 | hold on 145 | % plot(reshape(Capacity_DPC_user1,[length(u1),1]),reshape(Capacity_DPC_user2,[length(u2),1]),'-o','LineWidth',2,'Color', [ 0 0.4470 0.7410]) 146 | 147 | k = convhull(Capacity_DPC_user1, Capacity_DPC_user2); 148 | x1=Capacity_DPC_user1(k); 149 | y1=Capacity_DPC_user2(k); 150 | xx = floor(x1.*10^5)./(10^5); 151 | ind = find(xx==0); 152 | [l,ind_ini]= max(x1); 153 | plot(x1(ind_ini(1):ind(1)),y1(ind_ini(1):ind(1)),'r-') 154 | 155 | legend('WSR-WMMSE', 'DPC') 156 | title("WSR-MMSE and DPC,"+SNRdB(s)+"dB") 157 | xlabel('R1') 158 | ylabel('R2') 159 | end 160 | 161 | 162 | 163 | 164 | 165 | 166 | -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/EURASIP JWCN/main_Lina.m: -------------------------------------------------------------------------------- 1 | 2 | % This is a code package related to the following conference paper: 3 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4 | % Y. Mao, B. Clerckx and V. O. K. Li, "Rate-splitting multiple access for 5 | % downlink communication systems: bridging, generalizing, and outperforming 6 | % SDMA and NOMA." EURASIP Journal on Wireless Communications and Networking 7 | % 2018.1 (2018): 133. 8 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9 | % 10 | % The code is written by Yijie (Lina) Mao 11 | % 12 | % The code is implemented in Matlab environment with CVX toolbox 13 | % assisted. 14 | % 15 | % Fig. 6(b) of the above paper will be reproduced by running the Matlab 16 | % script 'main.m'. By changing the variables 'bias' (channel gain 17 | % difference between the users), 'NT'(number of transmit antenna), you 18 | % can reproduce Fig. 5--Fig. 6. 19 | 20 | 21 | 22 | 23 | 24 | clc;clear all; clf 25 | 26 | %number of transmit antenna 27 | NT=4; 28 | 29 | %channel gain difference 30 | bias=1; 31 | 32 | 33 | %SNR in dB 34 | SNRdB=0; 35 | 36 | %accuracy of convergence 37 | tolerance = 10^-3; 38 | 39 | 40 | %number of random channel 41 | N_channel=100; 42 | 43 | %user weights 44 | weight=[-3 -1:0.05:1 3]; 45 | u2=10.^weight; 46 | u1=ones(1,length(u2)); 47 | 48 | 49 | capacity_DPC_UE1_average =zeros(length(u1),1); 50 | capacity_DPC_UE2_average =zeros(length(u1),1); 51 | capacity_MULP_UE1_average=zeros(length(u1),1); 52 | capacity_MULP_UE2_average=zeros(length(u1),1); 53 | % capacity_NOMA_order1_UE1_average=zeros(length(u1),1); 54 | % capacity_NOMA_order1_UE2_average=zeros(length(u1),1); 55 | % capacity_NOMA_order2_UE1_average=zeros(length(u1),1); 56 | % capacity_NOMA_order2_UE2_average=zeros(length(u1),1); 57 | % capacity_RS_order1_UE1_average=zeros(length(u1),1); 58 | % capacity_RS_order1_UE2_average=zeros(length(u1),1); 59 | % capacity_RS_order2_UE1_average=zeros(length(u1),1); 60 | % capacity_RS_order2_UE2_average=zeros(length(u1),1); 61 | 62 | for i_weight=1:length(u1) 63 | for i_channel=1:N_channel 64 | weights=[u1(i_weight),u2(i_weight)]; 65 | [i_weight, i_channel] 66 | randn('seed',i_channel*4) 67 | H_BC(:,:,1)=1/sqrt(2)*(randn(2,NT)+1i*randn(2,NT)); 68 | H_BC(:,:,2)=1/sqrt(2)*(randn(2,NT)+1i*randn(2,NT)); 69 | 70 | H_MAC(:,:,1)=H_BC(:,:,1)'; 71 | H_MAC(:,:,2)=H_BC(:,:,2)'; 72 | 73 | Capacity_DPC = DPC_rateRegion(weights,H_MAC,SNRdB,tolerance); 74 | 75 | % [Capacity_RS_order1, Capacity_RS_order2, P_common1, P_common2] = RS_rateRegion(weights,H_BC,SNRdB,tolerance); 76 | % 77 | % [Capacity_NOMA_order1, Capacity_NOMA_order2 ]= NOMA_rateRegion(weights,H_BC,SNRdB,tolerance); 78 | % 79 | Capacity_MULP = MULP_rateRegion(weights,H_BC,SNRdB,tolerance); 80 | 81 | 82 | capacity_DPC_UE1(i_channel)=Capacity_DPC(1); 83 | capacity_DPC_UE2(i_channel)=Capacity_DPC(2); 84 | 85 | capacity_MULP_UE1(i_channel)=Capacity_MULP(1); 86 | capacity_MULP_UE2(i_channel)=Capacity_MULP(2); 87 | % 88 | % capacity_NOMA_order1_UE1(i_channel)=Capacity_NOMA_order1(1); 89 | % capacity_NOMA_order1_UE2(i_channel)=Capacity_NOMA_order1(2); 90 | % 91 | % capacity_NOMA_order2_UE1(i_channel)=Capacity_NOMA_order2(1); 92 | % capacity_NOMA_order2_UE2(i_channel)=Capacity_NOMA_order2(2); 93 | % 94 | % capacity_RS_order1_UE1(i_channel) = Capacity_RS_order1(1); 95 | % capacity_RS_order1_UE2(i_channel) = Capacity_RS_order1(2); 96 | % 97 | % capacity_RS_order2_UE1(i_channel) = Capacity_RS_order2(1); 98 | % capacity_RS_order2_UE2(i_channel) = Capacity_RS_order2(2); 99 | 100 | end %end user weights 101 | 102 | capacity_DPC_UE1_average(i_weight)=mean(capacity_DPC_UE1); 103 | capacity_DPC_UE2_average(i_weight)=mean(capacity_DPC_UE2); 104 | 105 | capacity_MULP_UE1_average(i_weight)=mean(capacity_MULP_UE1); 106 | capacity_MULP_UE2_average(i_weight)=mean(capacity_MULP_UE2); 107 | % 108 | % capacity_NOMA_order1_UE1_average(i_weight)=mean(capacity_NOMA_order1_UE1); 109 | % capacity_NOMA_order1_UE2_average(i_weight)=mean(capacity_NOMA_order1_UE2); 110 | % 111 | % capacity_NOMA_order2_UE1_average(i_weight)=mean(capacity_NOMA_order2_UE1); 112 | % capacity_NOMA_order2_UE2_average(i_weight)=mean(capacity_NOMA_order2_UE2); 113 | % 114 | % capacity_RS_order1_UE1_average(i_weight)=mean(capacity_RS_order1_UE1); 115 | % capacity_RS_order1_UE2_average(i_weight)=mean(capacity_RS_order1_UE2); 116 | % 117 | % capacity_RS_order2_UE1_average(i_weight)=mean(capacity_RS_order2_UE1); 118 | % capacity_RS_order2_UE2_average(i_weight)=mean(capacity_RS_order2_UE2); 119 | 120 | clear capacity_DPC_UE1 121 | clear capacity_DPC_UE2 122 | clear capacity_MULP_UE1 123 | clear capacity_MULP_UE2 124 | % clear capacity_NOMA_order1_UE1 125 | % clear capacity_NOMA_order1_UE2 126 | % clear capacity_NOMA_order2_UE1 127 | % clear capacity_NOMA_order2_UE2 128 | % clear capacity_RS_order1_UE1 129 | % clear capacity_RS_order1_UE2 130 | % clear capacity_RS_order2_UE1 131 | % clear capacity_RS_order2_UE2 132 | end %end theta 133 | 134 | 135 | 136 | 137 | % x=[capacity_RS_order1_UE1_average capacity_RS_order2_UE1_average]; 138 | % y=[capacity_RS_order1_UE2_average capacity_RS_order2_UE2_average]; 139 | % k=convhull(x,y); 140 | % x1 = x(k); 141 | % y1 = y(k); 142 | % xx=floor(x1.*10^(5))./(10^(5)); 143 | % ind=find(xx==0); 144 | % [~,ind_ini]=max(x1); 145 | % plot(x1(ind_ini(1):ind),y1(ind_ini(1):ind),'-+','LineWidth',2,'Color', [0.8500 0.3250 0.0980]) 146 | % hold on,grid on 147 | % 148 | % x=[capacity_NOMA_order1_UE1_average capacity_NOMA_order2_UE1_average]; 149 | % y=[capacity_NOMA_order1_UE2_average capacity_NOMA_order2_UE2_average]; 150 | % k=convhull(x,y); 151 | % x1 = x(k); 152 | % y1 = y(k); 153 | % xx=floor(x1.*10^(5))./(10^(5)); 154 | % ind=find(xx==0); 155 | % [~,ind_ini]=max(x1); 156 | % ind=ind(find(ind>ind_ini)); 157 | % plot(x1(ind_ini(1):ind(1)),y1(ind_ini(1):ind(1)),'--','LineWidth',2,'Color',[0.9290 0.6940 0.1250 ]) 158 | % hold on,grid on 159 | % 160 | 161 | figure(1) 162 | plot(reshape(capacity_DPC_UE1_average,[length(u1),1]),reshape(capacity_DPC_UE2_average,[length(u2),1]),'-o','LineWidth',2,'Color', [ 0 0.4470 0.7410]) 163 | hold on,grid on 164 | 165 | x=capacity_MULP_UE1_average; 166 | y=capacity_MULP_UE2_average; 167 | k=convhull(x,y); 168 | x1 = x(k); 169 | y1 = y(k); 170 | xx=floor(x1.*10^(5))./(10^(5)); 171 | ind=find(xx==0); 172 | [~,ind_ini]=max(x1); 173 | plot(x1(ind_ini(1):ind(1)),y1(ind_ini(1):ind(1)),'-.','LineWidth',2,'Color', [0.4660 0.6740 0.1880]) 174 | % legend('DPC','RS','SC-SIC','MU-LP') 175 | legend('DPC','MU-LP') 176 | xlabel('R_1 (bit/s/Hz)') 177 | ylabel('R_2 (bit/s/Hz)') 178 | 179 | 180 | -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/rnd channel fig/AO_RND_-10dB.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Creator: (MATLAB, The Mathworks, Inc. Version 9.8.0.1323502 \(R2020a\). Operating System: Mac OS X) 3 | %%Title: (/Users/James/Desktop/WSR-WMMSE-MIMO-BC/rnd channel fig/AO RND -10dB.eps) 4 | %%CreationDate: 2020-06-12T14:59:07 5 | %%Pages: (atend) 6 | %%BoundingBox: 0 0 560 420 7 | %%LanguageLevel: 3 8 | %%EndComments 9 | %%BeginProlog 10 | %%BeginResource: procset (Apache XML Graphics Std ProcSet) 1.2 0 11 | %%Version: 1.2 0 12 | %%Copyright: (Copyright 2001-2003,2010 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) 13 | /bd{bind def}bind def 14 | /ld{load def}bd 15 | /GR/grestore ld 16 | /GS/gsave ld 17 | /RM/rmoveto ld 18 | /C/curveto ld 19 | /t/show ld 20 | /L/lineto ld 21 | /ML/setmiterlimit ld 22 | /CT/concat ld 23 | /f/fill ld 24 | /N/newpath ld 25 | /S/stroke ld 26 | /CC/setcmykcolor ld 27 | /A/ashow ld 28 | /cp/closepath ld 29 | /RC/setrgbcolor ld 30 | /LJ/setlinejoin ld 31 | /GC/setgray ld 32 | /LW/setlinewidth ld 33 | /M/moveto ld 34 | /re {4 2 roll M 35 | 1 index 0 rlineto 36 | 0 exch rlineto 37 | neg 0 rlineto 38 | cp } bd 39 | /_ctm matrix def 40 | /_tm matrix def 41 | /BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd 42 | /ET { _ctm setmatrix } bd 43 | /iTm { _ctm setmatrix _tm concat } bd 44 | /Tm { _tm astore pop iTm 0 0 moveto } bd 45 | /ux 0.0 def 46 | /uy 0.0 def 47 | /F { 48 | /Tp exch def 49 | /Tf exch def 50 | Tf findfont Tp scalefont setfont 51 | /cf Tf def /cs Tp def 52 | } bd 53 | /ULS {currentpoint /uy exch def /ux exch def} bd 54 | /ULE { 55 | /Tcx currentpoint pop def 56 | gsave 57 | newpath 58 | cf findfont cs scalefont dup 59 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 60 | /UnderlinePosition get Ts mul /To exch def 61 | /UnderlineThickness get Ts mul /Tt exch def 62 | ux uy To add moveto Tcx uy To add lineto 63 | Tt setlinewidth stroke 64 | grestore 65 | } bd 66 | /OLE { 67 | /Tcx currentpoint pop def 68 | gsave 69 | newpath 70 | cf findfont cs scalefont dup 71 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 72 | /UnderlinePosition get Ts mul /To exch def 73 | /UnderlineThickness get Ts mul /Tt exch def 74 | ux uy To add cs add moveto Tcx uy To add cs add lineto 75 | Tt setlinewidth stroke 76 | grestore 77 | } bd 78 | /SOE { 79 | /Tcx currentpoint pop def 80 | gsave 81 | newpath 82 | cf findfont cs scalefont dup 83 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 84 | /UnderlinePosition get Ts mul /To exch def 85 | /UnderlineThickness get Ts mul /Tt exch def 86 | ux uy To add cs 10 mul 26 idiv add moveto Tcx uy To add cs 10 mul 26 idiv add lineto 87 | Tt setlinewidth stroke 88 | grestore 89 | } bd 90 | /QT { 91 | /Y22 exch store 92 | /X22 exch store 93 | /Y21 exch store 94 | /X21 exch store 95 | currentpoint 96 | /Y21 load 2 mul add 3 div exch 97 | /X21 load 2 mul add 3 div exch 98 | /X21 load 2 mul /X22 load add 3 div 99 | /Y21 load 2 mul /Y22 load add 3 div 100 | /X22 load /Y22 load curveto 101 | } bd 102 | /SSPD { 103 | dup length /d exch dict def 104 | { 105 | /v exch def 106 | /k exch def 107 | currentpagedevice k known { 108 | /cpdv currentpagedevice k get def 109 | v cpdv ne { 110 | /upd false def 111 | /nullv v type /nulltype eq def 112 | /nullcpdv cpdv type /nulltype eq def 113 | nullv nullcpdv or 114 | { 115 | /upd true def 116 | } { 117 | /sametype v type cpdv type eq def 118 | sametype { 119 | v type /arraytype eq { 120 | /vlen v length def 121 | /cpdvlen cpdv length def 122 | vlen cpdvlen eq { 123 | 0 1 vlen 1 sub { 124 | /i exch def 125 | /obj v i get def 126 | /cpdobj cpdv i get def 127 | obj cpdobj ne { 128 | /upd true def 129 | exit 130 | } if 131 | } for 132 | } { 133 | /upd true def 134 | } ifelse 135 | } { 136 | v type /dicttype eq { 137 | v { 138 | /dv exch def 139 | /dk exch def 140 | /cpddv cpdv dk get def 141 | dv cpddv ne { 142 | /upd true def 143 | exit 144 | } if 145 | } forall 146 | } { 147 | /upd true def 148 | } ifelse 149 | } ifelse 150 | } if 151 | } ifelse 152 | upd true eq { 153 | d k v put 154 | } if 155 | } if 156 | } if 157 | } forall 158 | d length 0 gt { 159 | d setpagedevice 160 | } if 161 | } bd 162 | /RE { % /NewFontName [NewEncodingArray] /FontName RE - 163 | findfont dup length dict begin 164 | { 165 | 1 index /FID ne 166 | {def} {pop pop} ifelse 167 | } forall 168 | /Encoding exch def 169 | /FontName 1 index def 170 | currentdict definefont pop 171 | end 172 | } bind def 173 | %%EndResource 174 | %%BeginResource: procset (Apache XML Graphics EPS ProcSet) 1.0 0 175 | %%Version: 1.0 0 176 | %%Copyright: (Copyright 2002-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) 177 | /BeginEPSF { %def 178 | /b4_Inc_state save def % Save state for cleanup 179 | /dict_count countdictstack def % Count objects on dict stack 180 | /op_count count 1 sub def % Count objects on operand stack 181 | userdict begin % Push userdict on dict stack 182 | /showpage { } def % Redefine showpage, { } = null proc 183 | 0 setgray 0 setlinecap % Prepare graphics state 184 | 1 setlinewidth 0 setlinejoin 185 | 10 setmiterlimit [ ] 0 setdash newpath 186 | /languagelevel where % If level not equal to 1 then 187 | {pop languagelevel % set strokeadjust and 188 | 1 ne % overprint to their defaults. 189 | {false setstrokeadjust false setoverprint 190 | } if 191 | } if 192 | } bd 193 | /EndEPSF { %def 194 | count op_count sub {pop} repeat % Clean up stacks 195 | countdictstack dict_count sub {end} repeat 196 | b4_Inc_state restore 197 | } bd 198 | %%EndResource 199 | %FOPBeginFontDict 200 | %%IncludeResource: font Courier-Oblique 201 | %%IncludeResource: font Courier-BoldOblique 202 | %%IncludeResource: font Courier-Bold 203 | %%IncludeResource: font ZapfDingbats 204 | %%IncludeResource: font Symbol 205 | %%IncludeResource: font Helvetica 206 | %%IncludeResource: font Helvetica-Oblique 207 | %%IncludeResource: font Helvetica-Bold 208 | %%IncludeResource: font Helvetica-BoldOblique 209 | %%IncludeResource: font Times-Roman 210 | %%IncludeResource: font Times-Italic 211 | %%IncludeResource: font Times-Bold 212 | %%IncludeResource: font Times-BoldItalic 213 | %%IncludeResource: font Courier 214 | %FOPEndFontDict 215 | %%BeginResource: encoding WinAnsiEncoding 216 | /WinAnsiEncoding [ 217 | /.notdef /.notdef /.notdef /.notdef /.notdef 218 | /.notdef /.notdef /.notdef /.notdef /.notdef 219 | /.notdef /.notdef /.notdef /.notdef /.notdef 220 | /.notdef /.notdef /.notdef /.notdef /.notdef 221 | /.notdef /.notdef /.notdef /.notdef /.notdef 222 | /.notdef /.notdef /.notdef /.notdef /.notdef 223 | /.notdef /.notdef /space /exclam /quotedbl 224 | /numbersign /dollar /percent /ampersand /quotesingle 225 | /parenleft /parenright /asterisk /plus /comma 226 | /hyphen /period /slash /zero /one 227 | /two /three /four /five /six 228 | /seven /eight /nine /colon /semicolon 229 | /less /equal /greater /question /at 230 | /A /B /C /D /E 231 | /F /G /H /I /J 232 | /K /L /M /N /O 233 | /P /Q /R /S /T 234 | /U /V /W /X /Y 235 | /Z /bracketleft /backslash /bracketright /asciicircum 236 | /underscore /quoteleft /a /b /c 237 | /d /e /f /g /h 238 | /i /j /k /l /m 239 | /n /o /p /q /r 240 | /s /t /u /v /w 241 | /x /y /z /braceleft /bar 242 | /braceright /asciitilde /bullet /Euro /bullet 243 | /quotesinglbase /florin /quotedblbase /ellipsis /dagger 244 | /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft 245 | /OE /bullet /Zcaron /bullet /bullet 246 | /quoteleft /quoteright /quotedblleft /quotedblright /bullet 247 | /endash /emdash /asciitilde /trademark /scaron 248 | /guilsinglright /oe /bullet /zcaron /Ydieresis 249 | /space /exclamdown /cent /sterling /currency 250 | /yen /brokenbar /section /dieresis /copyright 251 | /ordfeminine /guillemotleft /logicalnot /sfthyphen /registered 252 | /macron /degree /plusminus /twosuperior /threesuperior 253 | /acute /mu /paragraph /middot /cedilla 254 | /onesuperior /ordmasculine /guillemotright /onequarter /onehalf 255 | /threequarters /questiondown /Agrave /Aacute /Acircumflex 256 | /Atilde /Adieresis /Aring /AE /Ccedilla 257 | /Egrave /Eacute /Ecircumflex /Edieresis /Igrave 258 | /Iacute /Icircumflex /Idieresis /Eth /Ntilde 259 | /Ograve /Oacute /Ocircumflex /Otilde /Odieresis 260 | /multiply /Oslash /Ugrave /Uacute /Ucircumflex 261 | /Udieresis /Yacute /Thorn /germandbls /agrave 262 | /aacute /acircumflex /atilde /adieresis /aring 263 | /ae /ccedilla /egrave /eacute /ecircumflex 264 | /edieresis /igrave /iacute /icircumflex /idieresis 265 | /eth /ntilde /ograve /oacute /ocircumflex 266 | /otilde /odieresis /divide /oslash /ugrave 267 | /uacute /ucircumflex /udieresis /yacute /thorn 268 | /ydieresis 269 | ] def 270 | %%EndResource 271 | %FOPBeginFontReencode 272 | /Courier-Oblique findfont 273 | dup length dict begin 274 | {1 index /FID ne {def} {pop pop} ifelse} forall 275 | /Encoding WinAnsiEncoding def 276 | currentdict 277 | end 278 | /Courier-Oblique exch definefont pop 279 | /Courier-BoldOblique findfont 280 | dup length dict begin 281 | {1 index /FID ne {def} {pop pop} ifelse} forall 282 | /Encoding WinAnsiEncoding def 283 | currentdict 284 | end 285 | /Courier-BoldOblique exch definefont pop 286 | /Courier-Bold findfont 287 | dup length dict begin 288 | {1 index /FID ne {def} {pop pop} ifelse} forall 289 | /Encoding WinAnsiEncoding def 290 | currentdict 291 | end 292 | /Courier-Bold exch definefont pop 293 | /Helvetica findfont 294 | dup length dict begin 295 | {1 index /FID ne {def} {pop pop} ifelse} forall 296 | /Encoding WinAnsiEncoding def 297 | currentdict 298 | end 299 | /Helvetica exch definefont pop 300 | /Helvetica-Oblique findfont 301 | dup length dict begin 302 | {1 index /FID ne {def} {pop pop} ifelse} forall 303 | /Encoding WinAnsiEncoding def 304 | currentdict 305 | end 306 | /Helvetica-Oblique exch definefont pop 307 | /Helvetica-Bold findfont 308 | dup length dict begin 309 | {1 index /FID ne {def} {pop pop} ifelse} forall 310 | /Encoding WinAnsiEncoding def 311 | currentdict 312 | end 313 | /Helvetica-Bold exch definefont pop 314 | /Helvetica-BoldOblique findfont 315 | dup length dict begin 316 | {1 index /FID ne {def} {pop pop} ifelse} forall 317 | /Encoding WinAnsiEncoding def 318 | currentdict 319 | end 320 | /Helvetica-BoldOblique exch definefont pop 321 | /Times-Roman findfont 322 | dup length dict begin 323 | {1 index /FID ne {def} {pop pop} ifelse} forall 324 | /Encoding WinAnsiEncoding def 325 | currentdict 326 | end 327 | /Times-Roman exch definefont pop 328 | /Times-Italic findfont 329 | dup length dict begin 330 | {1 index /FID ne {def} {pop pop} ifelse} forall 331 | /Encoding WinAnsiEncoding def 332 | currentdict 333 | end 334 | /Times-Italic exch definefont pop 335 | /Times-Bold findfont 336 | dup length dict begin 337 | {1 index /FID ne {def} {pop pop} ifelse} forall 338 | /Encoding WinAnsiEncoding def 339 | currentdict 340 | end 341 | /Times-Bold exch definefont pop 342 | /Times-BoldItalic findfont 343 | dup length dict begin 344 | {1 index /FID ne {def} {pop pop} ifelse} forall 345 | /Encoding WinAnsiEncoding def 346 | currentdict 347 | end 348 | /Times-BoldItalic exch definefont pop 349 | /Courier findfont 350 | dup length dict begin 351 | {1 index /FID ne {def} {pop pop} ifelse} forall 352 | /Encoding WinAnsiEncoding def 353 | currentdict 354 | end 355 | /Courier exch definefont pop 356 | %FOPEndFontReencode 357 | %%EndProlog 358 | %%Page: 1 1 359 | %%PageBoundingBox: 0 0 560 420 360 | %%BeginPageSetup 361 | [1 0 0 -1 0 420] CT 362 | %%EndPageSetup 363 | GS 364 | 1 GC 365 | N 366 | 0 0 560 420 re 367 | f 368 | GR 369 | GS 370 | 1 GC 371 | N 372 | 0 0 560 420 re 373 | f 374 | GR 375 | GS 376 | 1 GC 377 | N 378 | 73 374 M 379 | 507 374 L 380 | 507 31.5 L 381 | 73 31.5 L 382 | cp 383 | f 384 | GR 385 | GS 386 | 0.149 GC 387 | 2 setlinecap 388 | 1 LJ 389 | 0.5 LW 390 | N 391 | 73 374 M 392 | 507 374 L 393 | S 394 | GR 395 | GS 396 | 0.149 GC 397 | 2 setlinecap 398 | 1 LJ 399 | 0.5 LW 400 | N 401 | 73 31.5 M 402 | 507 31.5 L 403 | S 404 | GR 405 | GS 406 | 0.149 GC 407 | 2 setlinecap 408 | 1 LJ 409 | 0.5 LW 410 | N 411 | 144.333 374 M 412 | 144.333 369.66 L 413 | S 414 | GR 415 | GS 416 | 0.149 GC 417 | 2 setlinecap 418 | 1 LJ 419 | 0.5 LW 420 | N 421 | 216.667 374 M 422 | 216.667 369.66 L 423 | S 424 | GR 425 | GS 426 | 0.149 GC 427 | 2 setlinecap 428 | 1 LJ 429 | 0.5 LW 430 | N 431 | 289 374 M 432 | 289 369.66 L 433 | S 434 | GR 435 | GS 436 | 0.149 GC 437 | 2 setlinecap 438 | 1 LJ 439 | 0.5 LW 440 | N 441 | 361.333 374 M 442 | 361.333 369.66 L 443 | S 444 | GR 445 | GS 446 | 0.149 GC 447 | 2 setlinecap 448 | 1 LJ 449 | 0.5 LW 450 | N 451 | 433.667 374 M 452 | 433.667 369.66 L 453 | S 454 | GR 455 | GS 456 | 0.149 GC 457 | 2 setlinecap 458 | 1 LJ 459 | 0.5 LW 460 | N 461 | 506 374 M 462 | 506 369.66 L 463 | S 464 | GR 465 | GS 466 | 0.149 GC 467 | 2 setlinecap 468 | 1 LJ 469 | 0.5 LW 470 | N 471 | 144.333 31.5 M 472 | 144.333 35.84 L 473 | S 474 | GR 475 | GS 476 | 0.149 GC 477 | 2 setlinecap 478 | 1 LJ 479 | 0.5 LW 480 | N 481 | 216.667 31.5 M 482 | 216.667 35.84 L 483 | S 484 | GR 485 | GS 486 | 0.149 GC 487 | 2 setlinecap 488 | 1 LJ 489 | 0.5 LW 490 | N 491 | 289 31.5 M 492 | 289 35.84 L 493 | S 494 | GR 495 | GS 496 | 0.149 GC 497 | 2 setlinecap 498 | 1 LJ 499 | 0.5 LW 500 | N 501 | 361.333 31.5 M 502 | 361.333 35.84 L 503 | S 504 | GR 505 | GS 506 | 0.149 GC 507 | 2 setlinecap 508 | 1 LJ 509 | 0.5 LW 510 | N 511 | 433.667 31.5 M 512 | 433.667 35.84 L 513 | S 514 | GR 515 | GS 516 | 0.149 GC 517 | 2 setlinecap 518 | 1 LJ 519 | 0.5 LW 520 | N 521 | 506 31.5 M 522 | 506 35.84 L 523 | S 524 | GR 525 | GS 526 | [1 0 0 1 144.33333 378] CT 527 | 0.149 GC 528 | /Helvetica 10 F 529 | GS 530 | [1 0 0 1 0 0] CT 531 | -7 10 moveto 532 | 1 -1 scale 533 | (0.2) t 534 | GR 535 | GR 536 | GS 537 | [1 0 0 1 216.66667 378] CT 538 | 0.149 GC 539 | /Helvetica 10 F 540 | GS 541 | [1 0 0 1 0 0] CT 542 | -7 10 moveto 543 | 1 -1 scale 544 | (0.4) t 545 | GR 546 | GR 547 | GS 548 | [1 0 0 1 289 378] CT 549 | 0.149 GC 550 | /Helvetica 10 F 551 | GS 552 | [1 0 0 1 0 0] CT 553 | -7 10 moveto 554 | 1 -1 scale 555 | (0.6) t 556 | GR 557 | GR 558 | GS 559 | [1 0 0 1 361.33334 378] CT 560 | 0.149 GC 561 | /Helvetica 10 F 562 | GS 563 | [1 0 0 1 0 0] CT 564 | -7 10 moveto 565 | 1 -1 scale 566 | (0.8) t 567 | GR 568 | GR 569 | GS 570 | [1 0 0 1 433.66666 378] CT 571 | 0.149 GC 572 | /Helvetica 10 F 573 | GS 574 | [1 0 0 1 0 0] CT 575 | -3 10 moveto 576 | 1 -1 scale 577 | (1) t 578 | GR 579 | GR 580 | GS 581 | [1 0 0 1 506.00003 378] CT 582 | 0.149 GC 583 | /Helvetica 10 F 584 | GS 585 | [1 0 0 1 0 0] CT 586 | -7 10 moveto 587 | 1 -1 scale 588 | (1.2) t 589 | GR 590 | GR 591 | GS 592 | [1 0 0 1 290.00021 391.5] CT 593 | 0.149 GC 594 | /Helvetica 11 F 595 | GS 596 | [1 0 0 1 0 0] CT 597 | -7 11 moveto 598 | 1 -1 scale 599 | (R1) t 600 | GR 601 | GR 602 | GS 603 | 0.149 GC 604 | 2 setlinecap 605 | 1 LJ 606 | 0.5 LW 607 | N 608 | 73 374 M 609 | 73 31.5 L 610 | S 611 | GR 612 | GS 613 | 0.149 GC 614 | 2 setlinecap 615 | 1 LJ 616 | 0.5 LW 617 | N 618 | 507 374 M 619 | 507 31.5 L 620 | S 621 | GR 622 | GS 623 | 0.149 GC 624 | 2 setlinecap 625 | 1 LJ 626 | 0.5 LW 627 | N 628 | 73 373 M 629 | 77.34 373 L 630 | S 631 | GR 632 | GS 633 | 0.149 GC 634 | 2 setlinecap 635 | 1 LJ 636 | 0.5 LW 637 | N 638 | 73 315.917 M 639 | 77.34 315.917 L 640 | S 641 | GR 642 | GS 643 | 0.149 GC 644 | 2 setlinecap 645 | 1 LJ 646 | 0.5 LW 647 | N 648 | 73 258.833 M 649 | 77.34 258.833 L 650 | S 651 | GR 652 | GS 653 | 0.149 GC 654 | 2 setlinecap 655 | 1 LJ 656 | 0.5 LW 657 | N 658 | 73 201.75 M 659 | 77.34 201.75 L 660 | S 661 | GR 662 | GS 663 | 0.149 GC 664 | 2 setlinecap 665 | 1 LJ 666 | 0.5 LW 667 | N 668 | 73 144.667 M 669 | 77.34 144.667 L 670 | S 671 | GR 672 | GS 673 | 0.149 GC 674 | 2 setlinecap 675 | 1 LJ 676 | 0.5 LW 677 | N 678 | 73 87.583 M 679 | 77.34 87.583 L 680 | S 681 | GR 682 | GS 683 | 0.149 GC 684 | 2 setlinecap 685 | 1 LJ 686 | 0.5 LW 687 | N 688 | 507 373 M 689 | 502.66 373 L 690 | S 691 | GR 692 | GS 693 | 0.149 GC 694 | 2 setlinecap 695 | 1 LJ 696 | 0.5 LW 697 | N 698 | 507 315.917 M 699 | 502.66 315.917 L 700 | S 701 | GR 702 | GS 703 | 0.149 GC 704 | 2 setlinecap 705 | 1 LJ 706 | 0.5 LW 707 | N 708 | 507 258.833 M 709 | 502.66 258.833 L 710 | S 711 | GR 712 | GS 713 | 0.149 GC 714 | 2 setlinecap 715 | 1 LJ 716 | 0.5 LW 717 | N 718 | 507 201.75 M 719 | 502.66 201.75 L 720 | S 721 | GR 722 | GS 723 | 0.149 GC 724 | 2 setlinecap 725 | 1 LJ 726 | 0.5 LW 727 | N 728 | 507 144.667 M 729 | 502.66 144.667 L 730 | S 731 | GR 732 | GS 733 | 0.149 GC 734 | 2 setlinecap 735 | 1 LJ 736 | 0.5 LW 737 | N 738 | 507 87.583 M 739 | 502.66 87.583 L 740 | S 741 | GR 742 | GS 743 | [1 0 0 1 69 373] CT 744 | 0.149 GC 745 | /Helvetica 10 F 746 | GS 747 | [1 0 0 1 0 0] CT 748 | -6 3.5 moveto 749 | 1 -1 scale 750 | (0) t 751 | GR 752 | GR 753 | GS 754 | [1 0 0 1 69 315.91666] CT 755 | 0.149 GC 756 | /Helvetica 10 F 757 | GS 758 | [1 0 0 1 0 0] CT 759 | -14 3.5 moveto 760 | 1 -1 scale 761 | (0.2) t 762 | GR 763 | GR 764 | GS 765 | [1 0 0 1 69 258.83334] CT 766 | 0.149 GC 767 | /Helvetica 10 F 768 | GS 769 | [1 0 0 1 0 0] CT 770 | -14 3.5 moveto 771 | 1 -1 scale 772 | (0.4) t 773 | GR 774 | GR 775 | GS 776 | [1 0 0 1 69 201.75] CT 777 | 0.149 GC 778 | /Helvetica 10 F 779 | GS 780 | [1 0 0 1 0 0] CT 781 | -14 3.5 moveto 782 | 1 -1 scale 783 | (0.6) t 784 | GR 785 | GR 786 | GS 787 | [1 0 0 1 69 144.66666] CT 788 | 0.149 GC 789 | /Helvetica 10 F 790 | GS 791 | [1 0 0 1 0 0] CT 792 | -14 3.5 moveto 793 | 1 -1 scale 794 | (0.8) t 795 | GR 796 | GR 797 | GS 798 | [1 0 0 1 69 87.58334] CT 799 | 0.149 GC 800 | /Helvetica 10 F 801 | GS 802 | [1 0 0 1 0 0] CT 803 | -6 3.5 moveto 804 | 1 -1 scale 805 | (1) t 806 | GR 807 | GR 808 | GS 809 | [0 -1 1 0 52 202.74983] CT 810 | 0.149 GC 811 | /Helvetica 11 F 812 | GS 813 | [1 0 0 1 0 0] CT 814 | -7 -3 moveto 815 | 1 -1 scale 816 | (R2) t 817 | GR 818 | GR 819 | GS 820 | [1 0 0 1 290.00027 30.125] CT 821 | /Helvetica-Bold 11 F 822 | GS 823 | [1 0 0 1 0 0] CT 824 | -49.5 -3 moveto 825 | 1 -1 scale 826 | (WSR-MMSE,-10dB) t 827 | GR 828 | GR 829 | GS 830 | 0 0 1 RC 831 | 1 LJ 832 | 0.5 LW 833 | N 834 | 450.406 373 M 835 | 72.948 64.086 L 836 | S 837 | GR 838 | GS 839 | [1 0 0 1 450.40607 373] CT 840 | 0 0 1 RC 841 | N 842 | 0 -2.75 M 843 | 1.519 -2.75 2.75 -1.519 2.75 0 C 844 | 2.75 0 L 845 | 2.75 1.519 1.519 2.75 0 2.75 C 846 | -1.519 2.75 -2.75 1.519 -2.75 0 C 847 | -2.75 -1.519 -1.519 -2.75 0 -2.75 C 848 | cp 849 | 0 -3.25 M 850 | -1.795 -3.25 -3.25 -1.795 -3.25 0 C 851 | -3.25 1.795 -1.795 3.25 0 3.25 C 852 | 1.795 3.25 3.25 1.795 3.25 0 C 853 | 3.25 0 L 854 | 3.25 -1.795 1.795 -3.25 0 -3.25 C 855 | cp 856 | f 857 | GR 858 | %%Trailer 859 | %%Pages: 1 860 | %%EOF 861 | -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/user angle/AO_1div9_10dB.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Creator: (MATLAB, The Mathworks, Inc. Version 9.8.0.1323502 \(R2020a\). Operating System: Mac OS X) 3 | %%Title: (/Users/James/Desktop/WSR-WMMSE-MIMO-BC/user angle /1div9_10dB.eps) 4 | %%CreationDate: 2020-06-12T15:28:28 5 | %%Pages: (atend) 6 | %%BoundingBox: 0 0 560 420 7 | %%LanguageLevel: 3 8 | %%EndComments 9 | %%BeginProlog 10 | %%BeginResource: procset (Apache XML Graphics Std ProcSet) 1.2 0 11 | %%Version: 1.2 0 12 | %%Copyright: (Copyright 2001-2003,2010 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) 13 | /bd{bind def}bind def 14 | /ld{load def}bd 15 | /GR/grestore ld 16 | /GS/gsave ld 17 | /RM/rmoveto ld 18 | /C/curveto ld 19 | /t/show ld 20 | /L/lineto ld 21 | /ML/setmiterlimit ld 22 | /CT/concat ld 23 | /f/fill ld 24 | /N/newpath ld 25 | /S/stroke ld 26 | /CC/setcmykcolor ld 27 | /A/ashow ld 28 | /cp/closepath ld 29 | /RC/setrgbcolor ld 30 | /LJ/setlinejoin ld 31 | /GC/setgray ld 32 | /LW/setlinewidth ld 33 | /M/moveto ld 34 | /re {4 2 roll M 35 | 1 index 0 rlineto 36 | 0 exch rlineto 37 | neg 0 rlineto 38 | cp } bd 39 | /_ctm matrix def 40 | /_tm matrix def 41 | /BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd 42 | /ET { _ctm setmatrix } bd 43 | /iTm { _ctm setmatrix _tm concat } bd 44 | /Tm { _tm astore pop iTm 0 0 moveto } bd 45 | /ux 0.0 def 46 | /uy 0.0 def 47 | /F { 48 | /Tp exch def 49 | /Tf exch def 50 | Tf findfont Tp scalefont setfont 51 | /cf Tf def /cs Tp def 52 | } bd 53 | /ULS {currentpoint /uy exch def /ux exch def} bd 54 | /ULE { 55 | /Tcx currentpoint pop def 56 | gsave 57 | newpath 58 | cf findfont cs scalefont dup 59 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 60 | /UnderlinePosition get Ts mul /To exch def 61 | /UnderlineThickness get Ts mul /Tt exch def 62 | ux uy To add moveto Tcx uy To add lineto 63 | Tt setlinewidth stroke 64 | grestore 65 | } bd 66 | /OLE { 67 | /Tcx currentpoint pop def 68 | gsave 69 | newpath 70 | cf findfont cs scalefont dup 71 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 72 | /UnderlinePosition get Ts mul /To exch def 73 | /UnderlineThickness get Ts mul /Tt exch def 74 | ux uy To add cs add moveto Tcx uy To add cs add lineto 75 | Tt setlinewidth stroke 76 | grestore 77 | } bd 78 | /SOE { 79 | /Tcx currentpoint pop def 80 | gsave 81 | newpath 82 | cf findfont cs scalefont dup 83 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 84 | /UnderlinePosition get Ts mul /To exch def 85 | /UnderlineThickness get Ts mul /Tt exch def 86 | ux uy To add cs 10 mul 26 idiv add moveto Tcx uy To add cs 10 mul 26 idiv add lineto 87 | Tt setlinewidth stroke 88 | grestore 89 | } bd 90 | /QT { 91 | /Y22 exch store 92 | /X22 exch store 93 | /Y21 exch store 94 | /X21 exch store 95 | currentpoint 96 | /Y21 load 2 mul add 3 div exch 97 | /X21 load 2 mul add 3 div exch 98 | /X21 load 2 mul /X22 load add 3 div 99 | /Y21 load 2 mul /Y22 load add 3 div 100 | /X22 load /Y22 load curveto 101 | } bd 102 | /SSPD { 103 | dup length /d exch dict def 104 | { 105 | /v exch def 106 | /k exch def 107 | currentpagedevice k known { 108 | /cpdv currentpagedevice k get def 109 | v cpdv ne { 110 | /upd false def 111 | /nullv v type /nulltype eq def 112 | /nullcpdv cpdv type /nulltype eq def 113 | nullv nullcpdv or 114 | { 115 | /upd true def 116 | } { 117 | /sametype v type cpdv type eq def 118 | sametype { 119 | v type /arraytype eq { 120 | /vlen v length def 121 | /cpdvlen cpdv length def 122 | vlen cpdvlen eq { 123 | 0 1 vlen 1 sub { 124 | /i exch def 125 | /obj v i get def 126 | /cpdobj cpdv i get def 127 | obj cpdobj ne { 128 | /upd true def 129 | exit 130 | } if 131 | } for 132 | } { 133 | /upd true def 134 | } ifelse 135 | } { 136 | v type /dicttype eq { 137 | v { 138 | /dv exch def 139 | /dk exch def 140 | /cpddv cpdv dk get def 141 | dv cpddv ne { 142 | /upd true def 143 | exit 144 | } if 145 | } forall 146 | } { 147 | /upd true def 148 | } ifelse 149 | } ifelse 150 | } if 151 | } ifelse 152 | upd true eq { 153 | d k v put 154 | } if 155 | } if 156 | } if 157 | } forall 158 | d length 0 gt { 159 | d setpagedevice 160 | } if 161 | } bd 162 | /RE { % /NewFontName [NewEncodingArray] /FontName RE - 163 | findfont dup length dict begin 164 | { 165 | 1 index /FID ne 166 | {def} {pop pop} ifelse 167 | } forall 168 | /Encoding exch def 169 | /FontName 1 index def 170 | currentdict definefont pop 171 | end 172 | } bind def 173 | %%EndResource 174 | %%BeginResource: procset (Apache XML Graphics EPS ProcSet) 1.0 0 175 | %%Version: 1.0 0 176 | %%Copyright: (Copyright 2002-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) 177 | /BeginEPSF { %def 178 | /b4_Inc_state save def % Save state for cleanup 179 | /dict_count countdictstack def % Count objects on dict stack 180 | /op_count count 1 sub def % Count objects on operand stack 181 | userdict begin % Push userdict on dict stack 182 | /showpage { } def % Redefine showpage, { } = null proc 183 | 0 setgray 0 setlinecap % Prepare graphics state 184 | 1 setlinewidth 0 setlinejoin 185 | 10 setmiterlimit [ ] 0 setdash newpath 186 | /languagelevel where % If level not equal to 1 then 187 | {pop languagelevel % set strokeadjust and 188 | 1 ne % overprint to their defaults. 189 | {false setstrokeadjust false setoverprint 190 | } if 191 | } if 192 | } bd 193 | /EndEPSF { %def 194 | count op_count sub {pop} repeat % Clean up stacks 195 | countdictstack dict_count sub {end} repeat 196 | b4_Inc_state restore 197 | } bd 198 | %%EndResource 199 | %FOPBeginFontDict 200 | %%IncludeResource: font Courier-Oblique 201 | %%IncludeResource: font Courier-BoldOblique 202 | %%IncludeResource: font Courier-Bold 203 | %%IncludeResource: font ZapfDingbats 204 | %%IncludeResource: font Symbol 205 | %%IncludeResource: font Helvetica 206 | %%IncludeResource: font Helvetica-Oblique 207 | %%IncludeResource: font Helvetica-Bold 208 | %%IncludeResource: font Helvetica-BoldOblique 209 | %%IncludeResource: font Times-Roman 210 | %%IncludeResource: font Times-Italic 211 | %%IncludeResource: font Times-Bold 212 | %%IncludeResource: font Times-BoldItalic 213 | %%IncludeResource: font Courier 214 | %FOPEndFontDict 215 | %%BeginResource: encoding WinAnsiEncoding 216 | /WinAnsiEncoding [ 217 | /.notdef /.notdef /.notdef /.notdef /.notdef 218 | /.notdef /.notdef /.notdef /.notdef /.notdef 219 | /.notdef /.notdef /.notdef /.notdef /.notdef 220 | /.notdef /.notdef /.notdef /.notdef /.notdef 221 | /.notdef /.notdef /.notdef /.notdef /.notdef 222 | /.notdef /.notdef /.notdef /.notdef /.notdef 223 | /.notdef /.notdef /space /exclam /quotedbl 224 | /numbersign /dollar /percent /ampersand /quotesingle 225 | /parenleft /parenright /asterisk /plus /comma 226 | /hyphen /period /slash /zero /one 227 | /two /three /four /five /six 228 | /seven /eight /nine /colon /semicolon 229 | /less /equal /greater /question /at 230 | /A /B /C /D /E 231 | /F /G /H /I /J 232 | /K /L /M /N /O 233 | /P /Q /R /S /T 234 | /U /V /W /X /Y 235 | /Z /bracketleft /backslash /bracketright /asciicircum 236 | /underscore /quoteleft /a /b /c 237 | /d /e /f /g /h 238 | /i /j /k /l /m 239 | /n /o /p /q /r 240 | /s /t /u /v /w 241 | /x /y /z /braceleft /bar 242 | /braceright /asciitilde /bullet /Euro /bullet 243 | /quotesinglbase /florin /quotedblbase /ellipsis /dagger 244 | /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft 245 | /OE /bullet /Zcaron /bullet /bullet 246 | /quoteleft /quoteright /quotedblleft /quotedblright /bullet 247 | /endash /emdash /asciitilde /trademark /scaron 248 | /guilsinglright /oe /bullet /zcaron /Ydieresis 249 | /space /exclamdown /cent /sterling /currency 250 | /yen /brokenbar /section /dieresis /copyright 251 | /ordfeminine /guillemotleft /logicalnot /sfthyphen /registered 252 | /macron /degree /plusminus /twosuperior /threesuperior 253 | /acute /mu /paragraph /middot /cedilla 254 | /onesuperior /ordmasculine /guillemotright /onequarter /onehalf 255 | /threequarters /questiondown /Agrave /Aacute /Acircumflex 256 | /Atilde /Adieresis /Aring /AE /Ccedilla 257 | /Egrave /Eacute /Ecircumflex /Edieresis /Igrave 258 | /Iacute /Icircumflex /Idieresis /Eth /Ntilde 259 | /Ograve /Oacute /Ocircumflex /Otilde /Odieresis 260 | /multiply /Oslash /Ugrave /Uacute /Ucircumflex 261 | /Udieresis /Yacute /Thorn /germandbls /agrave 262 | /aacute /acircumflex /atilde /adieresis /aring 263 | /ae /ccedilla /egrave /eacute /ecircumflex 264 | /edieresis /igrave /iacute /icircumflex /idieresis 265 | /eth /ntilde /ograve /oacute /ocircumflex 266 | /otilde /odieresis /divide /oslash /ugrave 267 | /uacute /ucircumflex /udieresis /yacute /thorn 268 | /ydieresis 269 | ] def 270 | %%EndResource 271 | %FOPBeginFontReencode 272 | /Courier-Oblique findfont 273 | dup length dict begin 274 | {1 index /FID ne {def} {pop pop} ifelse} forall 275 | /Encoding WinAnsiEncoding def 276 | currentdict 277 | end 278 | /Courier-Oblique exch definefont pop 279 | /Courier-BoldOblique findfont 280 | dup length dict begin 281 | {1 index /FID ne {def} {pop pop} ifelse} forall 282 | /Encoding WinAnsiEncoding def 283 | currentdict 284 | end 285 | /Courier-BoldOblique exch definefont pop 286 | /Courier-Bold findfont 287 | dup length dict begin 288 | {1 index /FID ne {def} {pop pop} ifelse} forall 289 | /Encoding WinAnsiEncoding def 290 | currentdict 291 | end 292 | /Courier-Bold exch definefont pop 293 | /Helvetica findfont 294 | dup length dict begin 295 | {1 index /FID ne {def} {pop pop} ifelse} forall 296 | /Encoding WinAnsiEncoding def 297 | currentdict 298 | end 299 | /Helvetica exch definefont pop 300 | /Helvetica-Oblique findfont 301 | dup length dict begin 302 | {1 index /FID ne {def} {pop pop} ifelse} forall 303 | /Encoding WinAnsiEncoding def 304 | currentdict 305 | end 306 | /Helvetica-Oblique exch definefont pop 307 | /Helvetica-Bold findfont 308 | dup length dict begin 309 | {1 index /FID ne {def} {pop pop} ifelse} forall 310 | /Encoding WinAnsiEncoding def 311 | currentdict 312 | end 313 | /Helvetica-Bold exch definefont pop 314 | /Helvetica-BoldOblique findfont 315 | dup length dict begin 316 | {1 index /FID ne {def} {pop pop} ifelse} forall 317 | /Encoding WinAnsiEncoding def 318 | currentdict 319 | end 320 | /Helvetica-BoldOblique exch definefont pop 321 | /Times-Roman findfont 322 | dup length dict begin 323 | {1 index /FID ne {def} {pop pop} ifelse} forall 324 | /Encoding WinAnsiEncoding def 325 | currentdict 326 | end 327 | /Times-Roman exch definefont pop 328 | /Times-Italic findfont 329 | dup length dict begin 330 | {1 index /FID ne {def} {pop pop} ifelse} forall 331 | /Encoding WinAnsiEncoding def 332 | currentdict 333 | end 334 | /Times-Italic exch definefont pop 335 | /Times-Bold findfont 336 | dup length dict begin 337 | {1 index /FID ne {def} {pop pop} ifelse} forall 338 | /Encoding WinAnsiEncoding def 339 | currentdict 340 | end 341 | /Times-Bold exch definefont pop 342 | /Times-BoldItalic findfont 343 | dup length dict begin 344 | {1 index /FID ne {def} {pop pop} ifelse} forall 345 | /Encoding WinAnsiEncoding def 346 | currentdict 347 | end 348 | /Times-BoldItalic exch definefont pop 349 | /Courier findfont 350 | dup length dict begin 351 | {1 index /FID ne {def} {pop pop} ifelse} forall 352 | /Encoding WinAnsiEncoding def 353 | currentdict 354 | end 355 | /Courier exch definefont pop 356 | %FOPEndFontReencode 357 | %%EndProlog 358 | %%Page: 1 1 359 | %%PageBoundingBox: 0 0 560 420 360 | %%BeginPageSetup 361 | [1 0 0 -1 0 420] CT 362 | %%EndPageSetup 363 | GS 364 | 1 GC 365 | N 366 | 0 0 560 420 re 367 | f 368 | GR 369 | GS 370 | 1 GC 371 | N 372 | 0 0 560 420 re 373 | f 374 | GR 375 | GS 376 | 1 GC 377 | N 378 | 73 374 M 379 | 507 374 L 380 | 507 31.5 L 381 | 73 31.5 L 382 | cp 383 | f 384 | GR 385 | GS 386 | 0.149 GC 387 | 2 setlinecap 388 | 1 LJ 389 | 0.5 LW 390 | N 391 | 73 374 M 392 | 507 374 L 393 | S 394 | GR 395 | GS 396 | 0.149 GC 397 | 2 setlinecap 398 | 1 LJ 399 | 0.5 LW 400 | N 401 | 73 31.5 M 402 | 507 31.5 L 403 | S 404 | GR 405 | GS 406 | 0.149 GC 407 | 2 setlinecap 408 | 1 LJ 409 | 0.5 LW 410 | N 411 | 73 374 M 412 | 73 369.66 L 413 | S 414 | GR 415 | GS 416 | 0.149 GC 417 | 2 setlinecap 418 | 1 LJ 419 | 0.5 LW 420 | N 421 | 135 374 M 422 | 135 369.66 L 423 | S 424 | GR 425 | GS 426 | 0.149 GC 427 | 2 setlinecap 428 | 1 LJ 429 | 0.5 LW 430 | N 431 | 197 374 M 432 | 197 369.66 L 433 | S 434 | GR 435 | GS 436 | 0.149 GC 437 | 2 setlinecap 438 | 1 LJ 439 | 0.5 LW 440 | N 441 | 259 374 M 442 | 259 369.66 L 443 | S 444 | GR 445 | GS 446 | 0.149 GC 447 | 2 setlinecap 448 | 1 LJ 449 | 0.5 LW 450 | N 451 | 321 374 M 452 | 321 369.66 L 453 | S 454 | GR 455 | GS 456 | 0.149 GC 457 | 2 setlinecap 458 | 1 LJ 459 | 0.5 LW 460 | N 461 | 383 374 M 462 | 383 369.66 L 463 | S 464 | GR 465 | GS 466 | 0.149 GC 467 | 2 setlinecap 468 | 1 LJ 469 | 0.5 LW 470 | N 471 | 445 374 M 472 | 445 369.66 L 473 | S 474 | GR 475 | GS 476 | 0.149 GC 477 | 2 setlinecap 478 | 1 LJ 479 | 0.5 LW 480 | N 481 | 507 374 M 482 | 507 369.66 L 483 | S 484 | GR 485 | GS 486 | 0.149 GC 487 | 2 setlinecap 488 | 1 LJ 489 | 0.5 LW 490 | N 491 | 73 31.5 M 492 | 73 35.84 L 493 | S 494 | GR 495 | GS 496 | 0.149 GC 497 | 2 setlinecap 498 | 1 LJ 499 | 0.5 LW 500 | N 501 | 135 31.5 M 502 | 135 35.84 L 503 | S 504 | GR 505 | GS 506 | 0.149 GC 507 | 2 setlinecap 508 | 1 LJ 509 | 0.5 LW 510 | N 511 | 197 31.5 M 512 | 197 35.84 L 513 | S 514 | GR 515 | GS 516 | 0.149 GC 517 | 2 setlinecap 518 | 1 LJ 519 | 0.5 LW 520 | N 521 | 259 31.5 M 522 | 259 35.84 L 523 | S 524 | GR 525 | GS 526 | 0.149 GC 527 | 2 setlinecap 528 | 1 LJ 529 | 0.5 LW 530 | N 531 | 321 31.5 M 532 | 321 35.84 L 533 | S 534 | GR 535 | GS 536 | 0.149 GC 537 | 2 setlinecap 538 | 1 LJ 539 | 0.5 LW 540 | N 541 | 383 31.5 M 542 | 383 35.84 L 543 | S 544 | GR 545 | GS 546 | 0.149 GC 547 | 2 setlinecap 548 | 1 LJ 549 | 0.5 LW 550 | N 551 | 445 31.5 M 552 | 445 35.84 L 553 | S 554 | GR 555 | GS 556 | 0.149 GC 557 | 2 setlinecap 558 | 1 LJ 559 | 0.5 LW 560 | N 561 | 507 31.5 M 562 | 507 35.84 L 563 | S 564 | GR 565 | GS 566 | [1 0 0 1 73 378] CT 567 | 0.149 GC 568 | /Helvetica 10 F 569 | GS 570 | [1 0 0 1 0 0] CT 571 | -3 10 moveto 572 | 1 -1 scale 573 | (0) t 574 | GR 575 | GR 576 | GS 577 | [1 0 0 1 135 378] CT 578 | 0.149 GC 579 | /Helvetica 10 F 580 | GS 581 | [1 0 0 1 0 0] CT 582 | -3 10 moveto 583 | 1 -1 scale 584 | (1) t 585 | GR 586 | GR 587 | GS 588 | [1 0 0 1 197 378] CT 589 | 0.149 GC 590 | /Helvetica 10 F 591 | GS 592 | [1 0 0 1 0 0] CT 593 | -3 10 moveto 594 | 1 -1 scale 595 | (2) t 596 | GR 597 | GR 598 | GS 599 | [1 0 0 1 259 378] CT 600 | 0.149 GC 601 | /Helvetica 10 F 602 | GS 603 | [1 0 0 1 0 0] CT 604 | -3 10 moveto 605 | 1 -1 scale 606 | (3) t 607 | GR 608 | GR 609 | GS 610 | [1 0 0 1 321 378] CT 611 | 0.149 GC 612 | /Helvetica 10 F 613 | GS 614 | [1 0 0 1 0 0] CT 615 | -3 10 moveto 616 | 1 -1 scale 617 | (4) t 618 | GR 619 | GR 620 | GS 621 | [1 0 0 1 383 378] CT 622 | 0.149 GC 623 | /Helvetica 10 F 624 | GS 625 | [1 0 0 1 0 0] CT 626 | -3 10 moveto 627 | 1 -1 scale 628 | (5) t 629 | GR 630 | GR 631 | GS 632 | [1 0 0 1 445 378] CT 633 | 0.149 GC 634 | /Helvetica 10 F 635 | GS 636 | [1 0 0 1 0 0] CT 637 | -3 10 moveto 638 | 1 -1 scale 639 | (6) t 640 | GR 641 | GR 642 | GS 643 | [1 0 0 1 507 378] CT 644 | 0.149 GC 645 | /Helvetica 10 F 646 | GS 647 | [1 0 0 1 0 0] CT 648 | -3 10 moveto 649 | 1 -1 scale 650 | (7) t 651 | GR 652 | GR 653 | GS 654 | [1 0 0 1 290.00021 391.5] CT 655 | 0.149 GC 656 | /Helvetica 11 F 657 | GS 658 | [1 0 0 1 0 0] CT 659 | -7 11 moveto 660 | 1 -1 scale 661 | (R1) t 662 | GR 663 | GR 664 | GS 665 | 0.149 GC 666 | 2 setlinecap 667 | 1 LJ 668 | 0.5 LW 669 | N 670 | 73 374 M 671 | 73 31.5 L 672 | S 673 | GR 674 | GS 675 | 0.149 GC 676 | 2 setlinecap 677 | 1 LJ 678 | 0.5 LW 679 | N 680 | 507 374 M 681 | 507 31.5 L 682 | S 683 | GR 684 | GS 685 | 0.149 GC 686 | 2 setlinecap 687 | 1 LJ 688 | 0.5 LW 689 | N 690 | 73 374 M 691 | 77.34 374 L 692 | S 693 | GR 694 | GS 695 | 0.149 GC 696 | 2 setlinecap 697 | 1 LJ 698 | 0.5 LW 699 | N 700 | 73 325.071 M 701 | 77.34 325.071 L 702 | S 703 | GR 704 | GS 705 | 0.149 GC 706 | 2 setlinecap 707 | 1 LJ 708 | 0.5 LW 709 | N 710 | 73 276.143 M 711 | 77.34 276.143 L 712 | S 713 | GR 714 | GS 715 | 0.149 GC 716 | 2 setlinecap 717 | 1 LJ 718 | 0.5 LW 719 | N 720 | 73 227.214 M 721 | 77.34 227.214 L 722 | S 723 | GR 724 | GS 725 | 0.149 GC 726 | 2 setlinecap 727 | 1 LJ 728 | 0.5 LW 729 | N 730 | 73 178.286 M 731 | 77.34 178.286 L 732 | S 733 | GR 734 | GS 735 | 0.149 GC 736 | 2 setlinecap 737 | 1 LJ 738 | 0.5 LW 739 | N 740 | 73 129.357 M 741 | 77.34 129.357 L 742 | S 743 | GR 744 | GS 745 | 0.149 GC 746 | 2 setlinecap 747 | 1 LJ 748 | 0.5 LW 749 | N 750 | 73 80.429 M 751 | 77.34 80.429 L 752 | S 753 | GR 754 | GS 755 | 0.149 GC 756 | 2 setlinecap 757 | 1 LJ 758 | 0.5 LW 759 | N 760 | 73 31.5 M 761 | 77.34 31.5 L 762 | S 763 | GR 764 | GS 765 | 0.149 GC 766 | 2 setlinecap 767 | 1 LJ 768 | 0.5 LW 769 | N 770 | 507 374 M 771 | 502.66 374 L 772 | S 773 | GR 774 | GS 775 | 0.149 GC 776 | 2 setlinecap 777 | 1 LJ 778 | 0.5 LW 779 | N 780 | 507 325.071 M 781 | 502.66 325.071 L 782 | S 783 | GR 784 | GS 785 | 0.149 GC 786 | 2 setlinecap 787 | 1 LJ 788 | 0.5 LW 789 | N 790 | 507 276.143 M 791 | 502.66 276.143 L 792 | S 793 | GR 794 | GS 795 | 0.149 GC 796 | 2 setlinecap 797 | 1 LJ 798 | 0.5 LW 799 | N 800 | 507 227.214 M 801 | 502.66 227.214 L 802 | S 803 | GR 804 | GS 805 | 0.149 GC 806 | 2 setlinecap 807 | 1 LJ 808 | 0.5 LW 809 | N 810 | 507 178.286 M 811 | 502.66 178.286 L 812 | S 813 | GR 814 | GS 815 | 0.149 GC 816 | 2 setlinecap 817 | 1 LJ 818 | 0.5 LW 819 | N 820 | 507 129.357 M 821 | 502.66 129.357 L 822 | S 823 | GR 824 | GS 825 | 0.149 GC 826 | 2 setlinecap 827 | 1 LJ 828 | 0.5 LW 829 | N 830 | 507 80.429 M 831 | 502.66 80.429 L 832 | S 833 | GR 834 | GS 835 | 0.149 GC 836 | 2 setlinecap 837 | 1 LJ 838 | 0.5 LW 839 | N 840 | 507 31.5 M 841 | 502.66 31.5 L 842 | S 843 | GR 844 | GS 845 | [1 0 0 1 69 374] CT 846 | 0.149 GC 847 | /Helvetica 10 F 848 | GS 849 | [1 0 0 1 0 0] CT 850 | -6 3.5 moveto 851 | 1 -1 scale 852 | (0) t 853 | GR 854 | GR 855 | GS 856 | [1 0 0 1 69 325.07144] CT 857 | 0.149 GC 858 | /Helvetica 10 F 859 | GS 860 | [1 0 0 1 0 0] CT 861 | -6 3.5 moveto 862 | 1 -1 scale 863 | (1) t 864 | GR 865 | GR 866 | GS 867 | [1 0 0 1 69 276.14285] CT 868 | 0.149 GC 869 | /Helvetica 10 F 870 | GS 871 | [1 0 0 1 0 0] CT 872 | -6 3.5 moveto 873 | 1 -1 scale 874 | (2) t 875 | GR 876 | GR 877 | GS 878 | [1 0 0 1 69 227.21428] CT 879 | 0.149 GC 880 | /Helvetica 10 F 881 | GS 882 | [1 0 0 1 0 0] CT 883 | -6 3.5 moveto 884 | 1 -1 scale 885 | (3) t 886 | GR 887 | GR 888 | GS 889 | [1 0 0 1 69 178.28572] CT 890 | 0.149 GC 891 | /Helvetica 10 F 892 | GS 893 | [1 0 0 1 0 0] CT 894 | -6 3.5 moveto 895 | 1 -1 scale 896 | (4) t 897 | GR 898 | GR 899 | GS 900 | [1 0 0 1 69 129.35715] CT 901 | 0.149 GC 902 | /Helvetica 10 F 903 | GS 904 | [1 0 0 1 0 0] CT 905 | -6 3.5 moveto 906 | 1 -1 scale 907 | (5) t 908 | GR 909 | GR 910 | GS 911 | [1 0 0 1 69 80.42857] CT 912 | 0.149 GC 913 | /Helvetica 10 F 914 | GS 915 | [1 0 0 1 0 0] CT 916 | -6 3.5 moveto 917 | 1 -1 scale 918 | (6) t 919 | GR 920 | GR 921 | GS 922 | [1 0 0 1 69 31.5] CT 923 | 0.149 GC 924 | /Helvetica 10 F 925 | GS 926 | [1 0 0 1 0 0] CT 927 | -6 3.5 moveto 928 | 1 -1 scale 929 | (7) t 930 | GR 931 | GR 932 | GS 933 | [0 -1 1 0 60 202.74983] CT 934 | 0.149 GC 935 | /Helvetica 11 F 936 | GS 937 | [1 0 0 1 0 0] CT 938 | -7 -3 moveto 939 | 1 -1 scale 940 | (R2) t 941 | GR 942 | GR 943 | GS 944 | [1 0 0 1 290.00027 30.12499] CT 945 | /Helvetica-Bold 11 F 946 | GS 947 | [1 0 0 1 0 0] CT 948 | -47 -3 moveto 949 | 1 -1 scale 950 | (WSR-MMSE,10dB) t 951 | GR 952 | GR 953 | GS 954 | 0 0 1 RC 955 | 1 LJ 956 | 0.5 LW 957 | N 958 | 466.071 374 M 959 | 73 63.8 L 960 | S 961 | GR 962 | GS 963 | [1 0 0 1 466.07071 374] CT 964 | 0 0 1 RC 965 | N 966 | 0 -2.75 M 967 | 1.519 -2.75 2.75 -1.519 2.75 0 C 968 | 2.75 0 L 969 | 2.75 1.519 1.519 2.75 0 2.75 C 970 | -1.519 2.75 -2.75 1.519 -2.75 0 C 971 | -2.75 -1.519 -1.519 -2.75 0 -2.75 C 972 | cp 973 | 0 -3.25 M 974 | -1.795 -3.25 -3.25 -1.795 -3.25 0 C 975 | -3.25 1.795 -1.795 3.25 0 3.25 C 976 | 1.795 3.25 3.25 1.795 3.25 0 C 977 | 3.25 0 L 978 | 3.25 -1.795 1.795 -3.25 0 -3.25 C 979 | cp 980 | f 981 | GR 982 | GS 983 | [1 0 0 1 73 63.8002] CT 984 | 0 0 1 RC 985 | N 986 | /f-1077290934{0 -2.75 M 987 | 1.519 -2.75 2.75 -1.519 2.75 0 C 988 | 2.75 0 L 989 | 2.75 1.519 1.519 2.75 0 2.75 C 990 | -1.519 2.75 -2.75 1.519 -2.75 0 C 991 | -2.75 -1.519 -1.519 -2.75 0 -2.75 C 992 | cp 993 | 0 -3.25 M 994 | -1.795 -3.25 -3.25 -1.795 -3.25 0 C 995 | -3.25 1.795 -1.795 3.25 0 3.25 C 996 | 1.795 3.25 3.25 1.795 3.25 0 C 997 | 3.25 0 L 998 | 3.25 -1.795 1.795 -3.25 0 -3.25 C 999 | cp}def 1000 | f-1077290934 1001 | f 1002 | GR 1003 | %%Trailer 1004 | %%Pages: 1 1005 | %%EOF 1006 | -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/user angle/AO_1div9_0dB.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Creator: (MATLAB, The Mathworks, Inc. Version 9.8.0.1323502 \(R2020a\). Operating System: Mac OS X) 3 | %%Title: (/Users/James/Desktop/WSR-WMMSE-MIMO-BC/user angle /1div9_0dB.eps) 4 | %%CreationDate: 2020-06-12T15:28:38 5 | %%Pages: (atend) 6 | %%BoundingBox: 0 0 560 420 7 | %%LanguageLevel: 3 8 | %%EndComments 9 | %%BeginProlog 10 | %%BeginResource: procset (Apache XML Graphics Std ProcSet) 1.2 0 11 | %%Version: 1.2 0 12 | %%Copyright: (Copyright 2001-2003,2010 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) 13 | /bd{bind def}bind def 14 | /ld{load def}bd 15 | /GR/grestore ld 16 | /GS/gsave ld 17 | /RM/rmoveto ld 18 | /C/curveto ld 19 | /t/show ld 20 | /L/lineto ld 21 | /ML/setmiterlimit ld 22 | /CT/concat ld 23 | /f/fill ld 24 | /N/newpath ld 25 | /S/stroke ld 26 | /CC/setcmykcolor ld 27 | /A/ashow ld 28 | /cp/closepath ld 29 | /RC/setrgbcolor ld 30 | /LJ/setlinejoin ld 31 | /GC/setgray ld 32 | /LW/setlinewidth ld 33 | /M/moveto ld 34 | /re {4 2 roll M 35 | 1 index 0 rlineto 36 | 0 exch rlineto 37 | neg 0 rlineto 38 | cp } bd 39 | /_ctm matrix def 40 | /_tm matrix def 41 | /BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd 42 | /ET { _ctm setmatrix } bd 43 | /iTm { _ctm setmatrix _tm concat } bd 44 | /Tm { _tm astore pop iTm 0 0 moveto } bd 45 | /ux 0.0 def 46 | /uy 0.0 def 47 | /F { 48 | /Tp exch def 49 | /Tf exch def 50 | Tf findfont Tp scalefont setfont 51 | /cf Tf def /cs Tp def 52 | } bd 53 | /ULS {currentpoint /uy exch def /ux exch def} bd 54 | /ULE { 55 | /Tcx currentpoint pop def 56 | gsave 57 | newpath 58 | cf findfont cs scalefont dup 59 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 60 | /UnderlinePosition get Ts mul /To exch def 61 | /UnderlineThickness get Ts mul /Tt exch def 62 | ux uy To add moveto Tcx uy To add lineto 63 | Tt setlinewidth stroke 64 | grestore 65 | } bd 66 | /OLE { 67 | /Tcx currentpoint pop def 68 | gsave 69 | newpath 70 | cf findfont cs scalefont dup 71 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 72 | /UnderlinePosition get Ts mul /To exch def 73 | /UnderlineThickness get Ts mul /Tt exch def 74 | ux uy To add cs add moveto Tcx uy To add cs add lineto 75 | Tt setlinewidth stroke 76 | grestore 77 | } bd 78 | /SOE { 79 | /Tcx currentpoint pop def 80 | gsave 81 | newpath 82 | cf findfont cs scalefont dup 83 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 84 | /UnderlinePosition get Ts mul /To exch def 85 | /UnderlineThickness get Ts mul /Tt exch def 86 | ux uy To add cs 10 mul 26 idiv add moveto Tcx uy To add cs 10 mul 26 idiv add lineto 87 | Tt setlinewidth stroke 88 | grestore 89 | } bd 90 | /QT { 91 | /Y22 exch store 92 | /X22 exch store 93 | /Y21 exch store 94 | /X21 exch store 95 | currentpoint 96 | /Y21 load 2 mul add 3 div exch 97 | /X21 load 2 mul add 3 div exch 98 | /X21 load 2 mul /X22 load add 3 div 99 | /Y21 load 2 mul /Y22 load add 3 div 100 | /X22 load /Y22 load curveto 101 | } bd 102 | /SSPD { 103 | dup length /d exch dict def 104 | { 105 | /v exch def 106 | /k exch def 107 | currentpagedevice k known { 108 | /cpdv currentpagedevice k get def 109 | v cpdv ne { 110 | /upd false def 111 | /nullv v type /nulltype eq def 112 | /nullcpdv cpdv type /nulltype eq def 113 | nullv nullcpdv or 114 | { 115 | /upd true def 116 | } { 117 | /sametype v type cpdv type eq def 118 | sametype { 119 | v type /arraytype eq { 120 | /vlen v length def 121 | /cpdvlen cpdv length def 122 | vlen cpdvlen eq { 123 | 0 1 vlen 1 sub { 124 | /i exch def 125 | /obj v i get def 126 | /cpdobj cpdv i get def 127 | obj cpdobj ne { 128 | /upd true def 129 | exit 130 | } if 131 | } for 132 | } { 133 | /upd true def 134 | } ifelse 135 | } { 136 | v type /dicttype eq { 137 | v { 138 | /dv exch def 139 | /dk exch def 140 | /cpddv cpdv dk get def 141 | dv cpddv ne { 142 | /upd true def 143 | exit 144 | } if 145 | } forall 146 | } { 147 | /upd true def 148 | } ifelse 149 | } ifelse 150 | } if 151 | } ifelse 152 | upd true eq { 153 | d k v put 154 | } if 155 | } if 156 | } if 157 | } forall 158 | d length 0 gt { 159 | d setpagedevice 160 | } if 161 | } bd 162 | /RE { % /NewFontName [NewEncodingArray] /FontName RE - 163 | findfont dup length dict begin 164 | { 165 | 1 index /FID ne 166 | {def} {pop pop} ifelse 167 | } forall 168 | /Encoding exch def 169 | /FontName 1 index def 170 | currentdict definefont pop 171 | end 172 | } bind def 173 | %%EndResource 174 | %%BeginResource: procset (Apache XML Graphics EPS ProcSet) 1.0 0 175 | %%Version: 1.0 0 176 | %%Copyright: (Copyright 2002-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) 177 | /BeginEPSF { %def 178 | /b4_Inc_state save def % Save state for cleanup 179 | /dict_count countdictstack def % Count objects on dict stack 180 | /op_count count 1 sub def % Count objects on operand stack 181 | userdict begin % Push userdict on dict stack 182 | /showpage { } def % Redefine showpage, { } = null proc 183 | 0 setgray 0 setlinecap % Prepare graphics state 184 | 1 setlinewidth 0 setlinejoin 185 | 10 setmiterlimit [ ] 0 setdash newpath 186 | /languagelevel where % If level not equal to 1 then 187 | {pop languagelevel % set strokeadjust and 188 | 1 ne % overprint to their defaults. 189 | {false setstrokeadjust false setoverprint 190 | } if 191 | } if 192 | } bd 193 | /EndEPSF { %def 194 | count op_count sub {pop} repeat % Clean up stacks 195 | countdictstack dict_count sub {end} repeat 196 | b4_Inc_state restore 197 | } bd 198 | %%EndResource 199 | %FOPBeginFontDict 200 | %%IncludeResource: font Courier-Oblique 201 | %%IncludeResource: font Courier-BoldOblique 202 | %%IncludeResource: font Courier-Bold 203 | %%IncludeResource: font ZapfDingbats 204 | %%IncludeResource: font Symbol 205 | %%IncludeResource: font Helvetica 206 | %%IncludeResource: font Helvetica-Oblique 207 | %%IncludeResource: font Helvetica-Bold 208 | %%IncludeResource: font Helvetica-BoldOblique 209 | %%IncludeResource: font Times-Roman 210 | %%IncludeResource: font Times-Italic 211 | %%IncludeResource: font Times-Bold 212 | %%IncludeResource: font Times-BoldItalic 213 | %%IncludeResource: font Courier 214 | %FOPEndFontDict 215 | %%BeginResource: encoding WinAnsiEncoding 216 | /WinAnsiEncoding [ 217 | /.notdef /.notdef /.notdef /.notdef /.notdef 218 | /.notdef /.notdef /.notdef /.notdef /.notdef 219 | /.notdef /.notdef /.notdef /.notdef /.notdef 220 | /.notdef /.notdef /.notdef /.notdef /.notdef 221 | /.notdef /.notdef /.notdef /.notdef /.notdef 222 | /.notdef /.notdef /.notdef /.notdef /.notdef 223 | /.notdef /.notdef /space /exclam /quotedbl 224 | /numbersign /dollar /percent /ampersand /quotesingle 225 | /parenleft /parenright /asterisk /plus /comma 226 | /hyphen /period /slash /zero /one 227 | /two /three /four /five /six 228 | /seven /eight /nine /colon /semicolon 229 | /less /equal /greater /question /at 230 | /A /B /C /D /E 231 | /F /G /H /I /J 232 | /K /L /M /N /O 233 | /P /Q /R /S /T 234 | /U /V /W /X /Y 235 | /Z /bracketleft /backslash /bracketright /asciicircum 236 | /underscore /quoteleft /a /b /c 237 | /d /e /f /g /h 238 | /i /j /k /l /m 239 | /n /o /p /q /r 240 | /s /t /u /v /w 241 | /x /y /z /braceleft /bar 242 | /braceright /asciitilde /bullet /Euro /bullet 243 | /quotesinglbase /florin /quotedblbase /ellipsis /dagger 244 | /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft 245 | /OE /bullet /Zcaron /bullet /bullet 246 | /quoteleft /quoteright /quotedblleft /quotedblright /bullet 247 | /endash /emdash /asciitilde /trademark /scaron 248 | /guilsinglright /oe /bullet /zcaron /Ydieresis 249 | /space /exclamdown /cent /sterling /currency 250 | /yen /brokenbar /section /dieresis /copyright 251 | /ordfeminine /guillemotleft /logicalnot /sfthyphen /registered 252 | /macron /degree /plusminus /twosuperior /threesuperior 253 | /acute /mu /paragraph /middot /cedilla 254 | /onesuperior /ordmasculine /guillemotright /onequarter /onehalf 255 | /threequarters /questiondown /Agrave /Aacute /Acircumflex 256 | /Atilde /Adieresis /Aring /AE /Ccedilla 257 | /Egrave /Eacute /Ecircumflex /Edieresis /Igrave 258 | /Iacute /Icircumflex /Idieresis /Eth /Ntilde 259 | /Ograve /Oacute /Ocircumflex /Otilde /Odieresis 260 | /multiply /Oslash /Ugrave /Uacute /Ucircumflex 261 | /Udieresis /Yacute /Thorn /germandbls /agrave 262 | /aacute /acircumflex /atilde /adieresis /aring 263 | /ae /ccedilla /egrave /eacute /ecircumflex 264 | /edieresis /igrave /iacute /icircumflex /idieresis 265 | /eth /ntilde /ograve /oacute /ocircumflex 266 | /otilde /odieresis /divide /oslash /ugrave 267 | /uacute /ucircumflex /udieresis /yacute /thorn 268 | /ydieresis 269 | ] def 270 | %%EndResource 271 | %FOPBeginFontReencode 272 | /Courier-Oblique findfont 273 | dup length dict begin 274 | {1 index /FID ne {def} {pop pop} ifelse} forall 275 | /Encoding WinAnsiEncoding def 276 | currentdict 277 | end 278 | /Courier-Oblique exch definefont pop 279 | /Courier-BoldOblique findfont 280 | dup length dict begin 281 | {1 index /FID ne {def} {pop pop} ifelse} forall 282 | /Encoding WinAnsiEncoding def 283 | currentdict 284 | end 285 | /Courier-BoldOblique exch definefont pop 286 | /Courier-Bold findfont 287 | dup length dict begin 288 | {1 index /FID ne {def} {pop pop} ifelse} forall 289 | /Encoding WinAnsiEncoding def 290 | currentdict 291 | end 292 | /Courier-Bold exch definefont pop 293 | /Helvetica findfont 294 | dup length dict begin 295 | {1 index /FID ne {def} {pop pop} ifelse} forall 296 | /Encoding WinAnsiEncoding def 297 | currentdict 298 | end 299 | /Helvetica exch definefont pop 300 | /Helvetica-Oblique findfont 301 | dup length dict begin 302 | {1 index /FID ne {def} {pop pop} ifelse} forall 303 | /Encoding WinAnsiEncoding def 304 | currentdict 305 | end 306 | /Helvetica-Oblique exch definefont pop 307 | /Helvetica-Bold findfont 308 | dup length dict begin 309 | {1 index /FID ne {def} {pop pop} ifelse} forall 310 | /Encoding WinAnsiEncoding def 311 | currentdict 312 | end 313 | /Helvetica-Bold exch definefont pop 314 | /Helvetica-BoldOblique findfont 315 | dup length dict begin 316 | {1 index /FID ne {def} {pop pop} ifelse} forall 317 | /Encoding WinAnsiEncoding def 318 | currentdict 319 | end 320 | /Helvetica-BoldOblique exch definefont pop 321 | /Times-Roman findfont 322 | dup length dict begin 323 | {1 index /FID ne {def} {pop pop} ifelse} forall 324 | /Encoding WinAnsiEncoding def 325 | currentdict 326 | end 327 | /Times-Roman exch definefont pop 328 | /Times-Italic findfont 329 | dup length dict begin 330 | {1 index /FID ne {def} {pop pop} ifelse} forall 331 | /Encoding WinAnsiEncoding def 332 | currentdict 333 | end 334 | /Times-Italic exch definefont pop 335 | /Times-Bold findfont 336 | dup length dict begin 337 | {1 index /FID ne {def} {pop pop} ifelse} forall 338 | /Encoding WinAnsiEncoding def 339 | currentdict 340 | end 341 | /Times-Bold exch definefont pop 342 | /Times-BoldItalic findfont 343 | dup length dict begin 344 | {1 index /FID ne {def} {pop pop} ifelse} forall 345 | /Encoding WinAnsiEncoding def 346 | currentdict 347 | end 348 | /Times-BoldItalic exch definefont pop 349 | /Courier findfont 350 | dup length dict begin 351 | {1 index /FID ne {def} {pop pop} ifelse} forall 352 | /Encoding WinAnsiEncoding def 353 | currentdict 354 | end 355 | /Courier exch definefont pop 356 | %FOPEndFontReencode 357 | %%EndProlog 358 | %%Page: 1 1 359 | %%PageBoundingBox: 0 0 560 420 360 | %%BeginPageSetup 361 | [1 0 0 -1 0 420] CT 362 | %%EndPageSetup 363 | GS 364 | 1 GC 365 | N 366 | 0 0 560 420 re 367 | f 368 | GR 369 | GS 370 | 1 GC 371 | N 372 | 0 0 560 420 re 373 | f 374 | GR 375 | GS 376 | 1 GC 377 | N 378 | 73 374 M 379 | 507 374 L 380 | 507 31.5 L 381 | 73 31.5 L 382 | cp 383 | f 384 | GR 385 | GS 386 | 0.149 GC 387 | 2 setlinecap 388 | 1 LJ 389 | 0.5 LW 390 | N 391 | 73 374 M 392 | 507 374 L 393 | S 394 | GR 395 | GS 396 | 0.149 GC 397 | 2 setlinecap 398 | 1 LJ 399 | 0.5 LW 400 | N 401 | 73 31.5 M 402 | 507 31.5 L 403 | S 404 | GR 405 | GS 406 | 0.149 GC 407 | 2 setlinecap 408 | 1 LJ 409 | 0.5 LW 410 | N 411 | 73 374 M 412 | 73 369.66 L 413 | S 414 | GR 415 | GS 416 | 0.149 GC 417 | 2 setlinecap 418 | 1 LJ 419 | 0.5 LW 420 | N 421 | 135 374 M 422 | 135 369.66 L 423 | S 424 | GR 425 | GS 426 | 0.149 GC 427 | 2 setlinecap 428 | 1 LJ 429 | 0.5 LW 430 | N 431 | 197 374 M 432 | 197 369.66 L 433 | S 434 | GR 435 | GS 436 | 0.149 GC 437 | 2 setlinecap 438 | 1 LJ 439 | 0.5 LW 440 | N 441 | 259 374 M 442 | 259 369.66 L 443 | S 444 | GR 445 | GS 446 | 0.149 GC 447 | 2 setlinecap 448 | 1 LJ 449 | 0.5 LW 450 | N 451 | 321 374 M 452 | 321 369.66 L 453 | S 454 | GR 455 | GS 456 | 0.149 GC 457 | 2 setlinecap 458 | 1 LJ 459 | 0.5 LW 460 | N 461 | 383 374 M 462 | 383 369.66 L 463 | S 464 | GR 465 | GS 466 | 0.149 GC 467 | 2 setlinecap 468 | 1 LJ 469 | 0.5 LW 470 | N 471 | 445 374 M 472 | 445 369.66 L 473 | S 474 | GR 475 | GS 476 | 0.149 GC 477 | 2 setlinecap 478 | 1 LJ 479 | 0.5 LW 480 | N 481 | 507 374 M 482 | 507 369.66 L 483 | S 484 | GR 485 | GS 486 | 0.149 GC 487 | 2 setlinecap 488 | 1 LJ 489 | 0.5 LW 490 | N 491 | 73 31.5 M 492 | 73 35.84 L 493 | S 494 | GR 495 | GS 496 | 0.149 GC 497 | 2 setlinecap 498 | 1 LJ 499 | 0.5 LW 500 | N 501 | 135 31.5 M 502 | 135 35.84 L 503 | S 504 | GR 505 | GS 506 | 0.149 GC 507 | 2 setlinecap 508 | 1 LJ 509 | 0.5 LW 510 | N 511 | 197 31.5 M 512 | 197 35.84 L 513 | S 514 | GR 515 | GS 516 | 0.149 GC 517 | 2 setlinecap 518 | 1 LJ 519 | 0.5 LW 520 | N 521 | 259 31.5 M 522 | 259 35.84 L 523 | S 524 | GR 525 | GS 526 | 0.149 GC 527 | 2 setlinecap 528 | 1 LJ 529 | 0.5 LW 530 | N 531 | 321 31.5 M 532 | 321 35.84 L 533 | S 534 | GR 535 | GS 536 | 0.149 GC 537 | 2 setlinecap 538 | 1 LJ 539 | 0.5 LW 540 | N 541 | 383 31.5 M 542 | 383 35.84 L 543 | S 544 | GR 545 | GS 546 | 0.149 GC 547 | 2 setlinecap 548 | 1 LJ 549 | 0.5 LW 550 | N 551 | 445 31.5 M 552 | 445 35.84 L 553 | S 554 | GR 555 | GS 556 | 0.149 GC 557 | 2 setlinecap 558 | 1 LJ 559 | 0.5 LW 560 | N 561 | 507 31.5 M 562 | 507 35.84 L 563 | S 564 | GR 565 | GS 566 | [1 0 0 1 73 378] CT 567 | 0.149 GC 568 | /Helvetica 10 F 569 | GS 570 | [1 0 0 1 0 0] CT 571 | -3 10 moveto 572 | 1 -1 scale 573 | (0) t 574 | GR 575 | GR 576 | GS 577 | [1 0 0 1 135 378] CT 578 | 0.149 GC 579 | /Helvetica 10 F 580 | GS 581 | [1 0 0 1 0 0] CT 582 | -7 10 moveto 583 | 1 -1 scale 584 | (0.5) t 585 | GR 586 | GR 587 | GS 588 | [1 0 0 1 197 378] CT 589 | 0.149 GC 590 | /Helvetica 10 F 591 | GS 592 | [1 0 0 1 0 0] CT 593 | -3 10 moveto 594 | 1 -1 scale 595 | (1) t 596 | GR 597 | GR 598 | GS 599 | [1 0 0 1 259 378] CT 600 | 0.149 GC 601 | /Helvetica 10 F 602 | GS 603 | [1 0 0 1 0 0] CT 604 | -7 10 moveto 605 | 1 -1 scale 606 | (1.5) t 607 | GR 608 | GR 609 | GS 610 | [1 0 0 1 321 378] CT 611 | 0.149 GC 612 | /Helvetica 10 F 613 | GS 614 | [1 0 0 1 0 0] CT 615 | -3 10 moveto 616 | 1 -1 scale 617 | (2) t 618 | GR 619 | GR 620 | GS 621 | [1 0 0 1 383 378] CT 622 | 0.149 GC 623 | /Helvetica 10 F 624 | GS 625 | [1 0 0 1 0 0] CT 626 | -7 10 moveto 627 | 1 -1 scale 628 | (2.5) t 629 | GR 630 | GR 631 | GS 632 | [1 0 0 1 445 378] CT 633 | 0.149 GC 634 | /Helvetica 10 F 635 | GS 636 | [1 0 0 1 0 0] CT 637 | -3 10 moveto 638 | 1 -1 scale 639 | (3) t 640 | GR 641 | GR 642 | GS 643 | [1 0 0 1 507 378] CT 644 | 0.149 GC 645 | /Helvetica 10 F 646 | GS 647 | [1 0 0 1 0 0] CT 648 | -7 10 moveto 649 | 1 -1 scale 650 | (3.5) t 651 | GR 652 | GR 653 | GS 654 | [1 0 0 1 290.00021 391.5] CT 655 | 0.149 GC 656 | /Helvetica 11 F 657 | GS 658 | [1 0 0 1 0 0] CT 659 | -7 11 moveto 660 | 1 -1 scale 661 | (R1) t 662 | GR 663 | GR 664 | GS 665 | 0.149 GC 666 | 2 setlinecap 667 | 1 LJ 668 | 0.5 LW 669 | N 670 | 73 374 M 671 | 73 31.5 L 672 | S 673 | GR 674 | GS 675 | 0.149 GC 676 | 2 setlinecap 677 | 1 LJ 678 | 0.5 LW 679 | N 680 | 507 374 M 681 | 507 31.5 L 682 | S 683 | GR 684 | GS 685 | 0.149 GC 686 | 2 setlinecap 687 | 1 LJ 688 | 0.5 LW 689 | N 690 | 73 374 M 691 | 77.34 374 L 692 | S 693 | GR 694 | GS 695 | 0.149 GC 696 | 2 setlinecap 697 | 1 LJ 698 | 0.5 LW 699 | N 700 | 73 325.071 M 701 | 77.34 325.071 L 702 | S 703 | GR 704 | GS 705 | 0.149 GC 706 | 2 setlinecap 707 | 1 LJ 708 | 0.5 LW 709 | N 710 | 73 276.143 M 711 | 77.34 276.143 L 712 | S 713 | GR 714 | GS 715 | 0.149 GC 716 | 2 setlinecap 717 | 1 LJ 718 | 0.5 LW 719 | N 720 | 73 227.214 M 721 | 77.34 227.214 L 722 | S 723 | GR 724 | GS 725 | 0.149 GC 726 | 2 setlinecap 727 | 1 LJ 728 | 0.5 LW 729 | N 730 | 73 178.286 M 731 | 77.34 178.286 L 732 | S 733 | GR 734 | GS 735 | 0.149 GC 736 | 2 setlinecap 737 | 1 LJ 738 | 0.5 LW 739 | N 740 | 73 129.357 M 741 | 77.34 129.357 L 742 | S 743 | GR 744 | GS 745 | 0.149 GC 746 | 2 setlinecap 747 | 1 LJ 748 | 0.5 LW 749 | N 750 | 73 80.429 M 751 | 77.34 80.429 L 752 | S 753 | GR 754 | GS 755 | 0.149 GC 756 | 2 setlinecap 757 | 1 LJ 758 | 0.5 LW 759 | N 760 | 73 31.5 M 761 | 77.34 31.5 L 762 | S 763 | GR 764 | GS 765 | 0.149 GC 766 | 2 setlinecap 767 | 1 LJ 768 | 0.5 LW 769 | N 770 | 507 374 M 771 | 502.66 374 L 772 | S 773 | GR 774 | GS 775 | 0.149 GC 776 | 2 setlinecap 777 | 1 LJ 778 | 0.5 LW 779 | N 780 | 507 325.071 M 781 | 502.66 325.071 L 782 | S 783 | GR 784 | GS 785 | 0.149 GC 786 | 2 setlinecap 787 | 1 LJ 788 | 0.5 LW 789 | N 790 | 507 276.143 M 791 | 502.66 276.143 L 792 | S 793 | GR 794 | GS 795 | 0.149 GC 796 | 2 setlinecap 797 | 1 LJ 798 | 0.5 LW 799 | N 800 | 507 227.214 M 801 | 502.66 227.214 L 802 | S 803 | GR 804 | GS 805 | 0.149 GC 806 | 2 setlinecap 807 | 1 LJ 808 | 0.5 LW 809 | N 810 | 507 178.286 M 811 | 502.66 178.286 L 812 | S 813 | GR 814 | GS 815 | 0.149 GC 816 | 2 setlinecap 817 | 1 LJ 818 | 0.5 LW 819 | N 820 | 507 129.357 M 821 | 502.66 129.357 L 822 | S 823 | GR 824 | GS 825 | 0.149 GC 826 | 2 setlinecap 827 | 1 LJ 828 | 0.5 LW 829 | N 830 | 507 80.429 M 831 | 502.66 80.429 L 832 | S 833 | GR 834 | GS 835 | 0.149 GC 836 | 2 setlinecap 837 | 1 LJ 838 | 0.5 LW 839 | N 840 | 507 31.5 M 841 | 502.66 31.5 L 842 | S 843 | GR 844 | GS 845 | [1 0 0 1 69 374] CT 846 | 0.149 GC 847 | /Helvetica 10 F 848 | GS 849 | [1 0 0 1 0 0] CT 850 | -6 3.5 moveto 851 | 1 -1 scale 852 | (0) t 853 | GR 854 | GR 855 | GS 856 | [1 0 0 1 69 325.07144] CT 857 | 0.149 GC 858 | /Helvetica 10 F 859 | GS 860 | [1 0 0 1 0 0] CT 861 | -14 3.5 moveto 862 | 1 -1 scale 863 | (0.5) t 864 | GR 865 | GR 866 | GS 867 | [1 0 0 1 69 276.14285] CT 868 | 0.149 GC 869 | /Helvetica 10 F 870 | GS 871 | [1 0 0 1 0 0] CT 872 | -6 3.5 moveto 873 | 1 -1 scale 874 | (1) t 875 | GR 876 | GR 877 | GS 878 | [1 0 0 1 69 227.21428] CT 879 | 0.149 GC 880 | /Helvetica 10 F 881 | GS 882 | [1 0 0 1 0 0] CT 883 | -14 3.5 moveto 884 | 1 -1 scale 885 | (1.5) t 886 | GR 887 | GR 888 | GS 889 | [1 0 0 1 69 178.28572] CT 890 | 0.149 GC 891 | /Helvetica 10 F 892 | GS 893 | [1 0 0 1 0 0] CT 894 | -6 3.5 moveto 895 | 1 -1 scale 896 | (2) t 897 | GR 898 | GR 899 | GS 900 | [1 0 0 1 69 129.35715] CT 901 | 0.149 GC 902 | /Helvetica 10 F 903 | GS 904 | [1 0 0 1 0 0] CT 905 | -14 3.5 moveto 906 | 1 -1 scale 907 | (2.5) t 908 | GR 909 | GR 910 | GS 911 | [1 0 0 1 69 80.42857] CT 912 | 0.149 GC 913 | /Helvetica 10 F 914 | GS 915 | [1 0 0 1 0 0] CT 916 | -6 3.5 moveto 917 | 1 -1 scale 918 | (3) t 919 | GR 920 | GR 921 | GS 922 | [1 0 0 1 69 31.5] CT 923 | 0.149 GC 924 | /Helvetica 10 F 925 | GS 926 | [1 0 0 1 0 0] CT 927 | -14 3.5 moveto 928 | 1 -1 scale 929 | (3.5) t 930 | GR 931 | GR 932 | GS 933 | [0 -1 1 0 52 202.74983] CT 934 | 0.149 GC 935 | /Helvetica 11 F 936 | GS 937 | [1 0 0 1 0 0] CT 938 | -7 -3 moveto 939 | 1 -1 scale 940 | (R2) t 941 | GR 942 | GR 943 | GS 944 | [1 0 0 1 290.00027 30.12499] CT 945 | /Helvetica-Bold 11 F 946 | GS 947 | [1 0 0 1 0 0] CT 948 | -44 -3 moveto 949 | 1 -1 scale 950 | (WSR-MMSE,0dB) t 951 | GR 952 | GR 953 | GS 954 | 0 0 1 RC 955 | 1 LJ 956 | 0.5 LW 957 | N 958 | 466.071 374 M 959 | 73 63.8 L 960 | S 961 | GR 962 | GS 963 | [1 0 0 1 466.07071 374] CT 964 | 0 0 1 RC 965 | N 966 | 0 -2.75 M 967 | 1.519 -2.75 2.75 -1.519 2.75 0 C 968 | 2.75 0 L 969 | 2.75 1.519 1.519 2.75 0 2.75 C 970 | -1.519 2.75 -2.75 1.519 -2.75 0 C 971 | -2.75 -1.519 -1.519 -2.75 0 -2.75 C 972 | cp 973 | 0 -3.25 M 974 | -1.795 -3.25 -3.25 -1.795 -3.25 0 C 975 | -3.25 1.795 -1.795 3.25 0 3.25 C 976 | 1.795 3.25 3.25 1.795 3.25 0 C 977 | 3.25 0 L 978 | 3.25 -1.795 1.795 -3.25 0 -3.25 C 979 | cp 980 | f 981 | GR 982 | GS 983 | [1 0 0 1 73 63.8002] CT 984 | 0 0 1 RC 985 | N 986 | /f-1077290934{0 -2.75 M 987 | 1.519 -2.75 2.75 -1.519 2.75 0 C 988 | 2.75 0 L 989 | 2.75 1.519 1.519 2.75 0 2.75 C 990 | -1.519 2.75 -2.75 1.519 -2.75 0 C 991 | -2.75 -1.519 -1.519 -2.75 0 -2.75 C 992 | cp 993 | 0 -3.25 M 994 | -1.795 -3.25 -3.25 -1.795 -3.25 0 C 995 | -3.25 1.795 -1.795 3.25 0 3.25 C 996 | 1.795 3.25 3.25 1.795 3.25 0 C 997 | 3.25 0 L 998 | 3.25 -1.795 1.795 -3.25 0 -3.25 C 999 | cp}def 1000 | f-1077290934 1001 | f 1002 | GR 1003 | %%Trailer 1004 | %%Pages: 1 1005 | %%EOF 1006 | -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/rnd channel fig/AO_RND_10dB.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Creator: (MATLAB, The Mathworks, Inc. Version 9.8.0.1323502 \(R2020a\). Operating System: Mac OS X) 3 | %%Title: (/Users/James/Desktop/WSR-WMMSE-MIMO-BC/rnd channel fig/AO RND 10dB..eps) 4 | %%CreationDate: 2020-06-12T14:58:36 5 | %%Pages: (atend) 6 | %%BoundingBox: 0 0 560 420 7 | %%LanguageLevel: 3 8 | %%EndComments 9 | %%BeginProlog 10 | %%BeginResource: procset (Apache XML Graphics Std ProcSet) 1.2 0 11 | %%Version: 1.2 0 12 | %%Copyright: (Copyright 2001-2003,2010 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) 13 | /bd{bind def}bind def 14 | /ld{load def}bd 15 | /GR/grestore ld 16 | /GS/gsave ld 17 | /RM/rmoveto ld 18 | /C/curveto ld 19 | /t/show ld 20 | /L/lineto ld 21 | /ML/setmiterlimit ld 22 | /CT/concat ld 23 | /f/fill ld 24 | /N/newpath ld 25 | /S/stroke ld 26 | /CC/setcmykcolor ld 27 | /A/ashow ld 28 | /cp/closepath ld 29 | /RC/setrgbcolor ld 30 | /LJ/setlinejoin ld 31 | /GC/setgray ld 32 | /LW/setlinewidth ld 33 | /M/moveto ld 34 | /re {4 2 roll M 35 | 1 index 0 rlineto 36 | 0 exch rlineto 37 | neg 0 rlineto 38 | cp } bd 39 | /_ctm matrix def 40 | /_tm matrix def 41 | /BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd 42 | /ET { _ctm setmatrix } bd 43 | /iTm { _ctm setmatrix _tm concat } bd 44 | /Tm { _tm astore pop iTm 0 0 moveto } bd 45 | /ux 0.0 def 46 | /uy 0.0 def 47 | /F { 48 | /Tp exch def 49 | /Tf exch def 50 | Tf findfont Tp scalefont setfont 51 | /cf Tf def /cs Tp def 52 | } bd 53 | /ULS {currentpoint /uy exch def /ux exch def} bd 54 | /ULE { 55 | /Tcx currentpoint pop def 56 | gsave 57 | newpath 58 | cf findfont cs scalefont dup 59 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 60 | /UnderlinePosition get Ts mul /To exch def 61 | /UnderlineThickness get Ts mul /Tt exch def 62 | ux uy To add moveto Tcx uy To add lineto 63 | Tt setlinewidth stroke 64 | grestore 65 | } bd 66 | /OLE { 67 | /Tcx currentpoint pop def 68 | gsave 69 | newpath 70 | cf findfont cs scalefont dup 71 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 72 | /UnderlinePosition get Ts mul /To exch def 73 | /UnderlineThickness get Ts mul /Tt exch def 74 | ux uy To add cs add moveto Tcx uy To add cs add lineto 75 | Tt setlinewidth stroke 76 | grestore 77 | } bd 78 | /SOE { 79 | /Tcx currentpoint pop def 80 | gsave 81 | newpath 82 | cf findfont cs scalefont dup 83 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 84 | /UnderlinePosition get Ts mul /To exch def 85 | /UnderlineThickness get Ts mul /Tt exch def 86 | ux uy To add cs 10 mul 26 idiv add moveto Tcx uy To add cs 10 mul 26 idiv add lineto 87 | Tt setlinewidth stroke 88 | grestore 89 | } bd 90 | /QT { 91 | /Y22 exch store 92 | /X22 exch store 93 | /Y21 exch store 94 | /X21 exch store 95 | currentpoint 96 | /Y21 load 2 mul add 3 div exch 97 | /X21 load 2 mul add 3 div exch 98 | /X21 load 2 mul /X22 load add 3 div 99 | /Y21 load 2 mul /Y22 load add 3 div 100 | /X22 load /Y22 load curveto 101 | } bd 102 | /SSPD { 103 | dup length /d exch dict def 104 | { 105 | /v exch def 106 | /k exch def 107 | currentpagedevice k known { 108 | /cpdv currentpagedevice k get def 109 | v cpdv ne { 110 | /upd false def 111 | /nullv v type /nulltype eq def 112 | /nullcpdv cpdv type /nulltype eq def 113 | nullv nullcpdv or 114 | { 115 | /upd true def 116 | } { 117 | /sametype v type cpdv type eq def 118 | sametype { 119 | v type /arraytype eq { 120 | /vlen v length def 121 | /cpdvlen cpdv length def 122 | vlen cpdvlen eq { 123 | 0 1 vlen 1 sub { 124 | /i exch def 125 | /obj v i get def 126 | /cpdobj cpdv i get def 127 | obj cpdobj ne { 128 | /upd true def 129 | exit 130 | } if 131 | } for 132 | } { 133 | /upd true def 134 | } ifelse 135 | } { 136 | v type /dicttype eq { 137 | v { 138 | /dv exch def 139 | /dk exch def 140 | /cpddv cpdv dk get def 141 | dv cpddv ne { 142 | /upd true def 143 | exit 144 | } if 145 | } forall 146 | } { 147 | /upd true def 148 | } ifelse 149 | } ifelse 150 | } if 151 | } ifelse 152 | upd true eq { 153 | d k v put 154 | } if 155 | } if 156 | } if 157 | } forall 158 | d length 0 gt { 159 | d setpagedevice 160 | } if 161 | } bd 162 | /RE { % /NewFontName [NewEncodingArray] /FontName RE - 163 | findfont dup length dict begin 164 | { 165 | 1 index /FID ne 166 | {def} {pop pop} ifelse 167 | } forall 168 | /Encoding exch def 169 | /FontName 1 index def 170 | currentdict definefont pop 171 | end 172 | } bind def 173 | %%EndResource 174 | %%BeginResource: procset (Apache XML Graphics EPS ProcSet) 1.0 0 175 | %%Version: 1.0 0 176 | %%Copyright: (Copyright 2002-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) 177 | /BeginEPSF { %def 178 | /b4_Inc_state save def % Save state for cleanup 179 | /dict_count countdictstack def % Count objects on dict stack 180 | /op_count count 1 sub def % Count objects on operand stack 181 | userdict begin % Push userdict on dict stack 182 | /showpage { } def % Redefine showpage, { } = null proc 183 | 0 setgray 0 setlinecap % Prepare graphics state 184 | 1 setlinewidth 0 setlinejoin 185 | 10 setmiterlimit [ ] 0 setdash newpath 186 | /languagelevel where % If level not equal to 1 then 187 | {pop languagelevel % set strokeadjust and 188 | 1 ne % overprint to their defaults. 189 | {false setstrokeadjust false setoverprint 190 | } if 191 | } if 192 | } bd 193 | /EndEPSF { %def 194 | count op_count sub {pop} repeat % Clean up stacks 195 | countdictstack dict_count sub {end} repeat 196 | b4_Inc_state restore 197 | } bd 198 | %%EndResource 199 | %FOPBeginFontDict 200 | %%IncludeResource: font Courier-Oblique 201 | %%IncludeResource: font Courier-BoldOblique 202 | %%IncludeResource: font Courier-Bold 203 | %%IncludeResource: font ZapfDingbats 204 | %%IncludeResource: font Symbol 205 | %%IncludeResource: font Helvetica 206 | %%IncludeResource: font Helvetica-Oblique 207 | %%IncludeResource: font Helvetica-Bold 208 | %%IncludeResource: font Helvetica-BoldOblique 209 | %%IncludeResource: font Times-Roman 210 | %%IncludeResource: font Times-Italic 211 | %%IncludeResource: font Times-Bold 212 | %%IncludeResource: font Times-BoldItalic 213 | %%IncludeResource: font Courier 214 | %FOPEndFontDict 215 | %%BeginResource: encoding WinAnsiEncoding 216 | /WinAnsiEncoding [ 217 | /.notdef /.notdef /.notdef /.notdef /.notdef 218 | /.notdef /.notdef /.notdef /.notdef /.notdef 219 | /.notdef /.notdef /.notdef /.notdef /.notdef 220 | /.notdef /.notdef /.notdef /.notdef /.notdef 221 | /.notdef /.notdef /.notdef /.notdef /.notdef 222 | /.notdef /.notdef /.notdef /.notdef /.notdef 223 | /.notdef /.notdef /space /exclam /quotedbl 224 | /numbersign /dollar /percent /ampersand /quotesingle 225 | /parenleft /parenright /asterisk /plus /comma 226 | /hyphen /period /slash /zero /one 227 | /two /three /four /five /six 228 | /seven /eight /nine /colon /semicolon 229 | /less /equal /greater /question /at 230 | /A /B /C /D /E 231 | /F /G /H /I /J 232 | /K /L /M /N /O 233 | /P /Q /R /S /T 234 | /U /V /W /X /Y 235 | /Z /bracketleft /backslash /bracketright /asciicircum 236 | /underscore /quoteleft /a /b /c 237 | /d /e /f /g /h 238 | /i /j /k /l /m 239 | /n /o /p /q /r 240 | /s /t /u /v /w 241 | /x /y /z /braceleft /bar 242 | /braceright /asciitilde /bullet /Euro /bullet 243 | /quotesinglbase /florin /quotedblbase /ellipsis /dagger 244 | /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft 245 | /OE /bullet /Zcaron /bullet /bullet 246 | /quoteleft /quoteright /quotedblleft /quotedblright /bullet 247 | /endash /emdash /asciitilde /trademark /scaron 248 | /guilsinglright /oe /bullet /zcaron /Ydieresis 249 | /space /exclamdown /cent /sterling /currency 250 | /yen /brokenbar /section /dieresis /copyright 251 | /ordfeminine /guillemotleft /logicalnot /sfthyphen /registered 252 | /macron /degree /plusminus /twosuperior /threesuperior 253 | /acute /mu /paragraph /middot /cedilla 254 | /onesuperior /ordmasculine /guillemotright /onequarter /onehalf 255 | /threequarters /questiondown /Agrave /Aacute /Acircumflex 256 | /Atilde /Adieresis /Aring /AE /Ccedilla 257 | /Egrave /Eacute /Ecircumflex /Edieresis /Igrave 258 | /Iacute /Icircumflex /Idieresis /Eth /Ntilde 259 | /Ograve /Oacute /Ocircumflex /Otilde /Odieresis 260 | /multiply /Oslash /Ugrave /Uacute /Ucircumflex 261 | /Udieresis /Yacute /Thorn /germandbls /agrave 262 | /aacute /acircumflex /atilde /adieresis /aring 263 | /ae /ccedilla /egrave /eacute /ecircumflex 264 | /edieresis /igrave /iacute /icircumflex /idieresis 265 | /eth /ntilde /ograve /oacute /ocircumflex 266 | /otilde /odieresis /divide /oslash /ugrave 267 | /uacute /ucircumflex /udieresis /yacute /thorn 268 | /ydieresis 269 | ] def 270 | %%EndResource 271 | %FOPBeginFontReencode 272 | /Courier-Oblique findfont 273 | dup length dict begin 274 | {1 index /FID ne {def} {pop pop} ifelse} forall 275 | /Encoding WinAnsiEncoding def 276 | currentdict 277 | end 278 | /Courier-Oblique exch definefont pop 279 | /Courier-BoldOblique findfont 280 | dup length dict begin 281 | {1 index /FID ne {def} {pop pop} ifelse} forall 282 | /Encoding WinAnsiEncoding def 283 | currentdict 284 | end 285 | /Courier-BoldOblique exch definefont pop 286 | /Courier-Bold findfont 287 | dup length dict begin 288 | {1 index /FID ne {def} {pop pop} ifelse} forall 289 | /Encoding WinAnsiEncoding def 290 | currentdict 291 | end 292 | /Courier-Bold exch definefont pop 293 | /Helvetica findfont 294 | dup length dict begin 295 | {1 index /FID ne {def} {pop pop} ifelse} forall 296 | /Encoding WinAnsiEncoding def 297 | currentdict 298 | end 299 | /Helvetica exch definefont pop 300 | /Helvetica-Oblique findfont 301 | dup length dict begin 302 | {1 index /FID ne {def} {pop pop} ifelse} forall 303 | /Encoding WinAnsiEncoding def 304 | currentdict 305 | end 306 | /Helvetica-Oblique exch definefont pop 307 | /Helvetica-Bold findfont 308 | dup length dict begin 309 | {1 index /FID ne {def} {pop pop} ifelse} forall 310 | /Encoding WinAnsiEncoding def 311 | currentdict 312 | end 313 | /Helvetica-Bold exch definefont pop 314 | /Helvetica-BoldOblique findfont 315 | dup length dict begin 316 | {1 index /FID ne {def} {pop pop} ifelse} forall 317 | /Encoding WinAnsiEncoding def 318 | currentdict 319 | end 320 | /Helvetica-BoldOblique exch definefont pop 321 | /Times-Roman findfont 322 | dup length dict begin 323 | {1 index /FID ne {def} {pop pop} ifelse} forall 324 | /Encoding WinAnsiEncoding def 325 | currentdict 326 | end 327 | /Times-Roman exch definefont pop 328 | /Times-Italic findfont 329 | dup length dict begin 330 | {1 index /FID ne {def} {pop pop} ifelse} forall 331 | /Encoding WinAnsiEncoding def 332 | currentdict 333 | end 334 | /Times-Italic exch definefont pop 335 | /Times-Bold findfont 336 | dup length dict begin 337 | {1 index /FID ne {def} {pop pop} ifelse} forall 338 | /Encoding WinAnsiEncoding def 339 | currentdict 340 | end 341 | /Times-Bold exch definefont pop 342 | /Times-BoldItalic findfont 343 | dup length dict begin 344 | {1 index /FID ne {def} {pop pop} ifelse} forall 345 | /Encoding WinAnsiEncoding def 346 | currentdict 347 | end 348 | /Times-BoldItalic exch definefont pop 349 | /Courier findfont 350 | dup length dict begin 351 | {1 index /FID ne {def} {pop pop} ifelse} forall 352 | /Encoding WinAnsiEncoding def 353 | currentdict 354 | end 355 | /Courier exch definefont pop 356 | %FOPEndFontReencode 357 | %%EndProlog 358 | %%Page: 1 1 359 | %%PageBoundingBox: 0 0 560 420 360 | %%BeginPageSetup 361 | [1 0 0 -1 0 420] CT 362 | %%EndPageSetup 363 | GS 364 | 1 GC 365 | N 366 | 0 0 560 420 re 367 | f 368 | GR 369 | GS 370 | 1 GC 371 | N 372 | 0 0 560 420 re 373 | f 374 | GR 375 | GS 376 | 1 GC 377 | N 378 | 73 374 M 379 | 507 374 L 380 | 507 31.5 L 381 | 73 31.5 L 382 | cp 383 | f 384 | GR 385 | GS 386 | 0.149 GC 387 | 2 setlinecap 388 | 1 LJ 389 | 0.5 LW 390 | N 391 | 73 374 M 392 | 507 374 L 393 | S 394 | GR 395 | GS 396 | 0.149 GC 397 | 2 setlinecap 398 | 1 LJ 399 | 0.5 LW 400 | N 401 | 73 31.5 M 402 | 507 31.5 L 403 | S 404 | GR 405 | GS 406 | 0.149 GC 407 | 2 setlinecap 408 | 1 LJ 409 | 0.5 LW 410 | N 411 | 73 374 M 412 | 73 369.66 L 413 | S 414 | GR 415 | GS 416 | 0.149 GC 417 | 2 setlinecap 418 | 1 LJ 419 | 0.5 LW 420 | N 421 | 145.333 374 M 422 | 145.333 369.66 L 423 | S 424 | GR 425 | GS 426 | 0.149 GC 427 | 2 setlinecap 428 | 1 LJ 429 | 0.5 LW 430 | N 431 | 217.667 374 M 432 | 217.667 369.66 L 433 | S 434 | GR 435 | GS 436 | 0.149 GC 437 | 2 setlinecap 438 | 1 LJ 439 | 0.5 LW 440 | N 441 | 290 374 M 442 | 290 369.66 L 443 | S 444 | GR 445 | GS 446 | 0.149 GC 447 | 2 setlinecap 448 | 1 LJ 449 | 0.5 LW 450 | N 451 | 362.333 374 M 452 | 362.333 369.66 L 453 | S 454 | GR 455 | GS 456 | 0.149 GC 457 | 2 setlinecap 458 | 1 LJ 459 | 0.5 LW 460 | N 461 | 434.667 374 M 462 | 434.667 369.66 L 463 | S 464 | GR 465 | GS 466 | 0.149 GC 467 | 2 setlinecap 468 | 1 LJ 469 | 0.5 LW 470 | N 471 | 507 374 M 472 | 507 369.66 L 473 | S 474 | GR 475 | GS 476 | 0.149 GC 477 | 2 setlinecap 478 | 1 LJ 479 | 0.5 LW 480 | N 481 | 73 31.5 M 482 | 73 35.84 L 483 | S 484 | GR 485 | GS 486 | 0.149 GC 487 | 2 setlinecap 488 | 1 LJ 489 | 0.5 LW 490 | N 491 | 145.333 31.5 M 492 | 145.333 35.84 L 493 | S 494 | GR 495 | GS 496 | 0.149 GC 497 | 2 setlinecap 498 | 1 LJ 499 | 0.5 LW 500 | N 501 | 217.667 31.5 M 502 | 217.667 35.84 L 503 | S 504 | GR 505 | GS 506 | 0.149 GC 507 | 2 setlinecap 508 | 1 LJ 509 | 0.5 LW 510 | N 511 | 290 31.5 M 512 | 290 35.84 L 513 | S 514 | GR 515 | GS 516 | 0.149 GC 517 | 2 setlinecap 518 | 1 LJ 519 | 0.5 LW 520 | N 521 | 362.333 31.5 M 522 | 362.333 35.84 L 523 | S 524 | GR 525 | GS 526 | 0.149 GC 527 | 2 setlinecap 528 | 1 LJ 529 | 0.5 LW 530 | N 531 | 434.667 31.5 M 532 | 434.667 35.84 L 533 | S 534 | GR 535 | GS 536 | 0.149 GC 537 | 2 setlinecap 538 | 1 LJ 539 | 0.5 LW 540 | N 541 | 507 31.5 M 542 | 507 35.84 L 543 | S 544 | GR 545 | GS 546 | [1 0 0 1 73 378] CT 547 | 0.149 GC 548 | /Helvetica 10 F 549 | GS 550 | [1 0 0 1 0 0] CT 551 | -3 10 moveto 552 | 1 -1 scale 553 | (0) t 554 | GR 555 | GR 556 | GS 557 | [1 0 0 1 145.33333 378] CT 558 | 0.149 GC 559 | /Helvetica 10 F 560 | GS 561 | [1 0 0 1 0 0] CT 562 | -3 10 moveto 563 | 1 -1 scale 564 | (2) t 565 | GR 566 | GR 567 | GS 568 | [1 0 0 1 217.66667 378] CT 569 | 0.149 GC 570 | /Helvetica 10 F 571 | GS 572 | [1 0 0 1 0 0] CT 573 | -3 10 moveto 574 | 1 -1 scale 575 | (4) t 576 | GR 577 | GR 578 | GS 579 | [1 0 0 1 290 378] CT 580 | 0.149 GC 581 | /Helvetica 10 F 582 | GS 583 | [1 0 0 1 0 0] CT 584 | -3 10 moveto 585 | 1 -1 scale 586 | (6) t 587 | GR 588 | GR 589 | GS 590 | [1 0 0 1 362.33334 378] CT 591 | 0.149 GC 592 | /Helvetica 10 F 593 | GS 594 | [1 0 0 1 0 0] CT 595 | -3 10 moveto 596 | 1 -1 scale 597 | (8) t 598 | GR 599 | GR 600 | GS 601 | [1 0 0 1 434.66666 378] CT 602 | 0.149 GC 603 | /Helvetica 10 F 604 | GS 605 | [1 0 0 1 0 0] CT 606 | -6 10 moveto 607 | 1 -1 scale 608 | (10) t 609 | GR 610 | GR 611 | GS 612 | [1 0 0 1 507 378] CT 613 | 0.149 GC 614 | /Helvetica 10 F 615 | GS 616 | [1 0 0 1 0 0] CT 617 | -6 10 moveto 618 | 1 -1 scale 619 | (12) t 620 | GR 621 | GR 622 | GS 623 | [1 0 0 1 290.00021 391.5] CT 624 | 0.149 GC 625 | /Helvetica 11 F 626 | GS 627 | [1 0 0 1 0 0] CT 628 | -7 11 moveto 629 | 1 -1 scale 630 | (R1) t 631 | GR 632 | GR 633 | GS 634 | 0.149 GC 635 | 2 setlinecap 636 | 1 LJ 637 | 0.5 LW 638 | N 639 | 73 374 M 640 | 73 31.5 L 641 | S 642 | GR 643 | GS 644 | 0.149 GC 645 | 2 setlinecap 646 | 1 LJ 647 | 0.5 LW 648 | N 649 | 507 374 M 650 | 507 31.5 L 651 | S 652 | GR 653 | GS 654 | 0.149 GC 655 | 2 setlinecap 656 | 1 LJ 657 | 0.5 LW 658 | N 659 | 73 373 M 660 | 77.34 373 L 661 | S 662 | GR 663 | GS 664 | 0.149 GC 665 | 2 setlinecap 666 | 1 LJ 667 | 0.5 LW 668 | N 669 | 73 338.75 M 670 | 77.34 338.75 L 671 | S 672 | GR 673 | GS 674 | 0.149 GC 675 | 2 setlinecap 676 | 1 LJ 677 | 0.5 LW 678 | N 679 | 73 304.5 M 680 | 77.34 304.5 L 681 | S 682 | GR 683 | GS 684 | 0.149 GC 685 | 2 setlinecap 686 | 1 LJ 687 | 0.5 LW 688 | N 689 | 73 270.25 M 690 | 77.34 270.25 L 691 | S 692 | GR 693 | GS 694 | 0.149 GC 695 | 2 setlinecap 696 | 1 LJ 697 | 0.5 LW 698 | N 699 | 73 236 M 700 | 77.34 236 L 701 | S 702 | GR 703 | GS 704 | 0.149 GC 705 | 2 setlinecap 706 | 1 LJ 707 | 0.5 LW 708 | N 709 | 73 201.75 M 710 | 77.34 201.75 L 711 | S 712 | GR 713 | GS 714 | 0.149 GC 715 | 2 setlinecap 716 | 1 LJ 717 | 0.5 LW 718 | N 719 | 73 167.5 M 720 | 77.34 167.5 L 721 | S 722 | GR 723 | GS 724 | 0.149 GC 725 | 2 setlinecap 726 | 1 LJ 727 | 0.5 LW 728 | N 729 | 73 133.25 M 730 | 77.34 133.25 L 731 | S 732 | GR 733 | GS 734 | 0.149 GC 735 | 2 setlinecap 736 | 1 LJ 737 | 0.5 LW 738 | N 739 | 73 99 M 740 | 77.34 99 L 741 | S 742 | GR 743 | GS 744 | 0.149 GC 745 | 2 setlinecap 746 | 1 LJ 747 | 0.5 LW 748 | N 749 | 73 64.75 M 750 | 77.34 64.75 L 751 | S 752 | GR 753 | GS 754 | 0.149 GC 755 | 2 setlinecap 756 | 1 LJ 757 | 0.5 LW 758 | N 759 | 507 373 M 760 | 502.66 373 L 761 | S 762 | GR 763 | GS 764 | 0.149 GC 765 | 2 setlinecap 766 | 1 LJ 767 | 0.5 LW 768 | N 769 | 507 338.75 M 770 | 502.66 338.75 L 771 | S 772 | GR 773 | GS 774 | 0.149 GC 775 | 2 setlinecap 776 | 1 LJ 777 | 0.5 LW 778 | N 779 | 507 304.5 M 780 | 502.66 304.5 L 781 | S 782 | GR 783 | GS 784 | 0.149 GC 785 | 2 setlinecap 786 | 1 LJ 787 | 0.5 LW 788 | N 789 | 507 270.25 M 790 | 502.66 270.25 L 791 | S 792 | GR 793 | GS 794 | 0.149 GC 795 | 2 setlinecap 796 | 1 LJ 797 | 0.5 LW 798 | N 799 | 507 236 M 800 | 502.66 236 L 801 | S 802 | GR 803 | GS 804 | 0.149 GC 805 | 2 setlinecap 806 | 1 LJ 807 | 0.5 LW 808 | N 809 | 507 201.75 M 810 | 502.66 201.75 L 811 | S 812 | GR 813 | GS 814 | 0.149 GC 815 | 2 setlinecap 816 | 1 LJ 817 | 0.5 LW 818 | N 819 | 507 167.5 M 820 | 502.66 167.5 L 821 | S 822 | GR 823 | GS 824 | 0.149 GC 825 | 2 setlinecap 826 | 1 LJ 827 | 0.5 LW 828 | N 829 | 507 133.25 M 830 | 502.66 133.25 L 831 | S 832 | GR 833 | GS 834 | 0.149 GC 835 | 2 setlinecap 836 | 1 LJ 837 | 0.5 LW 838 | N 839 | 507 99 M 840 | 502.66 99 L 841 | S 842 | GR 843 | GS 844 | 0.149 GC 845 | 2 setlinecap 846 | 1 LJ 847 | 0.5 LW 848 | N 849 | 507 64.75 M 850 | 502.66 64.75 L 851 | S 852 | GR 853 | GS 854 | [1 0 0 1 69 373] CT 855 | 0.149 GC 856 | /Helvetica 10 F 857 | GS 858 | [1 0 0 1 0 0] CT 859 | -6 3.5 moveto 860 | 1 -1 scale 861 | (0) t 862 | GR 863 | GR 864 | GS 865 | [1 0 0 1 69 338.75] CT 866 | 0.149 GC 867 | /Helvetica 10 F 868 | GS 869 | [1 0 0 1 0 0] CT 870 | -6 3.5 moveto 871 | 1 -1 scale 872 | (1) t 873 | GR 874 | GR 875 | GS 876 | [1 0 0 1 69 304.5] CT 877 | 0.149 GC 878 | /Helvetica 10 F 879 | GS 880 | [1 0 0 1 0 0] CT 881 | -6 3.5 moveto 882 | 1 -1 scale 883 | (2) t 884 | GR 885 | GR 886 | GS 887 | [1 0 0 1 69 270.25] CT 888 | 0.149 GC 889 | /Helvetica 10 F 890 | GS 891 | [1 0 0 1 0 0] CT 892 | -6 3.5 moveto 893 | 1 -1 scale 894 | (3) t 895 | GR 896 | GR 897 | GS 898 | [1 0 0 1 69 236] CT 899 | 0.149 GC 900 | /Helvetica 10 F 901 | GS 902 | [1 0 0 1 0 0] CT 903 | -6 3.5 moveto 904 | 1 -1 scale 905 | (4) t 906 | GR 907 | GR 908 | GS 909 | [1 0 0 1 69 201.75] CT 910 | 0.149 GC 911 | /Helvetica 10 F 912 | GS 913 | [1 0 0 1 0 0] CT 914 | -6 3.5 moveto 915 | 1 -1 scale 916 | (5) t 917 | GR 918 | GR 919 | GS 920 | [1 0 0 1 69 167.5] CT 921 | 0.149 GC 922 | /Helvetica 10 F 923 | GS 924 | [1 0 0 1 0 0] CT 925 | -6 3.5 moveto 926 | 1 -1 scale 927 | (6) t 928 | GR 929 | GR 930 | GS 931 | [1 0 0 1 69 133.25] CT 932 | 0.149 GC 933 | /Helvetica 10 F 934 | GS 935 | [1 0 0 1 0 0] CT 936 | -6 3.5 moveto 937 | 1 -1 scale 938 | (7) t 939 | GR 940 | GR 941 | GS 942 | [1 0 0 1 69 99] CT 943 | 0.149 GC 944 | /Helvetica 10 F 945 | GS 946 | [1 0 0 1 0 0] CT 947 | -6 3.5 moveto 948 | 1 -1 scale 949 | (8) t 950 | GR 951 | GR 952 | GS 953 | [1 0 0 1 69 64.75] CT 954 | 0.149 GC 955 | /Helvetica 10 F 956 | GS 957 | [1 0 0 1 0 0] CT 958 | -6 3.5 moveto 959 | 1 -1 scale 960 | (9) t 961 | GR 962 | GR 963 | GS 964 | [0 -1 1 0 60 202.74983] CT 965 | 0.149 GC 966 | /Helvetica 11 F 967 | GS 968 | [1 0 0 1 0 0] CT 969 | -7 -3 moveto 970 | 1 -1 scale 971 | (R2) t 972 | GR 973 | GR 974 | GS 975 | [1 0 0 1 290.00027 30.12499] CT 976 | /Helvetica-Bold 11 F 977 | GS 978 | [1 0 0 1 0 0] CT 979 | -47 -3 moveto 980 | 1 -1 scale 981 | (WSR-MMSE,10dB) t 982 | GR 983 | GR 984 | GS 985 | 0 0 1 RC 986 | 1 LJ 987 | 0.5 LW 988 | N 989 | 441.941 373 M 990 | 362.47 237.322 L 991 | 148.188 49.204 L 992 | 94.002 44.336 L 993 | 73 49.656 L 994 | S 995 | GR 996 | GS 997 | [1 0 0 1 441.94104 373] CT 998 | 0 0 1 RC 999 | N 1000 | 0 -2.75 M 1001 | 1.519 -2.75 2.75 -1.519 2.75 0 C 1002 | 2.75 0 L 1003 | 2.75 1.519 1.519 2.75 0 2.75 C 1004 | -1.519 2.75 -2.75 1.519 -2.75 0 C 1005 | -2.75 -1.519 -1.519 -2.75 0 -2.75 C 1006 | cp 1007 | 0 -3.25 M 1008 | -1.795 -3.25 -3.25 -1.795 -3.25 0 C 1009 | -3.25 1.795 -1.795 3.25 0 3.25 C 1010 | 1.795 3.25 3.25 1.795 3.25 0 C 1011 | 3.25 0 L 1012 | 3.25 -1.795 1.795 -3.25 0 -3.25 C 1013 | cp 1014 | f 1015 | GR 1016 | GS 1017 | [1 0 0 1 362.47018 237.32187] CT 1018 | 0 0 1 RC 1019 | N 1020 | /f-1077290934{0 -2.75 M 1021 | 1.519 -2.75 2.75 -1.519 2.75 0 C 1022 | 2.75 0 L 1023 | 2.75 1.519 1.519 2.75 0 2.75 C 1024 | -1.519 2.75 -2.75 1.519 -2.75 0 C 1025 | -2.75 -1.519 -1.519 -2.75 0 -2.75 C 1026 | cp 1027 | 0 -3.25 M 1028 | -1.795 -3.25 -3.25 -1.795 -3.25 0 C 1029 | -3.25 1.795 -1.795 3.25 0 3.25 C 1030 | 1.795 3.25 3.25 1.795 3.25 0 C 1031 | 3.25 0 L 1032 | 3.25 -1.795 1.795 -3.25 0 -3.25 C 1033 | cp}def 1034 | f-1077290934 1035 | f 1036 | GR 1037 | GS 1038 | [1 0 0 1 148.18814 49.20421] CT 1039 | 0 0 1 RC 1040 | N 1041 | f-1077290934 1042 | f 1043 | GR 1044 | GS 1045 | [1 0 0 1 94.00169 44.33551] CT 1046 | 0 0 1 RC 1047 | N 1048 | f-1077290934 1049 | f 1050 | GR 1051 | GS 1052 | [1 0 0 1 73 49.65623] CT 1053 | 0 0 1 RC 1054 | N 1055 | f-1077290934 1056 | f 1057 | GR 1058 | %%Trailer 1059 | %%Pages: 1 1060 | %%EOF 1061 | -------------------------------------------------------------------------------- /WSR-WMMSE-MIMO-BC/rnd channel fig/AO_RND_0dB.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Creator: (MATLAB, The Mathworks, Inc. Version 9.8.0.1323502 \(R2020a\). Operating System: Mac OS X) 3 | %%Title: (/Users/James/Desktop/WSR-WMMSE-MIMO-BC/rnd channel fig/AO RND 0dB.eps) 4 | %%CreationDate: 2020-06-12T14:58:14 5 | %%Pages: (atend) 6 | %%BoundingBox: 0 0 560 420 7 | %%LanguageLevel: 3 8 | %%EndComments 9 | %%BeginProlog 10 | %%BeginResource: procset (Apache XML Graphics Std ProcSet) 1.2 0 11 | %%Version: 1.2 0 12 | %%Copyright: (Copyright 2001-2003,2010 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) 13 | /bd{bind def}bind def 14 | /ld{load def}bd 15 | /GR/grestore ld 16 | /GS/gsave ld 17 | /RM/rmoveto ld 18 | /C/curveto ld 19 | /t/show ld 20 | /L/lineto ld 21 | /ML/setmiterlimit ld 22 | /CT/concat ld 23 | /f/fill ld 24 | /N/newpath ld 25 | /S/stroke ld 26 | /CC/setcmykcolor ld 27 | /A/ashow ld 28 | /cp/closepath ld 29 | /RC/setrgbcolor ld 30 | /LJ/setlinejoin ld 31 | /GC/setgray ld 32 | /LW/setlinewidth ld 33 | /M/moveto ld 34 | /re {4 2 roll M 35 | 1 index 0 rlineto 36 | 0 exch rlineto 37 | neg 0 rlineto 38 | cp } bd 39 | /_ctm matrix def 40 | /_tm matrix def 41 | /BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd 42 | /ET { _ctm setmatrix } bd 43 | /iTm { _ctm setmatrix _tm concat } bd 44 | /Tm { _tm astore pop iTm 0 0 moveto } bd 45 | /ux 0.0 def 46 | /uy 0.0 def 47 | /F { 48 | /Tp exch def 49 | /Tf exch def 50 | Tf findfont Tp scalefont setfont 51 | /cf Tf def /cs Tp def 52 | } bd 53 | /ULS {currentpoint /uy exch def /ux exch def} bd 54 | /ULE { 55 | /Tcx currentpoint pop def 56 | gsave 57 | newpath 58 | cf findfont cs scalefont dup 59 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 60 | /UnderlinePosition get Ts mul /To exch def 61 | /UnderlineThickness get Ts mul /Tt exch def 62 | ux uy To add moveto Tcx uy To add lineto 63 | Tt setlinewidth stroke 64 | grestore 65 | } bd 66 | /OLE { 67 | /Tcx currentpoint pop def 68 | gsave 69 | newpath 70 | cf findfont cs scalefont dup 71 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 72 | /UnderlinePosition get Ts mul /To exch def 73 | /UnderlineThickness get Ts mul /Tt exch def 74 | ux uy To add cs add moveto Tcx uy To add cs add lineto 75 | Tt setlinewidth stroke 76 | grestore 77 | } bd 78 | /SOE { 79 | /Tcx currentpoint pop def 80 | gsave 81 | newpath 82 | cf findfont cs scalefont dup 83 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 84 | /UnderlinePosition get Ts mul /To exch def 85 | /UnderlineThickness get Ts mul /Tt exch def 86 | ux uy To add cs 10 mul 26 idiv add moveto Tcx uy To add cs 10 mul 26 idiv add lineto 87 | Tt setlinewidth stroke 88 | grestore 89 | } bd 90 | /QT { 91 | /Y22 exch store 92 | /X22 exch store 93 | /Y21 exch store 94 | /X21 exch store 95 | currentpoint 96 | /Y21 load 2 mul add 3 div exch 97 | /X21 load 2 mul add 3 div exch 98 | /X21 load 2 mul /X22 load add 3 div 99 | /Y21 load 2 mul /Y22 load add 3 div 100 | /X22 load /Y22 load curveto 101 | } bd 102 | /SSPD { 103 | dup length /d exch dict def 104 | { 105 | /v exch def 106 | /k exch def 107 | currentpagedevice k known { 108 | /cpdv currentpagedevice k get def 109 | v cpdv ne { 110 | /upd false def 111 | /nullv v type /nulltype eq def 112 | /nullcpdv cpdv type /nulltype eq def 113 | nullv nullcpdv or 114 | { 115 | /upd true def 116 | } { 117 | /sametype v type cpdv type eq def 118 | sametype { 119 | v type /arraytype eq { 120 | /vlen v length def 121 | /cpdvlen cpdv length def 122 | vlen cpdvlen eq { 123 | 0 1 vlen 1 sub { 124 | /i exch def 125 | /obj v i get def 126 | /cpdobj cpdv i get def 127 | obj cpdobj ne { 128 | /upd true def 129 | exit 130 | } if 131 | } for 132 | } { 133 | /upd true def 134 | } ifelse 135 | } { 136 | v type /dicttype eq { 137 | v { 138 | /dv exch def 139 | /dk exch def 140 | /cpddv cpdv dk get def 141 | dv cpddv ne { 142 | /upd true def 143 | exit 144 | } if 145 | } forall 146 | } { 147 | /upd true def 148 | } ifelse 149 | } ifelse 150 | } if 151 | } ifelse 152 | upd true eq { 153 | d k v put 154 | } if 155 | } if 156 | } if 157 | } forall 158 | d length 0 gt { 159 | d setpagedevice 160 | } if 161 | } bd 162 | /RE { % /NewFontName [NewEncodingArray] /FontName RE - 163 | findfont dup length dict begin 164 | { 165 | 1 index /FID ne 166 | {def} {pop pop} ifelse 167 | } forall 168 | /Encoding exch def 169 | /FontName 1 index def 170 | currentdict definefont pop 171 | end 172 | } bind def 173 | %%EndResource 174 | %%BeginResource: procset (Apache XML Graphics EPS ProcSet) 1.0 0 175 | %%Version: 1.0 0 176 | %%Copyright: (Copyright 2002-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) 177 | /BeginEPSF { %def 178 | /b4_Inc_state save def % Save state for cleanup 179 | /dict_count countdictstack def % Count objects on dict stack 180 | /op_count count 1 sub def % Count objects on operand stack 181 | userdict begin % Push userdict on dict stack 182 | /showpage { } def % Redefine showpage, { } = null proc 183 | 0 setgray 0 setlinecap % Prepare graphics state 184 | 1 setlinewidth 0 setlinejoin 185 | 10 setmiterlimit [ ] 0 setdash newpath 186 | /languagelevel where % If level not equal to 1 then 187 | {pop languagelevel % set strokeadjust and 188 | 1 ne % overprint to their defaults. 189 | {false setstrokeadjust false setoverprint 190 | } if 191 | } if 192 | } bd 193 | /EndEPSF { %def 194 | count op_count sub {pop} repeat % Clean up stacks 195 | countdictstack dict_count sub {end} repeat 196 | b4_Inc_state restore 197 | } bd 198 | %%EndResource 199 | %FOPBeginFontDict 200 | %%IncludeResource: font Courier-Oblique 201 | %%IncludeResource: font Courier-BoldOblique 202 | %%IncludeResource: font Courier-Bold 203 | %%IncludeResource: font ZapfDingbats 204 | %%IncludeResource: font Symbol 205 | %%IncludeResource: font Helvetica 206 | %%IncludeResource: font Helvetica-Oblique 207 | %%IncludeResource: font Helvetica-Bold 208 | %%IncludeResource: font Helvetica-BoldOblique 209 | %%IncludeResource: font Times-Roman 210 | %%IncludeResource: font Times-Italic 211 | %%IncludeResource: font Times-Bold 212 | %%IncludeResource: font Times-BoldItalic 213 | %%IncludeResource: font Courier 214 | %FOPEndFontDict 215 | %%BeginResource: encoding WinAnsiEncoding 216 | /WinAnsiEncoding [ 217 | /.notdef /.notdef /.notdef /.notdef /.notdef 218 | /.notdef /.notdef /.notdef /.notdef /.notdef 219 | /.notdef /.notdef /.notdef /.notdef /.notdef 220 | /.notdef /.notdef /.notdef /.notdef /.notdef 221 | /.notdef /.notdef /.notdef /.notdef /.notdef 222 | /.notdef /.notdef /.notdef /.notdef /.notdef 223 | /.notdef /.notdef /space /exclam /quotedbl 224 | /numbersign /dollar /percent /ampersand /quotesingle 225 | /parenleft /parenright /asterisk /plus /comma 226 | /hyphen /period /slash /zero /one 227 | /two /three /four /five /six 228 | /seven /eight /nine /colon /semicolon 229 | /less /equal /greater /question /at 230 | /A /B /C /D /E 231 | /F /G /H /I /J 232 | /K /L /M /N /O 233 | /P /Q /R /S /T 234 | /U /V /W /X /Y 235 | /Z /bracketleft /backslash /bracketright /asciicircum 236 | /underscore /quoteleft /a /b /c 237 | /d /e /f /g /h 238 | /i /j /k /l /m 239 | /n /o /p /q /r 240 | /s /t /u /v /w 241 | /x /y /z /braceleft /bar 242 | /braceright /asciitilde /bullet /Euro /bullet 243 | /quotesinglbase /florin /quotedblbase /ellipsis /dagger 244 | /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft 245 | /OE /bullet /Zcaron /bullet /bullet 246 | /quoteleft /quoteright /quotedblleft /quotedblright /bullet 247 | /endash /emdash /asciitilde /trademark /scaron 248 | /guilsinglright /oe /bullet /zcaron /Ydieresis 249 | /space /exclamdown /cent /sterling /currency 250 | /yen /brokenbar /section /dieresis /copyright 251 | /ordfeminine /guillemotleft /logicalnot /sfthyphen /registered 252 | /macron /degree /plusminus /twosuperior /threesuperior 253 | /acute /mu /paragraph /middot /cedilla 254 | /onesuperior /ordmasculine /guillemotright /onequarter /onehalf 255 | /threequarters /questiondown /Agrave /Aacute /Acircumflex 256 | /Atilde /Adieresis /Aring /AE /Ccedilla 257 | /Egrave /Eacute /Ecircumflex /Edieresis /Igrave 258 | /Iacute /Icircumflex /Idieresis /Eth /Ntilde 259 | /Ograve /Oacute /Ocircumflex /Otilde /Odieresis 260 | /multiply /Oslash /Ugrave /Uacute /Ucircumflex 261 | /Udieresis /Yacute /Thorn /germandbls /agrave 262 | /aacute /acircumflex /atilde /adieresis /aring 263 | /ae /ccedilla /egrave /eacute /ecircumflex 264 | /edieresis /igrave /iacute /icircumflex /idieresis 265 | /eth /ntilde /ograve /oacute /ocircumflex 266 | /otilde /odieresis /divide /oslash /ugrave 267 | /uacute /ucircumflex /udieresis /yacute /thorn 268 | /ydieresis 269 | ] def 270 | %%EndResource 271 | %FOPBeginFontReencode 272 | /Courier-Oblique findfont 273 | dup length dict begin 274 | {1 index /FID ne {def} {pop pop} ifelse} forall 275 | /Encoding WinAnsiEncoding def 276 | currentdict 277 | end 278 | /Courier-Oblique exch definefont pop 279 | /Courier-BoldOblique findfont 280 | dup length dict begin 281 | {1 index /FID ne {def} {pop pop} ifelse} forall 282 | /Encoding WinAnsiEncoding def 283 | currentdict 284 | end 285 | /Courier-BoldOblique exch definefont pop 286 | /Courier-Bold findfont 287 | dup length dict begin 288 | {1 index /FID ne {def} {pop pop} ifelse} forall 289 | /Encoding WinAnsiEncoding def 290 | currentdict 291 | end 292 | /Courier-Bold exch definefont pop 293 | /Helvetica findfont 294 | dup length dict begin 295 | {1 index /FID ne {def} {pop pop} ifelse} forall 296 | /Encoding WinAnsiEncoding def 297 | currentdict 298 | end 299 | /Helvetica exch definefont pop 300 | /Helvetica-Oblique findfont 301 | dup length dict begin 302 | {1 index /FID ne {def} {pop pop} ifelse} forall 303 | /Encoding WinAnsiEncoding def 304 | currentdict 305 | end 306 | /Helvetica-Oblique exch definefont pop 307 | /Helvetica-Bold findfont 308 | dup length dict begin 309 | {1 index /FID ne {def} {pop pop} ifelse} forall 310 | /Encoding WinAnsiEncoding def 311 | currentdict 312 | end 313 | /Helvetica-Bold exch definefont pop 314 | /Helvetica-BoldOblique findfont 315 | dup length dict begin 316 | {1 index /FID ne {def} {pop pop} ifelse} forall 317 | /Encoding WinAnsiEncoding def 318 | currentdict 319 | end 320 | /Helvetica-BoldOblique exch definefont pop 321 | /Times-Roman findfont 322 | dup length dict begin 323 | {1 index /FID ne {def} {pop pop} ifelse} forall 324 | /Encoding WinAnsiEncoding def 325 | currentdict 326 | end 327 | /Times-Roman exch definefont pop 328 | /Times-Italic findfont 329 | dup length dict begin 330 | {1 index /FID ne {def} {pop pop} ifelse} forall 331 | /Encoding WinAnsiEncoding def 332 | currentdict 333 | end 334 | /Times-Italic exch definefont pop 335 | /Times-Bold findfont 336 | dup length dict begin 337 | {1 index /FID ne {def} {pop pop} ifelse} forall 338 | /Encoding WinAnsiEncoding def 339 | currentdict 340 | end 341 | /Times-Bold exch definefont pop 342 | /Times-BoldItalic findfont 343 | dup length dict begin 344 | {1 index /FID ne {def} {pop pop} ifelse} forall 345 | /Encoding WinAnsiEncoding def 346 | currentdict 347 | end 348 | /Times-BoldItalic exch definefont pop 349 | /Courier findfont 350 | dup length dict begin 351 | {1 index /FID ne {def} {pop pop} ifelse} forall 352 | /Encoding WinAnsiEncoding def 353 | currentdict 354 | end 355 | /Courier exch definefont pop 356 | %FOPEndFontReencode 357 | %%EndProlog 358 | %%Page: 1 1 359 | %%PageBoundingBox: 0 0 560 420 360 | %%BeginPageSetup 361 | [1 0 0 -1 0 420] CT 362 | %%EndPageSetup 363 | GS 364 | 1 GC 365 | N 366 | 0 0 560 420 re 367 | f 368 | GR 369 | GS 370 | 1 GC 371 | N 372 | 0 0 560 420 re 373 | f 374 | GR 375 | GS 376 | 1 GC 377 | N 378 | 73 374 M 379 | 507 374 L 380 | 507 31.5 L 381 | 73 31.5 L 382 | cp 383 | f 384 | GR 385 | GS 386 | 0.149 GC 387 | 2 setlinecap 388 | 1 LJ 389 | 0.5 LW 390 | N 391 | 73 374 M 392 | 507 374 L 393 | S 394 | GR 395 | GS 396 | 0.149 GC 397 | 2 setlinecap 398 | 1 LJ 399 | 0.5 LW 400 | N 401 | 73 31.5 M 402 | 507 31.5 L 403 | S 404 | GR 405 | GS 406 | 0.149 GC 407 | 2 setlinecap 408 | 1 LJ 409 | 0.5 LW 410 | N 411 | 73 374 M 412 | 73 369.66 L 413 | S 414 | GR 415 | GS 416 | 0.149 GC 417 | 2 setlinecap 418 | 1 LJ 419 | 0.5 LW 420 | N 421 | 127.25 374 M 422 | 127.25 369.66 L 423 | S 424 | GR 425 | GS 426 | 0.149 GC 427 | 2 setlinecap 428 | 1 LJ 429 | 0.5 LW 430 | N 431 | 181.5 374 M 432 | 181.5 369.66 L 433 | S 434 | GR 435 | GS 436 | 0.149 GC 437 | 2 setlinecap 438 | 1 LJ 439 | 0.5 LW 440 | N 441 | 235.75 374 M 442 | 235.75 369.66 L 443 | S 444 | GR 445 | GS 446 | 0.149 GC 447 | 2 setlinecap 448 | 1 LJ 449 | 0.5 LW 450 | N 451 | 290 374 M 452 | 290 369.66 L 453 | S 454 | GR 455 | GS 456 | 0.149 GC 457 | 2 setlinecap 458 | 1 LJ 459 | 0.5 LW 460 | N 461 | 344.25 374 M 462 | 344.25 369.66 L 463 | S 464 | GR 465 | GS 466 | 0.149 GC 467 | 2 setlinecap 468 | 1 LJ 469 | 0.5 LW 470 | N 471 | 398.5 374 M 472 | 398.5 369.66 L 473 | S 474 | GR 475 | GS 476 | 0.149 GC 477 | 2 setlinecap 478 | 1 LJ 479 | 0.5 LW 480 | N 481 | 452.75 374 M 482 | 452.75 369.66 L 483 | S 484 | GR 485 | GS 486 | 0.149 GC 487 | 2 setlinecap 488 | 1 LJ 489 | 0.5 LW 490 | N 491 | 507 374 M 492 | 507 369.66 L 493 | S 494 | GR 495 | GS 496 | 0.149 GC 497 | 2 setlinecap 498 | 1 LJ 499 | 0.5 LW 500 | N 501 | 73 31.5 M 502 | 73 35.84 L 503 | S 504 | GR 505 | GS 506 | 0.149 GC 507 | 2 setlinecap 508 | 1 LJ 509 | 0.5 LW 510 | N 511 | 127.25 31.5 M 512 | 127.25 35.84 L 513 | S 514 | GR 515 | GS 516 | 0.149 GC 517 | 2 setlinecap 518 | 1 LJ 519 | 0.5 LW 520 | N 521 | 181.5 31.5 M 522 | 181.5 35.84 L 523 | S 524 | GR 525 | GS 526 | 0.149 GC 527 | 2 setlinecap 528 | 1 LJ 529 | 0.5 LW 530 | N 531 | 235.75 31.5 M 532 | 235.75 35.84 L 533 | S 534 | GR 535 | GS 536 | 0.149 GC 537 | 2 setlinecap 538 | 1 LJ 539 | 0.5 LW 540 | N 541 | 290 31.5 M 542 | 290 35.84 L 543 | S 544 | GR 545 | GS 546 | 0.149 GC 547 | 2 setlinecap 548 | 1 LJ 549 | 0.5 LW 550 | N 551 | 344.25 31.5 M 552 | 344.25 35.84 L 553 | S 554 | GR 555 | GS 556 | 0.149 GC 557 | 2 setlinecap 558 | 1 LJ 559 | 0.5 LW 560 | N 561 | 398.5 31.5 M 562 | 398.5 35.84 L 563 | S 564 | GR 565 | GS 566 | 0.149 GC 567 | 2 setlinecap 568 | 1 LJ 569 | 0.5 LW 570 | N 571 | 452.75 31.5 M 572 | 452.75 35.84 L 573 | S 574 | GR 575 | GS 576 | 0.149 GC 577 | 2 setlinecap 578 | 1 LJ 579 | 0.5 LW 580 | N 581 | 507 31.5 M 582 | 507 35.84 L 583 | S 584 | GR 585 | GS 586 | [1 0 0 1 73 378] CT 587 | 0.149 GC 588 | /Helvetica 10 F 589 | GS 590 | [1 0 0 1 0 0] CT 591 | -3 10 moveto 592 | 1 -1 scale 593 | (0) t 594 | GR 595 | GR 596 | GS 597 | [1 0 0 1 127.25 378] CT 598 | 0.149 GC 599 | /Helvetica 10 F 600 | GS 601 | [1 0 0 1 0 0] CT 602 | -7 10 moveto 603 | 1 -1 scale 604 | (0.5) t 605 | GR 606 | GR 607 | GS 608 | [1 0 0 1 181.5 378] CT 609 | 0.149 GC 610 | /Helvetica 10 F 611 | GS 612 | [1 0 0 1 0 0] CT 613 | -3 10 moveto 614 | 1 -1 scale 615 | (1) t 616 | GR 617 | GR 618 | GS 619 | [1 0 0 1 235.75 378] CT 620 | 0.149 GC 621 | /Helvetica 10 F 622 | GS 623 | [1 0 0 1 0 0] CT 624 | -7 10 moveto 625 | 1 -1 scale 626 | (1.5) t 627 | GR 628 | GR 629 | GS 630 | [1 0 0 1 290 378] CT 631 | 0.149 GC 632 | /Helvetica 10 F 633 | GS 634 | [1 0 0 1 0 0] CT 635 | -3 10 moveto 636 | 1 -1 scale 637 | (2) t 638 | GR 639 | GR 640 | GS 641 | [1 0 0 1 344.25 378] CT 642 | 0.149 GC 643 | /Helvetica 10 F 644 | GS 645 | [1 0 0 1 0 0] CT 646 | -7 10 moveto 647 | 1 -1 scale 648 | (2.5) t 649 | GR 650 | GR 651 | GS 652 | [1 0 0 1 398.5 378] CT 653 | 0.149 GC 654 | /Helvetica 10 F 655 | GS 656 | [1 0 0 1 0 0] CT 657 | -3 10 moveto 658 | 1 -1 scale 659 | (3) t 660 | GR 661 | GR 662 | GS 663 | [1 0 0 1 452.75 378] CT 664 | 0.149 GC 665 | /Helvetica 10 F 666 | GS 667 | [1 0 0 1 0 0] CT 668 | -7 10 moveto 669 | 1 -1 scale 670 | (3.5) t 671 | GR 672 | GR 673 | GS 674 | [1 0 0 1 507 378] CT 675 | 0.149 GC 676 | /Helvetica 10 F 677 | GS 678 | [1 0 0 1 0 0] CT 679 | -3 10 moveto 680 | 1 -1 scale 681 | (4) t 682 | GR 683 | GR 684 | GS 685 | [1 0 0 1 290.00021 391.5] CT 686 | 0.149 GC 687 | /Helvetica 11 F 688 | GS 689 | [1 0 0 1 0 0] CT 690 | -7 11 moveto 691 | 1 -1 scale 692 | (R1) t 693 | GR 694 | GR 695 | GS 696 | 0.149 GC 697 | 2 setlinecap 698 | 1 LJ 699 | 0.5 LW 700 | N 701 | 73 374 M 702 | 73 31.5 L 703 | S 704 | GR 705 | GS 706 | 0.149 GC 707 | 2 setlinecap 708 | 1 LJ 709 | 0.5 LW 710 | N 711 | 507 374 M 712 | 507 31.5 L 713 | S 714 | GR 715 | GS 716 | 0.149 GC 717 | 2 setlinecap 718 | 1 LJ 719 | 0.5 LW 720 | N 721 | 73 373 M 722 | 77.34 373 L 723 | S 724 | GR 725 | GS 726 | 0.149 GC 727 | 2 setlinecap 728 | 1 LJ 729 | 0.5 LW 730 | N 731 | 73 330.188 M 732 | 77.34 330.188 L 733 | S 734 | GR 735 | GS 736 | 0.149 GC 737 | 2 setlinecap 738 | 1 LJ 739 | 0.5 LW 740 | N 741 | 73 287.375 M 742 | 77.34 287.375 L 743 | S 744 | GR 745 | GS 746 | 0.149 GC 747 | 2 setlinecap 748 | 1 LJ 749 | 0.5 LW 750 | N 751 | 73 244.563 M 752 | 77.34 244.563 L 753 | S 754 | GR 755 | GS 756 | 0.149 GC 757 | 2 setlinecap 758 | 1 LJ 759 | 0.5 LW 760 | N 761 | 73 201.75 M 762 | 77.34 201.75 L 763 | S 764 | GR 765 | GS 766 | 0.149 GC 767 | 2 setlinecap 768 | 1 LJ 769 | 0.5 LW 770 | N 771 | 73 158.938 M 772 | 77.34 158.938 L 773 | S 774 | GR 775 | GS 776 | 0.149 GC 777 | 2 setlinecap 778 | 1 LJ 779 | 0.5 LW 780 | N 781 | 73 116.125 M 782 | 77.34 116.125 L 783 | S 784 | GR 785 | GS 786 | 0.149 GC 787 | 2 setlinecap 788 | 1 LJ 789 | 0.5 LW 790 | N 791 | 73 73.313 M 792 | 77.34 73.313 L 793 | S 794 | GR 795 | GS 796 | 0.149 GC 797 | 2 setlinecap 798 | 1 LJ 799 | 0.5 LW 800 | N 801 | 507 373 M 802 | 502.66 373 L 803 | S 804 | GR 805 | GS 806 | 0.149 GC 807 | 2 setlinecap 808 | 1 LJ 809 | 0.5 LW 810 | N 811 | 507 330.188 M 812 | 502.66 330.188 L 813 | S 814 | GR 815 | GS 816 | 0.149 GC 817 | 2 setlinecap 818 | 1 LJ 819 | 0.5 LW 820 | N 821 | 507 287.375 M 822 | 502.66 287.375 L 823 | S 824 | GR 825 | GS 826 | 0.149 GC 827 | 2 setlinecap 828 | 1 LJ 829 | 0.5 LW 830 | N 831 | 507 244.563 M 832 | 502.66 244.563 L 833 | S 834 | GR 835 | GS 836 | 0.149 GC 837 | 2 setlinecap 838 | 1 LJ 839 | 0.5 LW 840 | N 841 | 507 201.75 M 842 | 502.66 201.75 L 843 | S 844 | GR 845 | GS 846 | 0.149 GC 847 | 2 setlinecap 848 | 1 LJ 849 | 0.5 LW 850 | N 851 | 507 158.938 M 852 | 502.66 158.938 L 853 | S 854 | GR 855 | GS 856 | 0.149 GC 857 | 2 setlinecap 858 | 1 LJ 859 | 0.5 LW 860 | N 861 | 507 116.125 M 862 | 502.66 116.125 L 863 | S 864 | GR 865 | GS 866 | 0.149 GC 867 | 2 setlinecap 868 | 1 LJ 869 | 0.5 LW 870 | N 871 | 507 73.313 M 872 | 502.66 73.313 L 873 | S 874 | GR 875 | GS 876 | [1 0 0 1 69 373] CT 877 | 0.149 GC 878 | /Helvetica 10 F 879 | GS 880 | [1 0 0 1 0 0] CT 881 | -6 3.5 moveto 882 | 1 -1 scale 883 | (0) t 884 | GR 885 | GR 886 | GS 887 | [1 0 0 1 69 330.1875] CT 888 | 0.149 GC 889 | /Helvetica 10 F 890 | GS 891 | [1 0 0 1 0 0] CT 892 | -14 3.5 moveto 893 | 1 -1 scale 894 | (0.5) t 895 | GR 896 | GR 897 | GS 898 | [1 0 0 1 69 287.375] CT 899 | 0.149 GC 900 | /Helvetica 10 F 901 | GS 902 | [1 0 0 1 0 0] CT 903 | -6 3.5 moveto 904 | 1 -1 scale 905 | (1) t 906 | GR 907 | GR 908 | GS 909 | [1 0 0 1 69 244.5625] CT 910 | 0.149 GC 911 | /Helvetica 10 F 912 | GS 913 | [1 0 0 1 0 0] CT 914 | -14 3.5 moveto 915 | 1 -1 scale 916 | (1.5) t 917 | GR 918 | GR 919 | GS 920 | [1 0 0 1 69 201.75] CT 921 | 0.149 GC 922 | /Helvetica 10 F 923 | GS 924 | [1 0 0 1 0 0] CT 925 | -6 3.5 moveto 926 | 1 -1 scale 927 | (2) t 928 | GR 929 | GR 930 | GS 931 | [1 0 0 1 69 158.9375] CT 932 | 0.149 GC 933 | /Helvetica 10 F 934 | GS 935 | [1 0 0 1 0 0] CT 936 | -14 3.5 moveto 937 | 1 -1 scale 938 | (2.5) t 939 | GR 940 | GR 941 | GS 942 | [1 0 0 1 69 116.125] CT 943 | 0.149 GC 944 | /Helvetica 10 F 945 | GS 946 | [1 0 0 1 0 0] CT 947 | -6 3.5 moveto 948 | 1 -1 scale 949 | (3) t 950 | GR 951 | GR 952 | GS 953 | [1 0 0 1 69 73.3125] CT 954 | 0.149 GC 955 | /Helvetica 10 F 956 | GS 957 | [1 0 0 1 0 0] CT 958 | -14 3.5 moveto 959 | 1 -1 scale 960 | (3.5) t 961 | GR 962 | GR 963 | GS 964 | [0 -1 1 0 52 202.74985] CT 965 | 0.149 GC 966 | /Helvetica 11 F 967 | GS 968 | [1 0 0 1 0 0] CT 969 | -7 -3 moveto 970 | 1 -1 scale 971 | (R2) t 972 | GR 973 | GR 974 | GS 975 | [1 0 0 1 290.00027 30.12502] CT 976 | /Helvetica-Bold 11 F 977 | GS 978 | [1 0 0 1 0 0] CT 979 | -44 -3 moveto 980 | 1 -1 scale 981 | (WSR-MMSE,0dB) t 982 | GR 983 | GR 984 | GS 985 | 0 0 1 RC 986 | 1 LJ 987 | 0.5 LW 988 | N 989 | 486.614 373 M 990 | 486.462 358.038 L 991 | 430.217 261.096 L 992 | 204.809 79.1 L 993 | 73 72.21 L 994 | S 995 | GR 996 | GS 997 | [1 0 0 1 486.61401 373] CT 998 | 0 0 1 RC 999 | N 1000 | 0 -2.75 M 1001 | 1.519 -2.75 2.75 -1.519 2.75 0 C 1002 | 2.75 0 L 1003 | 2.75 1.519 1.519 2.75 0 2.75 C 1004 | -1.519 2.75 -2.75 1.519 -2.75 0 C 1005 | -2.75 -1.519 -1.519 -2.75 0 -2.75 C 1006 | cp 1007 | 0 -3.25 M 1008 | -1.795 -3.25 -3.25 -1.795 -3.25 0 C 1009 | -3.25 1.795 -1.795 3.25 0 3.25 C 1010 | 1.795 3.25 3.25 1.795 3.25 0 C 1011 | 3.25 0 L 1012 | 3.25 -1.795 1.795 -3.25 0 -3.25 C 1013 | cp 1014 | f 1015 | GR 1016 | GS 1017 | [1 0 0 1 486.46158 358.03848] CT 1018 | 0 0 1 RC 1019 | N 1020 | /f-1077290934{0 -2.75 M 1021 | 1.519 -2.75 2.75 -1.519 2.75 0 C 1022 | 2.75 0 L 1023 | 2.75 1.519 1.519 2.75 0 2.75 C 1024 | -1.519 2.75 -2.75 1.519 -2.75 0 C 1025 | -2.75 -1.519 -1.519 -2.75 0 -2.75 C 1026 | cp 1027 | 0 -3.25 M 1028 | -1.795 -3.25 -3.25 -1.795 -3.25 0 C 1029 | -3.25 1.795 -1.795 3.25 0 3.25 C 1030 | 1.795 3.25 3.25 1.795 3.25 0 C 1031 | 3.25 0 L 1032 | 3.25 -1.795 1.795 -3.25 0 -3.25 C 1033 | cp}def 1034 | f-1077290934 1035 | f 1036 | GR 1037 | GS 1038 | [1 0 0 1 430.21707 261.09579] CT 1039 | 0 0 1 RC 1040 | N 1041 | f-1077290934 1042 | f 1043 | GR 1044 | GS 1045 | [1 0 0 1 204.80905 79.1003] CT 1046 | 0 0 1 RC 1047 | N 1048 | f-1077290934 1049 | f 1050 | GR 1051 | GS 1052 | [1 0 0 1 73 72.20987] CT 1053 | 0 0 1 RC 1054 | N 1055 | f-1077290934 1056 | f 1057 | GR 1058 | %%Trailer 1059 | %%Pages: 1 1060 | %%EOF 1061 | --------------------------------------------------------------------------------