【问题标题】:Downsampling data in Matlab by averaging [duplicate]通过平均[重复]在Matlab中对数据进行下采样
【发布时间】:2015-03-06 10:51:20
【问题描述】:

我在 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.5s。

但是,现在我想知道是否有一种方法可以让我取 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)。我希望它取前 2 个条目,平均它们,然后是接下来的 2 个条目,然后平均它们。很快。

有人可以帮忙吗?

谢谢

【问题讨论】:

  • 啊,是的.. 抱歉...我确实尝试寻找现有的已回答问题,但我认为我的搜索词与标题不同。
  • 是的,你解释的很详细,为什么要实现,要实现什么。可能的重复甚至不在相关主题中,我只记得它。别担心,这仍然是一个好问题。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 2019-12-27
    • 2012-06-06
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多