Files
Dirigent/matlab/distCorr.m

41 lines
1.1 KiB
Matlab

% Autocorrelation for Points based on the distance between those points
% data is the sensor data. one point per row.
% lag_size is the number of required lags
function [corr, lag] = distCorr(data, lag_size)
n = length(data);
%if lag size is bigger as data, then use data length - 1
% -1 because the max. lag is -1 of the data length..
if(lag_size >= n)
lag_size = n - 1; %
end
%init
corr = zeros(lag_size + 1, 1); % +1, because the first index is lag 0.
lag = (-lag_size:1:lag_size)';
%mean shift and l2 normalization
%data = data - mean(data);
%data = data / norm(data);
for j = 1:lag_size + 1 % +1, because the first index is lag 0.
dist = zeros(n - abs(j), 1);
idx = 1;
for i = j:n
%x_i * x_i-(j-1)
dist(idx) = norm(data(i, :) - data(i-(j-1), :));
idx = idx + 1;
end
corr(j) = geomean(dist);
end
%mirror corr(2:512) and put it infront
corr = [flipud(corr(2:end)); corr];
%to [0, 1]
corr = ((corr .* -1) / max(corr)) + 1;
end