Алгоритм раздвижного окна для распознавания действия

Я хочу записать алгоритм раздвижного окна для использования в распознавании действия.

Обучающие данные <1xN>, таким образом, я думаю, что просто должен взять (сказать window_size=3) window_size из данных и поезда это. Я также позже хочу использовать этот алгоритм на матрице.

Я плохо знаком с matlab, таким образом, мне нужен любой совет/направления относительно того, как реализовать это правильно.

5
задан Dennis Jaheruddin 30 August 2013 в 14:03
поделиться

1 ответ

Краткий ответ:

%# nx = length(x)
%# nwind = window_size
idx = bsxfun(@plus, (1:nwind)', 1+(0:(fix(nx/nwind)-1))*nwind)-1;

idx будет матрицей размера nwind-by-K , где K - количество скользящих окон (т.е. каждый столбец содержит индексы одного скользящего окна).

Обратите внимание, что в приведенном выше коде, если длина последнего окна меньше желаемой, оно отбрасывается. Также раздвижные окна не перекрываются.

Пример для иллюстрации:

%# lets create a sin signal
t = linspace(0,1,200);
x = sin(2*pi*5*t);

%# compute indices
nx = length(x);
nwind = 8;
idx = bsxfun(@plus, (1:nwind)', 1+(0:(fix(nx/nwind)-1))*nwind)-1;

%'# loop over sliding windows
for k=1:size(idx,2)
    slidingWindow = x( idx(:,k) );
    %# do something with it ..
end

%# or more concisely as
slidingWindows = x(idx);

РЕДАКТИРОВАТЬ:

Для перекрывающихся окон позвольте:

noverlap = number of overlapping elements

, тогда приведенное выше просто заменяется на:

idx = bsxfun(@plus, (1:nwind)', 1+(0:(fix((nx-noverlap)/(nwind-noverlap))-1))*(nwind-noverlap))-1;


Пример для отображения результата:

>> nx = 100; nwind = 10; noverlap = 2;
>> idx = bsxfun(@plus, (1:nwind)', 1+(0:(fix((nx-noverlap)/(nwind-noverlap))-1))*(nwind-noverlap))-1
idx =
     1     9    17    25    33    41    49    57    65    73    81    89
     2    10    18    26    34    42    50    58    66    74    82    90
     3    11    19    27    35    43    51    59    67    75    83    91
     4    12    20    28    36    44    52    60    68    76    84    92
     5    13    21    29    37    45    53    61    69    77    85    93
     6    14    22    30    38    46    54    62    70    78    86    94
     7    15    23    31    39    47    55    63    71    79    87    95
     8    16    24    32    40    48    56    64    72    80    88    96
     9    17    25    33    41    49    57    65    73    81    89    97
    10    18    26    34    42    50    58    66    74    82    90    98
10
ответ дан 13 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: