Frage Schiebefensteralgorithmus für die Aktivitätserkennung


Ich möchte einen Sliding-Window-Algorithmus zur Verwendung in der Aktivitätserkennung schreiben.

Die Trainingsdaten sind <1xN>, also denke ich, dass ich nur nehmen muss (sagen wir window_size=3) das window_size von Daten und trainieren das. Ich möchte diesen Algorithmus später auch auf einer Matrix verwenden .

Ich bin neu bei Matlab, also brauche ich einen Rat / Anweisungen, wie man das richtig implementiert.


5
2018-02-04 19:12


Ursprung


Antworten:


Die kurze Antwort:

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

idx wird eine Matrix der Größe sein nwind-by-K woher K ist die Anzahl der Schiebefenster (dh jede Spalte enthält die Indizes eines Schiebefensters).

Beachten Sie, dass im obigen Code, wenn die Länge des letzten Fensters kleiner als die gewünschte ist, diese gelöscht wird. Auch die Schiebefenster sind nicht überlappend.

Ein Beispiel zur Veranschaulichung:

%# 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);

BEARBEITEN:

Für überlappende Fenster:

noverlap = number of overlapping elements

dann wird das obige einfach geändert in:

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


Ein Beispiel, um das Ergebnis zu zeigen:

>> 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
2018-02-04 21:24