# How to create a moving average filter to a specific signal

조회 수: 35(최근 30일)
Yian Chen 2021년 11월 28일
댓글: Image Analyst 2021년 11월 28일
Hi
I wanna apply a moving average filter to my temperature dataset, it is a 92-day daily temperature dataset. How can I create the filter?
Thanks a lot!

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

### 답변(2개)

Chunru 2021년 11월 28일
편집: Chunru 2021년 11월 28일
n = 7; % filter order
y = filter(ones(n, 1)/n, 1, x);
plot(x); hold on;
plot(y);
legend('Original', 'MovAve')
To get rid of delay:
figure
y = filtfilt(ones(n, 1)/n, 1, x);
plot(x); hold on;
plot(y);
legend('Original', 'MovAve')
##### 댓글 수: 3표시숨기기 이전 댓글 수: 2
Chunru 2021년 11월 28일
See above for removing delay using filtfilt (doc it for more details).

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

Image Analyst 2021년 11월 28일
Look at the movmean() function.
##### 댓글 수: 2표시숨기기 이전 댓글 수: 1
Image Analyst 2021년 11월 28일
@Yian Chen I don't see any zeros, and you might want to use more than 3 elements:
plot(y, 'b.-', 'LineWidth', 2, 'MarkerSize', 20);
grid on;
xlabel('Index', 'FontSize',fontSize)
% Filter it
windowWidth = 9
smoothy = movmean(y, windowWidth);
hold on;
plot(smoothy, 'r.-', 'LineWidth', 2, 'MarkerSize', 20);
legend('Original', 'Smoothed')
You could also try sgolayfilt() to smooth it. You can choose an order like 2 or 3 to follow the original data better than movmean() which uses a linear fit. An order of 2 or 3 will fit a quadratic or cubic to the data in each window position.

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

### Community Treasure Hunt

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

Start Hunting!

Translated by