2010-02-04 69 views
5

Tôi muốn viết thuật toán cửa sổ trượt để sử dụng trong nhận dạng hoạt động.Thuật toán cửa sổ trượt để nhận dạng hoạt động

Dữ liệu đào tạo là < 1xN> vì vậy tôi nghĩ tôi chỉ cần thực hiện (window_size=3) số window_size dữ liệu và huấn luyện đó. Tôi cũng muốn sử dụng thuật toán này trên ma trận .

Tôi mới sử dụng MATLAB nên tôi cần bất kỳ lời khuyên/hướng dẫn nào về cách triển khai chính xác.

Trả lời

10

Câu trả lời ngắn:

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

idx sẽ là một ma trận kích thước nwind-by-K nơi K là số trượt cửa sổ (tức là mỗi cột chứa các chỉ số của một cửa sổ trượt).

Lưu ý rằng trong đoạn mã ở trên, nếu chiều dài của cửa sổ cuối cùng nhỏ hơn độ dài mong muốn, nó sẽ bị loại bỏ. Ngoài ra các cửa sổ trượt không chồng chéo.

Một ví dụ để minh họa:

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

EDIT:

Đối chồng chéo cửa sổ, chúng ta hãy:

noverlap = number of overlapping elements 

sau đó ở trên chỉ đơn giản là thay đổi để:

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


Một ví dụ để hiển thị các kết quả:

>> 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 
+0

@Amro nhờ, điều này sẽ có ích :) – csc

+0

@Amro thế nào tôi sẽ điều chỉnh này để làm cho các cửa sổ chồng chéo? – csc

+0

vâng, xin lỗi tôi đã quên: S – csc

Các vấn đề liên quan