Имам две променливи в .mat файл тук: https://www.yousendit.com/download/UW13UGhVQXA4NVVQWWNUQw
testz е вектор на кумулативното разстояние (в метри, монотонно и редовно нарастващо)
testSDT е вектор на интегрирано (кумулативно) време за пътуване на звукова вълна (в милисекунди), генерирано с помощта на вектора на разстоянието и вектора на скоростите (има междинна стъпка за създаване на интервални времена за пътуване)
Тъй като скоростта е непрекъснато променлива функция, получените интервални времена на пътуване, а също и интегрираните времена на пътуване не са цели числа и са променливи по големина
Това, което искам, е да семплира отново вектора на разстоянието на редовни интервали от време (напр. 1 ms, 2 ms, ..., n ms)
Това, което го прави трудно е, че максималното време за пътуване, 994.6659, е по-малко от броя на пробите в 2-та вектора, следователно не е лесно да се използва interp1. т.е.:
X=testSDT -> 1680 проби
Y=testz -> 1680 проби
XI=[1:1:994] -> 994 проби
Това е кодът, който измислих. Това е работещ код и според мен не е много лош.
%% Initial chores
M=fix(max(testSDT));
L=(1:1:M);
%% Create indices
% this loops finds the samples in the integrated travel time vector
% that are closest to integer milliseconds and their sample number
for i=1:M
[cl(i) ind(i)] = min(abs(testSDT-L(i)));
nearest(i) = testSDT(ind(i));
end
%% Remove duplicates
% this is necessary to remove duplicates in the index vector (happens in this test).
% For example: 2.5 ms would be the closest to both 2 ms and 2 ms
[clsst,ia,ic] = unique(nearest);
idx=(ind(ia));
%% Interpolation
% this uses the index vectors to resample the depth vectors at
% integer times
newz=interp1(clsst,testz(idx),[1:1:length(idx)],'cubic')';
Доколкото виждам, има един проблем с този код: разчитам на вектора idx като мой XI за интерполация. Вектор idx е 1 проба по-къс от вектор ind (един дубликат беше премахнат).
Следователно новите ми времена ще спрат с една милисекунда. Това е много малък проблем и дубликат е малко вероятно, но се чудя дали някой може да се сети за заобиколно решение или за различен начин да се подходи към проблема като цяло.
Благодаря ти