通过平均对Matlab中的数据进行下采样

时间:2015-01-08 10:42:50

标签: matlab for-loop vector data-manipulation downsampling

我在Matlab中有2个数据集,我需要相互绘图 - 一个在x轴上,一个在y轴上。使用不同的方法收集每组的数据,因此采样率显着不同,直到我在两组中没有相同数量的数据点,我不能相互映射一个。

使用downsample函数Matlab在Matlab中对数据进行下采样非常简单。

A = [-3 -1.5 0 1.5 3 4.5 6 7.5 9...] (goes on until 21) 
B = [-3.9 -3.8 -3.7 -3.6 -3.5 -3.5 -3.3 -3.2 -3.1 -3.0 -2.9 -2.8...] (goes on until 22) 

A的采样率为1.5s,B的采样率为0.1s。我已成功使用downsample作为downsample(B,15,10),以便在同一时间启动{" -3s" (这意味着我的数据中的某些东西,所以我需要从那时开始)并且样本采样率为1.5秒。

然而,现在,我想知道是否有一种方法可以让我取15分的平均值,而不是每15分选一分? downsample,我使用它的方式只是选择每15分。但是,我希望能为我平均得到15分。有没有办法做到这一点?

我为一个简单/较小的向量写了一个for循环,看看我是否可以做到。对于A = [1 2 3 4],我希望压缩数据,以便A只有2个条目,这样它平均为A(1)和A(2),然后是A(3)和A(4)。

A = [1 2 3 4] 
for i = 1:3
  P(i) = mean(A(i:i+1))
end 

然而,这并不像我想要的那样,因为我不希望它平均为A(2)和A(3)。我希望它获取前两个条目,平均它们,然后接下来的两个条目,然后平均它们。等等。

有人可以帮忙吗?

由于

1 个答案:

答案 0 :(得分:4)

将您的数据A重新整理为n - 行矩阵,其中n是平均大小,并应用mean来计算每列的平均值:

A = [1 2 3 4]; %// data
n = 2; %// averaging size
P = mean(reshape(A,n,[]));