41 lines
1.1 KiB
Matlab
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 |