ここの.matファイルには2つの変数があります: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')';
私が見る限り、このコードには1つの問題があります。それは、補間のXIとしてベクトルidxに依存していることです。ベクトルidxはベクトルindより1サンプル短い(1つの重複が削除された)。
したがって、私の新しい時間は1ミリ秒短く停止します。これは非常に小さな問題であり、重複する可能性は低いですが、誰かが回避策を考えたり、問題に完全にアプローチする別の方法を考えたりできるかどうか疑問に思っています。
ありがとうございました