为移动窗口找到多个向量的最大值

时间:2015-03-21 11:14:38

标签: arrays matlab

我有一个1D矩阵x,我想要特定的迭代来滑动分析窗口,这样每次它移动20个样本,重叠率为50%。我找到bsxfun但我不知道如何根据我的问题调整它。

我写了下面的代码,但我没有得到我期望的结果。对于每个重叠窗口,我需要为每次迭代获得autocorr的最大值。我得到一个滞后数的错误。

x = rand(1,100);
N = length(x); % length of signal
n1 = 20;  % length of analysing window

win_num = floor((N/n1)*2-1); % number of windows
for i=1:win_num
   xmax(i) = max(bsxfun(@autocorr,x(1:n1/2:N),win_num-1));
end

1 个答案:

答案 0 :(得分:1)

您可以按如下方式修改循环,使其正常工作:

x = rand(1,100);   %// example data
N = length(x)      %// length of signal
n = 20             %// length of analysing window

for ii = n/2:n/2:N-1
    xmax(ii*2/n) = max( x( ii-n/2+1 : ii+n/2) );
end

vectorized版本可以是:

xmax = max( x( bsxfun(@plus, (1:n).',0:n/2:N-n) ) )

<强>解释

%// create index matrix with moving window
idx = bsxfun(@plus, (1:n).',0:n/2:N-n);   %'
%// get values of original vector
xM =  x( idx );
%// find maximimum in dimension 1
xmax = max( xM ).'