matlab - 给定间隔的平均值

时间:2013-06-17 15:50:44

标签: matlab time resolution

我可以像这样计算数据集的每日平均值:

Jday = datenum('2010-11-01 00:00','yyyy-mm-dd HH:MM'):60/(60*24):...
    datenum('2011-02-31 23:00','yyyy-mm-dd HH:MM');
Dat = rand(length(Jday),1);
DateV = datevec(Jday);
[~,~,b] = unique(DateV(:,1:3),'rows');
AvDat = abs(accumarray(b,Dat,[],@nanmean));     
AvJday = abs(accumarray(b,Jday,[],@nanmean));  

但是,我想给出一个数字集的平均值,给出输出分辨率的数字。例如,如果我写了

outRes = 86400; % in seconds

我想平均值,使输出分辨率等于86400秒,如果定义的outRes短于数据的分辨率,则不会进行平均。

如何做到这一点?

1 个答案:

答案 0 :(得分:0)

您应该能够通过以下方式检测数据的分辨率:

CurrentRes=mean(diff(Jday))*86400;
if (~all(diff(Jday)==CurrentRes))
    error('Inequally distributed sampling times');
end

if (CurrentRes>outRes)
    return;

然后你需要减少采样的数量是:

AveragingFactor=outRes/CurrentRes;

然后你可以通过在结尾(或开始)丢弃一些样本并进行平均来平均:

Dat = reshape(Dat(1:end-mod(length(Dat),AveragingFactor),:),AveragingFactor,[]);
AvDat = mean(Dat,1)'; % Transpose to keep it as a column vector if necessary.