All pastes #910932 Raw Edit

Something

public text v1 · immutable
·published 2008-02-20 10:00 UTC
rendered paste body
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');