0

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

/edit 1:在我的最后一句话中x感到困惑。y

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

4

5 回答 5

1

要聚合值,请使用accumarray

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

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

于 2013-03-13T16:47:14.510 回答
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)
于 2013-03-13T17:14:49.780 回答
0

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

阴谋:

plot(Time_x, x, Time_y, y)
于 2013-03-13T16:38:08.653 回答
0

这是一个使用一维插值的简单示例。

# 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)
于 2013-03-13T16:43:06.453 回答
0

使用线性插值!

做自己很容易也很有趣。这个想法是:由于您知道 x 的时间戳、x 的值和 y 的值(但 y 的时间戳与 x 的时间戳不匹配),因此您可以使用线性插值(或者如果您使用更高阶的插值需要)为 y 插入/“更新”值,就好像它们发生在 x 的时间戳一样。之后,您可以针对相同的 x 时间戳矢量绘制 x 和插值 y 值。

见:http ://en.wikipedia.org/wiki/Linear_interpolation

于 2013-03-13T16:45:03.210 回答