You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在MATLAB中对齐两类传感器时间序列并实现逐小时平均的方法

实现步骤(MATLAB环境)

以下是完整可直接运行的实现逻辑,默认你已提前加载了传感器A的时间向量timeA、测量值向量dataA,传感器B的时间向量timeB、测量值向量dataB。


1. 原始数据转timetable格式

MATLAB的timetable是处理时间序列的专用数据结构,后续的区间裁剪、时间对齐、聚合计算都可以直接调用内置函数完成:

% 若你的时间向量原本是字符/字符串格式,先转datetime格式,已为datetime可跳过这一步
timeA = datetime(timeA, 'InputFormat', 'yyyy-MM-dd HH:mm:ss');
timeB = datetime(timeB, 'InputFormat', 'yyyy-MM-dd HH:mm:ss');

% 生成对应timetable
ttA = timetable(timeA, dataA);
ttB = timetable(timeB, dataB);

2. 提取传感器B的有效连续记录区间

因为B是间隔启动的,先通过相邻采样点的时间差划分连续记录段:

% 计算B相邻两个记录的时间间隔
timeDiffB = diff(ttB.timeB);
% 设定段间隔阈值:相邻记录差超过2小时就判定为两段不同的有效记录,可按需调整阈值
threshold = hours(2);
% 标记所有段的边界位置
segIdx = [1; find(timeDiffB > threshold)+1; height(ttB)+1];
% 生成所有有效区间的起止时间
validIntervals = table();
for i = 1:length(segIdx)-1
    validIntervals.start(i) = ttB.timeB(segIdx(i));
    validIntervals.end(i) = ttB.timeB(segIdx(i+1)-1);
end

如果已经提前知道B的所有启动/停止时间,也可以跳过上面的计算,直接给validIntervals的start和end列赋值即可。

3. 按B的有效区间裁剪A的记录

只保留A中落在B有效记录区间内的采样点:

% 初始化裁剪掩码
maskA = false(height(ttA), 1);
for i = 1:height(validIntervals)
    maskA = maskA | (ttA.timeA >= validIntervals.start(i) & ttA.timeA <= validIntervals.end(i));
end
% 得到A的有效数据
ttA_valid = ttA(maskA, :);

4. 逐小时聚合计算平均值

调用内置retime函数直接完成按小时的均值聚合:

% 时间戳统一取对应小时的起始时刻,无有效数据的小时返回NaN
ttA_hourly = retime(ttA_valid, 'hourly', 'mean');
ttB_hourly = retime(ttB, 'hourly', 'mean');

5. 对齐两个传感器的小时平均结果

% 仅保留两个传感器都有有效数据的小时,如要保留所有B有数据的小时,第三个参数改成'left'即可
tt_aligned = synchronize(ttA_hourly, ttB_hourly, 'inner');

最终输出的tt_aligned就是对齐后的逐小时平均结果,包含时间、A的小时均值、B的小时均值三列。


内容的提问来源于stack exchange,提问作者user17206266

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:15:05