[Scilab-users] How to get a reguar sampled vector in Scilab

Serge Steer serge.steer at inria.fr
Tue Feb 18 22:26:03 CET 2014


I think there is a little mistake in the sampledValues you are expecting:
 times = [0, 2, 6, 8, 14]
 values= [5, 9, 10, 1, 6]
sampledTime =   [0, 2, 4, 6,  8, 10, 12, 14]
sampledValues = [5, 9, 9, 10, 1,  1,  1, 6] 
According to the rule used for the previous values, the last value of sampledValues must be 1 and not 6

Here is a code doing what you expect (but with a different last point)
times = [0, 2, 6, 8, 14];
values= [5, 9, 10, 1, 6];

sampletimes=0:14;
V=zeros(sampletimes);
for k=1:size(times,'*')-1
  V(sampletimes>=times(k)&sampletimes<times(k+1))=values(k);
end
V(sampletimes>times($))=timesvalues($);
clf;plot(sampletimes,V,'-+')

//You can also use linear interpolation
V1=interpln([times;values],sampletimes);
plot(sampletimes,V1,'r-+')
//or Splin interpolation
V2=interp(sampletimes,times,values,splin(times,values))
plot(sampletimes,V2,'m-*')

Serge Steer
----- Mail original -----
> De: "Matiasb" <matiasb at gmail.com>
> À: users at lists.scilab.org
> Envoyé: Mardi 18 Février 2014 20:59:10
> Objet: [Scilab-users] How to get a reguar sampled vector in Scilab
> 
> I'm trying to program function (or even better it it already exists) in
> scilab that calculates a regular timed samples of values. IE: I have a
> vector 'values' which defines contains the value of a signal at different
> times. This times are in the vector 'times'. So at time times(N), the signal
> has value values(N). At the moment the times are not regular, so the
> variable 'times' and 'values' can look like:
> 
> times = [0, 2, 6, 8, 14]
> values= [5, 9, 10, 1, 6]
> This represents that the signal had value 5 from second 0 to second 2. Value
> 9 from second 2 to second 6, etc. Therefore, if I want to calculate the
> signal average value I can not just calculate the average of vector
> 'values'. This is because for example the signal can be for a long time with
> the same value, but there will be only one value in the vector. One option
> is to take the deltaT to calculate the media, but I will also need to
> perform other calculations:average, etc.
> 
> Other option is to create a function that given a deltaT, samples the time
> and values vectors to produce an equally spaced timeVector and corresponding
> values. For example, with deltaT=2 and the previous vectors,
> 
> [sampledTime, sampledValues] = regularSample(times, values, 2)
> sampledTime = [0, 2, 4, 6, 8, 10, 12, 14]
> sampledValues = [5, 9, 9, 10, 1, 1, 1, 6]
> 
> This is easy if deltaT is small enough to fit exactly with all the times. If
> the deltaT is bigger, then the average of values or some aproximation must
> be done...
> 
> Is there anything already done in Scilab? How can this function be
> programmed?
> 
> Thanks a lot! PS: I don't know if this is the correct forum to post scilab
> questions, so any pointer would also be useful.
> 
> 
> 
> --
> View this message in context:
> http://mailinglists.scilab.org/How-to-get-a-reguar-sampled-vector-in-Scilab-tp4028712.html
> Sent from the Scilab users - Mailing Lists Archives mailing list archive at
> Nabble.com.
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
> 



More information about the users mailing list