Borrar filtros
Borrar filtros

please interpret this result from the filter function

3 visualizaciones (últimos 30 días)
CLARK KENDRICK GO
CLARK KENDRICK GO el 8 de Feb. de 2018
Editada: Jan el 8 de Feb. de 2018
Please help me interpret this result from matlab. The input uses a filter function.
data = [1:0.2:4]';
windowSize = 5;
filter(ones(1,windowSize)/windowSize,1,data)
ans =
0.2000
0.4400
0.7200
1.0400
1.4000
1.6000
1.8000
2.0000
2.2000
2.4000
2.6000
2.8000
3.0000
3.2000
3.4000
3.6000
So the data spans from 1 to 4 with increments of 0.2. Windowsize of 5, I assume, is the length of the moving average filter used. This means it will take an average of 5 consecutive inputs (1 to 1.8, 1.2 to 2.0, and so on).
I don't understand the filter function itself. Is this a moving average filter? Why is the output such? Thanks

Respuesta aceptada

Jan
Jan el 8 de Feb. de 2018
Editada: Jan el 8 de Feb. de 2018
You can use an M-version of filter and the debugger to step through the code line by line. This should reveal exactly, how the outputs are created.
function [Y, z] = myFilter(b, a, X, z)
% Author: Jan Simon, Heidelberg, (C) 2018, License: CC BY-SA 3.0
% Direct form II transposed, see: doc filter => More About
n = length(a);
z(n) = 0; % Creates zeros if input z is omitted
b = b / a(1); % normalize parameters
a = a / a(1);
Y = zeros(size(X));
for m = 1:length(Y)
Y(m) = b(1) * X(m) + z(1);
for i = 2:n
z(i - 1) = b(i) * X(m) + z(i) - a(i) * Y(m);
end
end
z = z(1:n - 1);
The the inputs B=ones(1,windowSize)/windowSize and A=1, each element is replaced by the average of windowSize elements. Your data start with 1.0, but the output with 0.2. This happens, because the initial values of the filter status has the default value 0. Therefore there is a transitional effect at the beginning, the filter has to settle at first. You can reduce these effects by setting a better initial state as 4th input Z to the filter command.
See also the faster movmean function introduced in R2016a.
PS. We had some discussions concerning the Copyright (C) note. This does not restrict the usage of this piece of code. According to the terms of use of the forum, all codes are published under the "CC BY-SA 3.0" license. Then "(C)" means, that I have written this code by my own and not copied from anywhere else. It produces exactly the same results as Matlab's filter, so it is worth to mention, that I did not reverse-engineer the original code, because this would be illegal.

Más respuestas (0)

Categorías

Más información sobre Search Path en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by