git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5910 818b1a75-f10b-46b9-bf7c-635c3b92a50f
54 lines
1.3 KiB
Matlab
54 lines
1.3 KiB
Matlab
%
|
|
% PURPOSE : TLS solution for AX = B based on alternative projection
|
|
%
|
|
% ARGUMENTS :
|
|
%
|
|
% A : observation of A
|
|
% B : observation of B
|
|
%
|
|
% OUTPUTS :
|
|
%
|
|
% X : TLS solution for X
|
|
%
|
|
%**********************************************************************************************
|
|
% EURECOM - All rights reserved
|
|
%
|
|
% AUTHOR : Xiwen JIANG, Florian Kaltenberger
|
|
%
|
|
% DEVELOPMENT HISTORY :
|
|
%
|
|
% Date Name(s) Version Description
|
|
% ----------- ------------- ------- ------------------------------------------------------
|
|
% Mai-05-2014 X. JIANG 0.1 creation of code
|
|
%
|
|
% REFERENCES/NOTES/COMMENTS :
|
|
%
|
|
% - none.
|
|
%
|
|
%**********************************************************************************************
|
|
|
|
function [X_est A_est B_est] = f_tls_ap(A,B)
|
|
|
|
%** initlisation **
|
|
e_new = 0;
|
|
e_old = 1e14;
|
|
e_thr = 1e-5; %error threshold: what if the error cannot fall down under the error threshold
|
|
X_est = eye(size(A,2));
|
|
A_est = A;
|
|
|
|
%** alternative projection **
|
|
while(abs(e_new-e_old)>e_thr)
|
|
e_old = e_new;
|
|
|
|
% optimise X_est
|
|
X_est = (A_est'*A_est)\A_est'*B;
|
|
|
|
%optimise A_est
|
|
A_est = B*X_est'/(X_est*X_est');
|
|
|
|
e_new = norm(A_est*X_est-B)^2+norm(A_est-A)^2;
|
|
end
|
|
B_est = A_est*X_est;
|
|
|
|
end
|