I am doing a simulation of the paper ''Multiuser MISO Beamforming for Simultaneous Wireless Information and Power Transfer". However, I can’t get the similar result of that figure in the paper anyway. I really don’t know where is the problem of my code. I will really appreciate if someone can help me!

**The problem is as below**

To maximize the Energy Harvesting power under the SINR and transmition power constraint.

**The SDR probleam is as piture below**

Wi and WE are the beamforming matrixs of the specific user

h and g are the channel vectors (the coefficients of G are not important)

**Main function is as below**

K_ID = 4; % ID接收器个数

K_EH = 2; % EH接收器个数

SINR_dB = -5:2:25;

M = 4; % AP的天线数

N = 100; % 迭代次数 (可以理解为时间变量 每一个时刻的信道h g不同 服从瑞利分布)

P_noise = 10.^(-50/10)/1000; % 噪声功率

P_limit = 1; % 总发射功率

effi_EH = 0.5; % EH效率

alpha_EH = 1 / K_EH; % EH权重

attenuation_h_ID = 10.^(-70/10); % ID信道衰落

attenuation_g_EH = 10.^(-30/10); % EH信道衰落

% h = sqrt(attenuation_h_ID/2).*(randn(K_ID,M)+1i*randn(K_ID,M));

% g = sqrt(attenuation_g_EH/2).*(randn(K_EH,M)+1i*randn(K_EH,M));

h = randn(K_ID,M,N)+1i*randn(K_ID,M,N);
g = randn(K_EH,M,N)+1i*randn(K_EH,M,N);

res_SDR1 = zeros(N,4,length(SINR_dB));

res_SDR1_average = zeros(length(SINR_dB),4);

for i = 1:length(SINR_dB)

for n = 1:N

fprintf(’%d / %d:\n’,n,N);

res_SDR1(n,:,i) = SDR1_Type1_cannotCancelling(M,SINR_dB(i),K_ID,K_EH,h(:,:,n),attenuation_h_ID,g(:,:,n),attenuation_g_EH,P_noise,P_limit,effi_EH,alpha_EH);

end

end

for j = 1:length(SINR_dB)

temp1 = res_SDR1(:,:,j);

res_SDR1_average(j,: ) = mean(temp1(temp1(:,1)~=inf & temp1(:,1)~=-inf & ~isnan(temp1(:,1)),:));

end

**SDR solve function is as below (only show the case of K_ID = 4)**

function [optvalue] = SDR1_Type1_cannotCancelling(M,SINR_dB,K_ID,K_EH,h,attenuation_h_ID,g,attenuation_g_EH,P_noise,P_limit,effi_EH,alpha_EH)

G = zeros(M,M);

for j = 1:K_EH

G = G+effi_EH*alpha_EH*g(j,:)’*g(j,:);

end

SINR = 10.^(SINR_dB/10);

fprintf("----------Solving SDR1: SINR=%ddB, K_ID=%d, K_EH=%d----------: ",SINR_dB,K_ID,K_EH);

if K_ID == 4

cvx_begin sdp quiet

variable W1(M,M) hermitian semidefinite

variable W2(M,M) hermitian semidefinite

variable W3(M,M) hermitian semidefinite

variable W4(M,M) hermitian semidefinite

variable WE(M,M) hermitian semidefinite

```
maximize(real(trace(G*W1)+trace(G*W2)+trace(G*W3)+trace(G*W4)+trace(G*WE)))
subject to
real(trace(h(1,:)'*h(1,:)*W1))/SINR-real(trace(h(1,:)'*h(1,:)*W2))-real(trace(h(1,:)'*h(1,:)*W3))...
-real(trace(h(1,:)'*h(1,:)*W4))-real(trace(h(1,:)'*h(1,:)*WE))-P_noise/attenuation_h_ID/2 >= 0
real(trace(h(2,:)'*h(2,:)*W2))/SINR-real(trace(h(2,:)'*h(2,:)*W1))-real(trace(h(2,:)'*h(2,:)*W3))...
-real(trace(h(2,:)'*h(2,:)*W4))-real(trace(h(2,:)'*h(2,:)*WE))-P_noise/attenuation_h_ID/2 >= 0
real(trace(h(3,:)'*h(3,:)*W3))/SINR-real(trace(h(3,:)'*h(3,:)*W1))-real(trace(h(3,:)'*h(3,:)*W2))...
-real(trace(h(3,:)'*h(3,:)*W4))-real(trace(h(3,:)'*h(3,:)*WE))-P_noise/attenuation_h_ID/2 >= 0
real(trace(h(4,:)'*h(4,:)*W4))/SINR-real(trace(h(4,:)'*h(4,:)*W1))-real(trace(h(4,:)'*h(4,:)*W2))...
-real(trace(h(4,:)'*h(4,:)*W3))-real(trace(h(4,:)'*h(4,:)*WE))-P_noise/attenuation_h_ID/2 >= 0
real(trace(W1)+trace(W2)+trace(W3)+trace(W4)+trace(WE)) <= P_limit
W1 == hermitian_semidefinite(M)
W2 == hermitian_semidefinite(M)
W3 == hermitian_semidefinite(M)
W4 == hermitian_semidefinite(M)
WE == hermitian_semidefinite(M)
cvx_end
fprintf('%s %f\n',cvx_status,cvx_optval*attenuation_g_EH/2);
optvalue = [cvx_optval*attenuation_g_EH/2,K_ID,K_EH,SINR_dB];
```

end

end

**My problem**

I promise I have seem many other similar topic of this forum. To let the scale of the variables to be 1-order, I doesn’t set the attenuation coefficients of channel vector at first, while Divide P_noise by attenuation_h_ID/2 and multiply the cvx_optval by attenuation_g_EH/2 as you can see. However, although CVX can solve the problem, namely the cvx_status is solved, the results are completely different from the results in the paper. Can someone help me to see what is wrong in my code or are there some necessary informations I miss?