create Matlab function to preform a running average filter

10 Ansichten (letzte 30 Tage)
AngelsaAtWar
AngelsaAtWar am 19 Apr. 2013
Beantwortet: Ma sa am 28 Nov. 2016
hi there I am clueless on how to create Matlab function to preform a running average filter using the following data:
[1 9 10 11 12 13 14 15 14 13 12 11 10 9 1]
may someone help me please and thank you
  1 Kommentar
Yao Li
Yao Li am 19 Apr. 2013
I think it depends on the precision of the filter. Do you want to calculate the mean value of ervery 3 points, 5 points or 7 points, etc?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Jan
Jan am 19 Apr. 2013
Bearbeitet: Jan am 19 Apr. 2013
You can use filter to achieve this:
x = [1 9 10 11 12 13 14 15 14 13 12 11 10 9 1];
n = 3; % Number of elements to be averaged
y = filter(ones(1, n) / n, 1, x);
But perhaps this does not satisfy your demands at the edges. You can do it manually also:
m = (n - 1) / 2;
len = size(x, 2);
y = x;
div = ones(size(x));
for k = 1:m
k2 = 2*k; % Slightly faster
z = zeros(1, k);
y = y + [z, x(1:len - k2) + x(1 + k2:len), z];
div(k + 1:len - k) = div(k + 1:len - k) + 2;
end
y = y ./ div;
Here the first and last elements are not changed, while the 2nd and 2nd last are averaged using 3 elements for all n >= 3.
You will find much more approachs, when you search in the FileExchange. It is a good idea to check, if others have published a solution there, before you ask in the forum.

Weitere Antworten (1)

Ma sa
Ma sa am 28 Nov. 2016
How can i creat an average filter of size(3*3)??

Kategorien

Mehr zu Audio Plugin Creation and Hosting finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by