How to resample (or interpolate) trajectory from x original values to 100 values?

9 vues (au cours des 30 derniers jours)
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.

Réponse acceptée

Star Strider
Star Strider le 8 Août 2023
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), '.-')
The resample call did not produce an acceptable result, so I commented it out.
The interp1 call appears to be more appropriate. For that, ‘tr2’ can either be as stated or:
tr2 = linspace(min(t), max(t), resample_rate*size(xypos,1)).';
depending on how you want to define it. Both should work.
.
  2 commentaires
Poulomi
Poulomi le 14 Août 2023
Thnk you so much! This is exactly what I needed!

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by