-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsegment.m
More file actions
54 lines (47 loc) · 1.63 KB
/
Copy pathsegment.m
File metadata and controls
54 lines (47 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
% 01_segment.m
% Segment all CSV files into overlapping windows and label them (user, session)
load('config.mat','dataFolder','params');
files = dir(fullfile(dataFolder,'*.csv'));
if isempty(files)
error("No CSV files in %s", dataFolder);
end
allWindows = {}; allUsers = []; allSess = []; filenames = {};
for f = 1:numel(files)
fname = files(f).name;
filepath = fullfile(files(f).folder, fname);
M = readmatrix(filepath);
if size(M,2) < 6
error("File %s has fewer than 6 columns (expected 6).", fname);
end
M = M(:,1:6); % only first 6 columns
N = size(M,1);
if N < params.minSamplesPerFile
warning("File %s has only %d samples (<%d).", fname, N, params.minSamplesPerFile);
end
% session
if contains(fname,'FD','IgnoreCase',true)
sess = 1;
elseif contains(fname,'MD','IgnoreCase',true)
sess = 2;
else
error("Filename %s must contain FD or MD.", fname);
end
% user id
t = regexp(fname,'U(\d+)','tokens','once');
if isempty(t), error("Filename %s must include U<id>.", fname); end
uid = str2double(t{1});
% segment
idx = 1:params.hop:(N - params.window_len + 1);
for k = 1:numel(idx)
w = M(idx(k):(idx(k)+params.window_len-1), :);
allWindows{end+1} = w; %#ok<SAGROW>
allUsers(end+1) = uid; %#ok<SAGROW>
allSess(end+1) = sess; %#ok<SAGROW>
filenames{end+1} = fname; %#ok<SAGROW>
end
end
nWindows = numel(allWindows);
fprintf("Segmented %d windows from %d files.\n", nWindows, numel(files));
if params.saveMat
save('windows_raw.mat','allWindows','allUsers','allSess','filenames','-v7.3');
end