63 views (last 30 days)

This question was flagged by Image Analyst

y[n] = 1/M Σx[n − k]

lower limit k= 0 upper limit M −1

Write a function that performs the moving average for any non-zero and positive order M. Make sure to add M-1 zeros at the beginning of the data so that your output data will be the same length as your input data.

I have this so far:

function [movaverage] = movaverage(M)

M=zeros(1,length(M));

for i=1:length(t)-M

y1(i)=(1/M)*sum(i:i+M-1);

end

y=[zeros(1,M) y1];

figure

subplot(211)

plot(t,x,'b')

ylabel('Signal')

axis([0 3 0 30])

subplot(212)

plot(t,y,'r')

ylabel('Moving avg')

xlabel('Time (s)')

axis([0 3 0 inf])

Image Analyst
on 10 Oct 2020

I'm attaching a fully manual 2-D convolution. It should be easy for you to adapt it to 1-D

Image Analyst
on 20 Oct 2020

I see you're editing the original question to follow my advice in my comment above:

"

You need an outer loop over n but not like you have. You need to use M, not k

for n=1:length(x)-(2*M+1) % M is the window width

Then the inner loop needs to be over k where k goes from 0 to M-1, just like your instructions said. Then you need to sum y and divide by M, again, like the instructions said, not like what you did which was to divide by (2*k+1). If you sum a sequence of M elements in y, then divide by M, you get the average value in that segment of y.

"

So, did that help you? Are we done yet and you can Accept this answer? Or do you still have questions?

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

Start Hunting!
## 9 Comments

## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1049586

⋮## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1049586

## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1049866

⋮## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1049866

## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1049946

⋮## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1049946

## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1050561

⋮## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1050561

## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1050716

⋮## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1050716

## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1051131

⋮## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1051131

## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1051251

⋮## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1051251

## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1051616

⋮## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1051616

## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1117380

⋮## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/609896-calculate-moving-average-manually#comment_1117380

Sign in to comment.