Home > Net >  How do I modify my x data to be a specific length without slicing in MATLAB?
How do I modify my x data to be a specific length without slicing in MATLAB?

Time:08-21

I have some x data and y data which I want to plot. My x data looks like this: [326,406,406,449,491,491,1353,1353,2379,2379, ...]

the corrosponding y data looks like this:

[3.46,3.48,3.48,3.48,3.49,3.49,3.49,3.49,3.49,3.49, ...]

Imagine I want to modify my x data in such a way that it is of fixed length. But simply slicing like this for exmaple: x = x(1:100) would not be good, because then I would also loose the data after the 100th x data point. I need it to be this way: Having x data as an array of fixed length but also modifying y data in such a way that I don't see a difference when I plot y vs x (except for the fact that x now has a different length and different values, e.g. from 1:100). I hope you understand what I'm trying to do. I was playing around with interp1 but sadly I did not achieve anything useful.

Thanks in advance!

EDIT For better illustration: Imagine my y vs. x data looks like this: enter image description here

My goal is to simple modify my x and y data in such a way that the x data would range from 1:100 for example, but the curve would still be looking the same.

So basically: Sampling the data

CodePudding user response:

You can use the downsample function as follows:

x = [326,406,406,449,491,491,1353,1353,2379,2379, ...];
y = [3.46,3.48,3.48,3.48,3.49,3.49,3.49,3.49,3.49,3.49, ...];

n = 100; % number of samples

down_x = downsample(x,n);
down_y = downsample(y,n);

CodePudding user response:

I was able to solve my problem like this:

x_new = linspace(min(x_data), max(x_data), number_of_x_points);
y_new = interp1(x_data, y_data, x_new, 'linear');
  • Related