-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathMO_AltMin_W.m
30 lines (23 loc) · 846 Bytes
/
MO_AltMin_W.m
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
function [Wfull, WRF, WBB ] = MO_AltMin_W( Wopt,Fopt,H, NRF, noisevar, epsilon )
% addpath('./manopt');
% D:\myResearch_101\MIMODeepUnfolding\TWC\AltMin\Narrowband\MO-AltMin\manopt
[Nr, Ns] = size(Wopt);
y = [];
WRF = exp( 1i*unifrnd(0,2*pi,Nr,NRF) );
% FRF = PerEntryQuantizationNoZeros(Fopt,Nt);
while(isempty(y) || abs(y(1)-y(2))>epsilon)
Wmmse = ((Fopt'*(H'*H)*Fopt+noisevar*Ns*eye(Ns))\Fopt'*H')';
Ess = 1/Ns*eye(Ns);
Eyy = H*Fopt*Ess*Fopt'*H' + noisevar*eye(Nr);
WBB = (WRF'*Eyy*WRF)\(WRF'*Eyy*Wmmse);
% WRF = conj(WRF);
% WBB = conj(WBB);
% WBB = pinv(WRF) * Wopt;
% FBB = sqrt(Ns)*FBB/norm(FRF*FBB,'fro');
y(1) = norm(Wopt - WRF * WBB,'fro')^2;
[WRF, y(2)] = sig_manif(Wopt, WRF, WBB);
% WRF = conj(WRF);
end
Wfull = WRF*WBB;
Wfull = Wfull./sqrt(sum(diag(Wfull'*Wfull))/NRF);
end