How do I select n elements of a sequence in windows of m ? (matlab)

前端 未结 5 1124
温柔的废话
温柔的废话 2021-01-19 10:47

Quick MATLAB question. What would be the best/most efficient way to select a certain number of elements, \'n\' in windows of \'m\'. In other words, I want to select the fir

5条回答
  •  野的像风
    2021-01-19 11:07

    Consider the following vectorized code:

    x = 1:100;                                     %# an example sequence of numbers
    
    nwind = 50;                                    %# window size
    noverlap = 40;                                 %# number of overlapping elements
    nx = length(x);                                %# length of sequence
    
    ncol = fix((nx-noverlap)/(nwind-noverlap));    %# number of sliding windows
    colindex = 1 + (0:(ncol-1))*(nwind-noverlap);  %# starting index of each
    
    %# indices to put sequence into columns with the proper offset
    idx = bsxfun(@plus, (1:nwind)', colindex)-1;   %'
    
    %# apply the indices on the sequence
    slidingWindows = x(idx)
    

    The result (truncated for brevity):

    slidingWindows =
         1    11    21    31    41    51
         2    12    22    32    42    52
         3    13    23    33    43    53
        ...
        48    58    68    78    88    98
        49    59    69    79    89    99
        50    60    70    80    90   100
    

    In fact, the code was adapted from the now deprecated SPECGRAM function from the Signal Processing Toolbox (just do edit specgram.m to see the code).

    I omitted parts that zero-pad the sequence in case the sliding windows do not evenly divide the entire sequence (for example x=1:105), but you can easily add them again if you need that functionality...

提交回复
热议问题