我在这里的 .mat 文件中有两个变量:https: //www.yousendit.com/download/UW13UGhVQXA4NVVQWWNUQw
testz 是累积距离的向量(以米为单位,单调且有规律地增加)
testSDT 是使用距离向量和速度向量生成的积分(累积)声波传播时间(以毫秒为单位)的向量(有一个创建间隔传播时间的中间步骤)
由于速度是一个连续可变的函数,因此得到的间隔行程时间以及积分行程时间都是非整数且大小可变
我想要的是以固定的时间间隔(例如 1 ms、2 ms、...、n ms)重新采样距离向量
困难在于最大行程时间 994.6659 小于 2 个向量中的样本数,因此使用 interp1 并不简单。IE:
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 比向量 ind 短 1 个样本(删除了一个副本)。
因此,我的新时间将停止一毫秒。这是一个非常小的问题,不太可能出现重复,但我想知道是否有人可以想到解决方法,或者完全解决问题的不同方法。
谢谢