-
Notifications
You must be signed in to change notification settings - Fork 1
/
filt_decimate.m
41 lines (38 loc) · 1.31 KB
/
filt_decimate.m
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
function [ filtdata ] = filt_decimate( data, r )
%FILT_DECIMATE Filters data using downsampling decimation
% Factor r is number of original points per downsampled point.
% Data is passed with colums of [time, sig1, sig2, ...], and
% returns the same array but with the data filtered.
if size(data,2)>10
data = data';
end
for i = 1:size(data,2) % go through each column of data separately
d = data(:,i);
filtdata(:,i) = accumarray(1+floor((1:numel(d))/r)',d',[],@mean);
%
% % Matlab says not to decimate with r > 13, instead do it multiple times
% reps = floor(log10(r));
% left = ceil(r/(10^reps));
% if r < 13
% f = decimate(data(:,i),r,'fir');
% elseif reps>1
% f = decimate(data(:,i),10,'fir');
% for j=2:reps
% if numel(f)>100
% f = decimate(f,10,'fir');
% end
% end
% if left > 1
% f = accumarray(1+floor((1:numel(f))/left)',f',[],@median);
% end
% else
% f = decimate(data(:,i),10,'fir');
% if left > 1
% f = decimate(f,left,'fir');
% end
% end
%
% filtdata(:,i) = f';
%
end
end