Moving average without using movmean() or conv()

조회 수: 45 (최근 30일)
FS
FS 2020년 10월 10일
댓글: Rena Berman 2021년 5월 7일
Write a function that performs the moving average of any 1-dimensional input data 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. You must not use built in functions like movmean() or conv().
y[n] = 1/M Σx[n − k]
lower limit k= 0 upper limit M −1
I have this so far:
function
t1=0:0.001:1;t2=1.001:0.001:2;t3=2.001:0.001:3;
t=[t1 t2 t3];
x1=10*ones(1,length(t1));
x2=15*ones(1,length(t2));
x3=20*ones(1,length(t3));
x=[x1 x2 x3];
M=20;
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])
  댓글 수: 11
Rena Berman
Rena Berman 2021년 5월 7일

(Answers Dev) Restored edit

Rena Berman
Rena Berman 2021년 5월 7일
(Answers Dev) Restored edit

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

채택된 답변

Image Analyst
Image Analyst 2020년 10월 10일
I'm attaching a fully manual 2-D convolution. It should be easy for you to adapt it to 1-D
  댓글 수: 1
Image Analyst
Image Analyst 2020년 10월 20일
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?

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Axis Labels에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by