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
| function filteredSignal = LowPassFilter(rawSignal)
% Filter a raw signal using a Butterworth low pass filter
% Inputs:
% rawSignal - The raw signal
% Outputs:
% filteredSignal - The filtered signal
% Retain the values in memory between calls to the function
persistent buffer;
persistent counter;
bufferSize = 10;
if isempty(buffer)
buffer = zeros(1, bufferSize);
counter = 0;
end
% Add the rawSignal value to the buffer
buffer = [rawSignal buffer(1:bufferSize - 1)];
counter = counter + 1;
if counter > bufferSize
counter = bufferSize;
end
% Calculate the coefficients of a 2nd-order butterworth low pass filter
% whose normalized cutoff frequency is 0.99*pi rad/sample
[b, a] = butter(2, 0.99);
% Filter the buffer
filteredBuffer = filter(b, a, buffer(1:counter));
% And take the mean of that
filteredSignal = mean(filteredBuffer);
% A guard for Nan and Inf values
if isnan(filteredSignal) || isinf(filteredSignal)
filteredSignal = rawSignal;
end
end |
Partager