Making a moving average filter without looking in to the future. So forecasting the data, how do you do it?

4 次查看(过去 30 天)
M = 11
% 4. Moving average filter
for n = 1:M
yma(n) = average(y([1:n+M-1]));
end
for n = M+1:length(t)-M
yma(n) = average(y([n-M:n+M]));
end
for n = length(t)-M+1:length(t)
yma(n) = average(y([n-M:length(t)]));
end
yma = yma';
  3 个评论
Kaz Van Rijsewijk
Kaz Van Rijsewijk 2022-4-12
Hello Mathieu,
This is the question that I have to answer and also apply to my script:
If we want to filter in real time we can't filter this way, we can only do it backwards.
24. Adjust the moving average filter accordingly, such that at the same value of M is filtered over as many points as before. Is there a phase delay now?

请先登录,再进行评论。

回答(1 个)

Steven Lord
Steven Lord 2022-4-12
编辑:Steven Lord 2022-4-12
Use the movmean function with the M = movmean(A, [kb kf]) syntax given on its documentation page. Choose kf = 0 to include 0 elements forward of the current element.
x = randi(10, 1, 5)
x = 1×5
3 6 9 6 8
M = movmean(x, [1 0])
M = 1×5
3.0000 4.5000 7.5000 7.5000 7.0000
N = 4;
check = (x(N-1)+x(N))/2 - M(N)
check = 0
Note that the expression for check (the moving mean for element 4) does not include x(5), so the moving mean computation didn't "look into the future".
  1 个评论
Kaz Van Rijsewijk
Kaz Van Rijsewijk 2022-4-12
Hello Steven,
Thank you! But just be sure does this still apply to next question. My first question was a bit unclear I think.
  • If we want to filter in real time we can't filter this way, we can only do it backwards.
24. Adjust the moving average filter accordingly, such that at the same value of M is filtered over as many points as before. Is there a phase delay now?

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Digital Filter Analysis 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by