我有一个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
答案 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 ).'