How to define time vectors using different sampling rates and plot.

I have 3 data columns (3000x1) which were sampled at 10Hz, 35Hz, and 100Hz. I want to define a time vector for each of these columns that will allow me to plot them together against time.
if true
% code
end
% SAMPLED AT 10Hz, SMALL ORIFICE
ts = 0:(1/10):(3000/10)-(1/10);
p1small = importdata('Psmall.txt');
psmall = p1small(:,2);
figure
plot(ts,psmall)
hold on
% SAMPLED AT 35Hz, MEDIUM ORIFICE
tm = 0:1/35:(3000/35)-(1/35);
p1med = importdata('Pmed.txt');
pmed = p1med(:,2);
plot(tm,pmed)
hold on
% SAMPLED AT 100Hz, LARGE ORIFICE
tl = 0:1/100:(3000/100)-(1/100);
p1large = importdata('Plarge.txt');
plarge = p1large(:,2);
plot(tl,plarge)
hold off

 Respuesta aceptada

Cam Salzberger
Cam Salzberger el 18 de Mayo de 2018
Editada: Cam Salzberger el 18 de Mayo de 2018
Hello Charles,
How about using linspace? This makes it easy to ensure you get the right number of points:
t = linspace(firstValue, finalValue, numPoints);
What really matters is to match the time vector up with when the data is collected. So if you have the data collected at 10 Hz, does it start collecting at t = 0, or t = 0.1? If you know this, you can still work out the colon notation:
nPts = numel(P);
tStart = 0; % Or 0.1
tGap = 0.1;
t = tStart:tGap:(nPts-1)*tGap+tStart;
However, you are very likely to run into floating point arithmetic issues if you do it that way, so using linspace is likely to be the better bet. Or manually specifying the end point with colon notation (which would be either 299.9 or 300 in this case). With linspace, it's probably either:
t = linspace(0, 299.9, 3000);
or
t = linspace(0.1, 300, 3000);
The reason you were seeing a vector of 30,000 points instead of 3000 is because you were using the period (0.1) as the gap, but using the number of points (3000) as the end time. Instead, it makes sense to use either all time values (0.1 and 300) or all index values if time doesn't really matter (1 and 3000).
Hope that helps!
-Cam

6 comentarios

Thanks for your answer! I'm getting this error from using linspace:
if true
% code
end
"Not enough input arguments.
Error in linspace
n=floor(double(n));
Error in document
t = linspace(0.1:300:3000);
I rephrased my question to be more precise.
Notice that when I call linspace, I do so with three input arguments. You are trying to provide a vector to linspace, which isn't what you want.
To do the other columns, I'd suggest simply generalizing the end time based on the frequency and number of points:
endTime = (nPts-1)/freq;
And thanks for clarifying the end time (being 300 or 299.9, etc.).
Charles Naegele
Charles Naegele el 18 de Mayo de 2018
Editada: Charles Naegele el 18 de Mayo de 2018
Thanks again. I just realized I used ':' instead of "," to separate within linspace. Would you mind taking a look at my updated question and letting me know if it makes sense to call the x-axis time in seconds? The difference in end time makes sense, but I'm not sure if it's seconds or not.
From what I understand, seconds is correct. Hertz is literally just the unit of 1/seconds. You're using the inverse of that to form the time vector, and not adjusting the scaling, so that would make the units seconds.
Awesome! Thank you for your help.

Iniciar sesión para comentar.

Más respuestas (1)

Jim Riggs
Jim Riggs el 18 de Mayo de 2018
Editada: Jim Riggs el 18 de Mayo de 2018
You have the right idea. The convention is
startValue:stepSize:EndValue
t=0:0.1:300
will give 3001 samples at 0.1 step size. To get exactly 3000 samples, just take one step off the end:
t=0:0.1:300-0.1

1 comentario

This method worked but I'm afraid it's not fully addressing my concerns. Let me rephrase the question.

Iniciar sesión para comentar.

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 18 de Mayo de 2018

Editada:

el 18 de Mayo de 2018

Community Treasure Hunt

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

Start Hunting!

Translated by