How to resample (or interpolate) trajectory from x original values to 100 values?
19 次查看(过去 30 天)
显示 更早的评论
I have recorded multiple trajectories of varying timepoints and length. I wanted to see how correlated the trajectory patterns are to each other. To do so, I wanted to resample them to 100 points and make all the trajectories of equal timepoints so that we compare the pattern itself without the dependency of time.
To do so I used the following code:
resample_rate = 100;
xypos_resampled = zeros(resample_rate, trialno*2); % make space for multiple trajectories
trialtotest = 1; % say we are interested in trial (trajectory) 1
% Given 1 trajectory data
xypos = [0.0490, 0.0660;
0.2100, 0.2070;
0.4500, 0.4700;
0.6300, 0.8560;
0.6630, 1.3350;
0.5440, 1.8850;
0.3350, 2.4840;
0.2110, 3.0910;
0.2150, 3.6720;
0.3260, 4.2250;
0.5120, 4.7020;
0.7960, 4.9150;
1.1640, 4.8790;
1.5980, 4.7660;
2.0980, 4.6230;
2.6560, 4.4960;
3.2650, 4.4080;
3.9080, 4.3560;
4.5510, 4.3390];
xypos = cell2mat(tWin_unconcatenated_whole (1, trialtotest)) ;
xypos_resampled (:,trialtotest*2-1:trialtotest*2) = resample(xypos,resample_rate, length(xypos));
I got the following:
The top is the original trajectory and the bottom is the resampled one.
How to get rid of the unnecessary points or how to resample more effectively?
P.S. I tried gridded interpolant (but it needs to sort the data which I dont want to do).
Any insight would be appreciated.
0 个评论
采纳的回答
Star Strider
2023-8-8
resample_rate = 100;
% xypos_resampled = zeros(resample_rate, trialno*2); % make space for multiple trajectories
trialtotest = 1; % say we are interested in trial (trajectory) 1
% Given 1 trajectory data
xypos = [0.0490, 0.0660;
0.2100, 0.2070;
0.4500, 0.4700;
0.6300, 0.8560;
0.6630, 1.3350;
0.5440, 1.8850;
0.3350, 2.4840;
0.2110, 3.0910;
0.2150, 3.6720;
0.3260, 4.2250;
0.5120, 4.7020;
0.7960, 4.9150;
1.1640, 4.8790;
1.5980, 4.7660;
2.0980, 4.6230;
2.6560, 4.4960;
3.2650, 4.4080;
3.9080, 4.3560;
4.5510, 4.3390];
% xypos = cell2mat(tWin_unconcatenated_whole (1, trialtotest)) ;
% xypos_resampled (:,trialtotest*2-1:trialtotest*2) = resample(xypos,resample_rate, length(xypos));
t = (0:size(xypos,1)-1).';
% % [xypos_resampled1,tr1] = resample(xypos, t, 100);
tr2 = linspace(min(t), max(t), 100).';
xypos_resampled2 = interp1(t, xypos, tr2);
figure
plot(xypos(:,1), xypos(:,2), '.-')
% % figure
% % plot(xypos_resampled1(:,1), xypos_resampled1(:,2), '.-')
figure
plot(xypos_resampled2(:,1), xypos_resampled2(:,2), '.-')
tr2 = linspace(min(t), max(t), resample_rate*size(xypos,1)).';
depending on how you want to define it. Both should work.
.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Multirate Signal Processing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!