Interpolate/Resample to a specific decimal point
12 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Anmol Jarang
le 21 Sep 2021
Commenté : Anmol Jarang
le 21 Sep 2021
I've got a cell array with different values in each array, sampled at different points. These points are random. I'm currently trying to figure out a way to resample+interpolate them in such a way that I can average over each cell row in the cell array. for example,
x{2}=[1 3 4 7 6 3 6]
should become
x{2}=[1 2 3 4 5 6 7 6 5 4 3 4 5 6]
I've looked into functions like interp1 and resample, but these assume that you have a vector of points you want to get or the target number of samples. I know neither. The ideal function would be something that takes in the intial vector(x{2}) and the desired sampling interval (1). How can I go about solving this problem?
2 commentaires
Matt J
le 21 Sep 2021
Modifié(e) : Matt J
le 21 Sep 2021
Suppose your sampling interval was 1, but your initial vector was
x=[1 3.17 4 7.8 6 3 6]
What result would you expect?
Or, what if your input vector was still
x=[1 3 4 7 6 3 6]
but your sampling interval was 1.6? What result would you expect then?
Réponse acceptée
Stephen23
le 21 Sep 2021
Assuming no adjacent duplicate values:
S = 1;
V = [1,3,4,7,6,3,6];
X = cumsum([1,abs(diff(V))]);
Z = interp1(X,V,1:S:X(end))
0 commentaires
Plus de réponses (1)
Mathieu NOE
le 21 Sep 2021
hello
try this :
x=[1 3 4 7 6 3 6];
out = my_resample(x)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function out = my_resample(x)
out = [];
for ci = 2:length(x)
delta = sign(x(ci) - x(ci-1));
tmp = x(ci-1):delta:x(ci);
out = [out tmp(1:end-1)];
end
out = [out x(end)]; % include last value
end
it gives :
out = 1 2 3 4 5 6 7 6 5 4 3 4 5 6
0 commentaires
Voir également
Catégories
En savoir plus sur Multirate Signal Processing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!