This is a general indexing question. I thought if you preallocated the y(n) locations, I could calculate y(n) based on y(n-1) but that is not working right.

I could have made up some other difference equation.

1 view (last 30 days)

Show older comments

Hello, I have what I think is an easy indexing question, that has me scratching my head. I set up a simple moving average as such:

% the MA depth

Ml=16;

% the input data

x=[ zeros(1,Ml) 1:10 9:-1:7 8:10 9:-1:7 8:10 9:-1:7 8:10 9:-1:7]; % sequence to average out

% storage for output

y= zeros(1,length(x)+Ml);

%index

n= [Ml+1:length(x)];

%moving average

y(n)= y(n-1) + x(n)/Ml - x(n-Ml)/Ml;

which gives the wrong value for y(n). If I implement as a loop, it works fine.

% storage for output

yl= zeros(1,length(x)+Ml);

for n= Ml+1:length(x)

yl(n)= yl(n-1) + x(n)/Ml - x(n-Ml)/Ml

end

what is wrong with the non-loop version?

Bob Thompson
on 29 Mar 2021

I think the issue is with your loop definition. You define y1 to be length(x)+M1 long, but n is defined from M1+1 to length(x). I assume you were intending to do 1+M1 to length(x)+M1, but you will need to add the M1 to both sides of the colon.

% storage for output

yl= zeros(1,length(x)+Ml);

for n= Ml+1:length(x)

yl(n)= yl(n-1) + x(n)/Ml - x(n-Ml)/Ml

end

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

Start Hunting!