function 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');