【问题标题】:Average on contiguos segments of a vector向量的平均非连续段
【发布时间】:2017-07-04 06:21:32
【问题描述】:

我敢肯定,对于信号员来说,这是一个微不足道的问题。我需要在 Matlab 中找到输出平均 windowssize= l 向量的连续片段的函数,例如

origSignal: [1 2 3 4 5 6 7 8 9];
windowSize = 3;
output = [2 5 8]; % i.e. [(1+2+3)/3 (4+5+6)/3 (7+8+9)/3]

编辑:How can I (efficiently) compute a moving average of a vector? 中提供的任何一个选项似乎都不起作用,因为我需要 3 大小的窗口滑动,并且不包含任何先前的元素......也许我错过了它。看看我的例子...

谢谢!

【问题讨论】:

  • 我编辑了这个问题。它似乎以某种方式相关,但它不能满足我的需要。
  • 不好:x = 1:9; y = conv(x, one(1,3), '有效')/3; y = 2 3 4 5 6 7 8
  • 我编辑了标题,因为您不是在寻找移动平均线。移动平均是数据每个点的平均值,考虑到 N 窗口
  • 原始信号大小是否总是寡妇大小的倍数?
  • 然后reshape你的信号并使用mean,例如mean(reshape(origSignal, windowSize, []))

标签: matlab filter moving-average


【解决方案1】:

如果原始数据的大小总是widowsize的倍数:

mean(reshape(origSignal,windowSize,[]));

否则,在一行中:

mean(reshape(origSignal(1:end-mod(length(origSignal),windowSize)),windowSize,[]))

这和以前一样,但是信号只取到末尾减去小于windowsize的额外值。

【讨论】:

    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 2016-05-06
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多