MATLAB Answers

How to calculate moving average

조회 수: 966(최근 30일)
Mekala balaji
Mekala balaji 2017년 11월 16일
편집: dpb 2020년 11월 25일
Hi,
I have following data:
0.10
0.24
0.30
0.25
0.33
0.35
0.46
0.47
0.48
0.51
0.52
0.53
0.53
0.57
0.58
0.58
0.58
0.59
0.63
0.64
0.66
0.72
I want to take 3-points moving average,
Please help some one
  댓글 수: 2
Star Strider
Star Strider 2019년 12월 11일
@Quin Silk — See the Moving Average Filter link in my Answer.

댓글을 달려면 로그인하십시오.

답변(6개)

KL
KL 2017년 11월 16일
If you have 2016b or later, use movmean,
mean_arr = movmean(your_array,3)

Star Strider
Star Strider 2017년 11월 16일
Use the movmean (link) function (introduced in R2016a).
You can also use the filter function. See the section on Moving-Average Filter (link).
  댓글 수: 1
Pallavi Bharati
Pallavi Bharati 2020년 11월 25일
How to do centered moving average ...three point centred moving average in matlab without the movmean command as i have matlab 2015

댓글을 달려면 로그인하십시오.


Bandar
Bandar 2019년 12월 11일
Take a look this data
file=[1 2 3 4];
movmean(file,3)
which returns
1.5000 2.0000 3.0000 3.5000
The filter works as follows:
1 2 (1+2)/2 = 1.5 when k points at 1
1 2 3 (1+2+3)/3 = 2.0 when k points at 2
2 3 4 (2+3+4)/3 = 3.0 when k points at 3
3 4 (3+4)/2 = 3.5 when k points at 4
Now it is easy to convert it to a logical code or merely use movmean().
  댓글 수: 3
Micheal Omojola
Micheal Omojola 2020년 9월 8일
@Bandar Aldhafeeri: Thank you! Your answer was helpful.

댓글을 달려면 로그인하십시오.



Sudhakar Rayabarapu
Sudhakar Rayabarapu 2018년 9월 8일
편집: Sudhakar Rayabarapu 2018년 9월 8일
Name your data array A; and keep as a column; then use this command
OutPut = tsmovavg(A, 's', 3, 1)
this will give you the simple moving average

Pallavi Bharati
Pallavi Bharati 2020년 11월 24일
Can anyone help me to compute three point moving average of a 5 year data.I used the filter command but the result are erroneous .I am using MATLAB 2015.And I have a huge data 5 year day wise data and i have to compute three point moving average for each month .
  댓글 수: 2
dpb
dpb 2020년 11월 24일
The results aren't "erroneous" (presuming you defined the coefficients correctly), they just depend on how one treats the end conditions...examine the following:
>> x=1:10;
>> movmean(x,3)
ans =
1.5000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 9.5000
>> filter(ones(1,3)/3,1,x)
ans =
0.3333 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000
>> conv(x,ones(1,3)/3,'same')
ans =
1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 6.3333
>> conv(x,ones(1,3)/3,'valid')
ans =
2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000
>>
movmean special-cases the end positions to change the divisor to match the number of elements from 2:N on each end; filter and conv do not.
It's up to you to determine the solution you wish to use; none is theoretically any more or less correct than any other; just different assumptions are made.

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by