2015-07-09 51 views
2

我有从设备记录的数据(250-Hz采样设备,约100K测量总共约400秒)。我想要创建512个(〜2秒)或1024(〜4秒)测量的(重叠)窗口,可能需要约0.5秒的时间间隔。我正在使用Matlab。在重叠时间测量上应用滚动窗口

有没有一种特定的方法来实现这个目标?我想我想用一个过滤器来实现这个目标?如果我想申请一个Hann窗户,它会改变吗?

感谢您的帮助!

+0

检查['blockproc'](HTTP ://es.mathworks.com/help/images/ref/blockproc.html)使用任意函数处理可能重叠的块 –

+0

感谢您的回应。它看起来像blockproc专注于图像处理。我也不认为它实际上允许重叠块。否则,这将是我正在寻找的功能。 – anon

+0

我认为它的确如此。你必须适当地设置'blocksize'(一个入口'1',第二个入口窗口步骤)并使用''BorderSize''选项产生所需的窗口大小 –

回答

3

让你的数据成为一个行向量。您可以使用blockproc如果您:

  • 选择“blockSize”的说法为[1 S],其中S是窗口的步骤;
  • 使用'BorderSize'选项设置边框[0 B]。窗口长度将为S+2*B;
  • 设置'TrimBorder'属性为false;
  • 定义适用于每个窗口数据的适当函数。

例如,假设你一个长度为5的窗口与步骤3中,并且要在每个窗口中的所有元素的总和:

>> x = 1:12; 
>> y = blockproc(x, [1 3], @(t) sum(t.data), 'Bordersize', [0 1], 'TrimBorder', false) 
y = 
    10 25 40 42 

其中

%// 0+1+2+3+4 = 10 
%// 3+4+5+6+7 = 25 
%// 6+7+8+9+10 = 40 
%// 9+10+11+12+0 = 42 

注零在最初和最后的窗口填充。为了避免这种情况,包括在数据初始零足够量的,适当地选择数据大小和丢弃初始和最终输出值:

>> x = 1:14; 
>> y = blockproc([0 0 x], [1 3], @(t) sum(t.data), 'Bordersize', [0 1], 'TrimBorder', false) 
y = 
    3 15 30 45 60 27 

其中

%// 1+2+3+4+5 = 15 
%// 4+5+6+7+8 = 30 
%// 7+8+9+10+11 = 45 
%// 10+11+12+13+14 = 60 
+1

在第一个例子中,为什么要预先定义'x '? '@(x)sum(x.data),'中的'x'是否代表'blocproc'函数调用中第一个参数的每个块? – kkuilla

+0

@kkuilla是的,我正在定义数据'x'而没有使用它。谢谢!现在更正 –