rendered paste bodyfunction relative_error = get_relative_error(A,AE)
AE2 = zeros(size(A));
nsources = size(AE,2);
nsensors = size(AE,1);
for idx1 = 1 : nsources
a = A(:,idx1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% find the column of AE with largest correlation
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
idx_max_correlation = 0;
max_correlation = 0;
for idx2 = 1 : size(AE,2)
ae = AE(:,idx2);
correlation = abs((a' * ae) / sqrt(ae' * ae));
if correlation > max_correlation
idx_max_correlation = idx2;
max_correlation = correlation;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% scale the column with largest correlation and store in AE2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ae = AE(:,idx_max_correlation);
c = (ae' * a) / (ae' * ae);
AE2(:,idx1) = ae .* c;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% reduce AE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
temp = AE;
clear AE;
AE = temp(:, [1 : idx_max_correlation - 1 idx_max_correlation + 1 : end]);
end
relative_error = norm(A - AE2,'fro') / norm(A,'fro');