我正在尝试在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问题的正确论坛,所以任何指针也都有用。
答案 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)