我在等距的长间隔(每10分钟)测量变量x
,在非等距的短间隔(每30秒到90秒之间)测量变量y
。 datenum
和x
的时间戳(y
)可用,但它们永远不会相等,因此intersect
不起作用。如何在y
区间聚合mean(y(...))
(例如x(i+1) - x(i))
,以便我可以比较两者(例如将它们相互绘制或用相同的时间向量绘制它们)?
/编辑1:在我的最后一句话中混淆了x
和y
。
/编辑2:我觉得我没有在原始问题中给你足够的信息,对不起。
很多人建议插值。 x
是10分钟内的平均风速,而不是一个明显的测量值。因此,如果我说时间= 07:10和x = 3
m / s,则表示从07:00到07:10期间的mean(x) = 3
m / s。这就是为什么我认为插入它可能不是最好的主意。 y
是众多(非常嘈杂)其他变量中的一个,我想找出(均值)x
对y
的影响。因此,我要将y
的多个值分配给x
的一个度量值(在10分钟内),或者将mean(y)
分配给x
的一个度量值。我认为解决方案非常相似,代码明智。
答案 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
中的值进行分组。然后,您可以使用mat2cell
将y
放入单元格数组中,其中每个单元格对应一个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值。