-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfunc_opt_3RISs_pc.m
More file actions
39 lines (29 loc) · 977 Bytes
/
Copy pathfunc_opt_3RISs_pc.m
File metadata and controls
39 lines (29 loc) · 977 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function PR = func_opt_3RISs_pc(HT,HR,H21,H32,typeRIS,NG)
% Optimize RIS with physics-compliant model and evaluate on physics-compliant model
N = size(HT,1);
T2 = -eye(N);
T3 = -eye(N);
PR_loop = zeros(1,1e3);
for iIter = 1:1e3
% Optimize T1
HR1 = HR*(T3-eye(N))*H32*(T2-eye(N))*H21;
HT1 = HT;
[~, T1] = func_opt_RIS_MIMO(-HR1*HT1,HR1,HT1,typeRIS,NG);
% Optimize T2
HR2 = HR*(T3-eye(N))*H32;
HT2 = H21*(T1-eye(N))*HT;
[~, T2] = func_opt_RIS_MIMO(-HR2*HT2,HR2,HT2,typeRIS,NG);
% Optimize T3
HR3 = HR;
HT3 = H32*(T2-eye(N))*H21*(T1-eye(N))*HT;
[~, T3] = func_opt_RIS_MIMO(-HR3*HT3,HR3,HT3,typeRIS,NG);
% Compute PR at this iteration
PR_loop(iIter+1) = norm(HR*(T3-eye(N))*H32*(T2-eye(N))*H21*(T1-eye(N))*HT) ^ 2;
% Stopping condition
if (PR_loop(iIter+1) - PR_loop(iIter))/PR_loop(iIter) < 1e-3
%iIter
break;
end
end
PR = PR_loop(iIter+1);
end