如何在Scilab中获得常规采样矩阵

时间:2014-02-18 19:42:37

标签: matlab vector matrix sampling scilab

我正在尝试在scilab中编写一个函数(或者甚至更好它已经存在)来计算一个常规的定时值样本。 IE:我有一个矢量'values',它包含不同时间信号的值。这个时间在向量'时间'。因此,在时间(N),信号具有值(N)。 目前时间不规律,因此变量'times'和'values'可能如下所示:

times = [0, 2, 6, 8, 14] 
values= [5, 9, 10, 1, 6]

这表示信号的值从第二个0到第二个值为2.从第二个到第二个的值9等等。 因此,如果我想计算信号平均值,我不能只计算矢量'值'的平均值。这是因为例如信号可以长时间具有相同的值,但是矢量中只有一个值。 一种选择是使用deltaT来计算媒体,但我还需要执行其他计算:平均等等。

其他选项是创建一个给定deltaT的函数,对时间和值向量进行采样,以生成等间隔时间向量和相应的值。例如,deltaT = 2和前面的向量,

[sampledTime, sampledValues] = regularSample(times, values, 2)
sampledTime = [0, 2, 4, 6, 8, 10, 12, 14]
sampledValues = [5, 9, 9, 10, 1, 1, 1, 6]

如果deltaT小到足以完全适合所有时间,这很容易。如果deltaT更大,则必须进行值的平均值或某种近似值...

Scilab有没有做过什么? 如何编程这个功能?

非常感谢! PS:我不知道这是否是发布scilab问题的正确论坛,所以任何指针也都有用。

1 个答案:

答案 0 :(得分:1)

如果您想自己实施,可以使用加权总和。

times = [0, 2, 6, 8, 14]
values = [5, 9, 10, 1, 6]

weightedSum = 0
highestIndex = length(times)

for i=1:(highestIndex-1)
    // Get the amount of time a certain value contributed
    deltaTime = times(i+1) - times(i);

    // Add the weighted amount to the total weighted sum  
    weightedSum = weightedSum + deltaTime * values(i);
end

totalTimeDelta = times($) - times(1);

average = weightedSum / totalTimeDelta

printf( "Result is %f", average )

或者如果你想在功能上使用相同但不太可读的代码

timeDeltas = diff(times)
sum(timeDeltas.*values(1:$-1))/sum(timeDeltas)