MATLAB:使用不同的采样间隔对测量进行汇总和比较

时间:2013-03-13 16:25:16

标签: matlab aggregation

我在等距的长间隔(每10分钟)测量变量x,在非等距的短间隔(每30秒到90秒之间)测量变量ydatenumx的时间戳(y)可用,但它们永远不会相等,因此intersect不起作用。如何在y区间聚合mean(y(...))(例如x(i+1) - x(i)),以便我可以比较两者(例如将它们相互绘制或用相同的时间向量绘制它们)?

/编辑1:在我的最后一句话中混淆了xy

/编辑2:我觉得我没有在原始问题中给你足够的信息,对不起。 很多人建议插值。 x是10分钟内的平均风速,而不是一个明显的测量值。因此,如果我说时间= 07:10和x = 3 m / s,则表示从07:00到07:10期间的mean(x) = 3 m / s。这就是为什么我认为插入它可能不是最好的主意。 y是众多(非常嘈杂)其他变量中的一个,我想找出(均值)xy的影响。因此,我要将y的多个值分配给x的一个度量值(在10分钟内),或者将mean(y)分配给x的一个度量值。我认为解决方案非常相似,代码明智。

5 个答案:

答案 0 :(得分:1)

要汇总值,请使用accumarray

accumarray(fix(ty(:) / T) + 1, y, [], @mean)

此处y是采样信号,ty是时间戳数组,T是聚合值的时间间隔(例如,T = 10 / (24 * 60) = 0.0069表示10-分钟间隔)。

答案 1 :(得分:1)

阅读编辑过的(2x)问题:

您正试图在某些时候估计x的值,而您没有测量值。您之前和之后都有测量。您可以做的唯一事情是插值。你选择什么方法有点难以决定。

您的选择是:

/ edit:如果您只想在两次y次测量之间获得x的平均值,我建议如下:

new_y = zeros(size(x));
new_y(1) = mean(y(ty<=tx(1)));
for ii=2:length(x):
        new_y(ii) = mean(y(and(ty>tx(ii-1),ty<=tx(ii))));
end

也许更好的解决方案是使用hist

n = hist(ty,tx)

向量n包含ty中与tx中的值最接近的值的数量。由于两者都是单调的,n会告诉您如何对y中的值进行分组。然后,您可以使用mat2celly放入单元格数组中,其中每个单元格对应一个x的度量值。第二个参数n现在指定每个单元格中放置的值。

new_y = mat2cell(y,n)

答案 2 :(得分:0)

您可以将数据从x插值到非等距时间戳(反之亦然)(参见interp1函数)并比较结果。

简介:

plot(Time_x, x, Time_y, y)

答案 3 :(得分:0)

这是使用1-d插值的简单示例。

# make two example functions on different x bases.
x1 = [0:.023:10];
x2 = [0:1:10];
y1 = x1.^2/10;
y2 = 10 - x2.^1.3;

# convert both to a common x base (x1 in this case).
y2i = interp1(x2,y2,x1);
plot(x1,y1,x1,y2i)

答案 4 :(得分:0)

使用线性插值!

简单易行做自己很有趣。这个想法是:既然你知道x的时间戳,x的值和y的值,(但y的时间戳与x的时间戳不匹配),你可以使用线性插值(如果你的话,可以使用更高阶的插值)需要)为y插入/“更新”值,就像它们在x的时间戳出现一样。之后,您可以针对相同的x时间戳向量绘制x和插值y值。

请参阅:http://en.wikipedia.org/wiki/Linear_interpolation