MATLAB Answers

How to decide window size for a moving average filter?

745 views (last 30 days)
Hello all, I have some noisy data in the form of x and y variables. I plan to use moving average filer to get satisfactory results, yet as close as possible to the real data. I understand that higher window size means more smooth data, and hence less realistic. Is that correct? Is window size of 5 considered decent enough to establish relationship between the variables in general? Any leads are highly appreciated. Thanks and regards, Swanand.

Accepted Answer

Image Analyst
Image Analyst on 7 Dec 2016
Edited: Image Analyst on 28 Jan 2019
It could be. Who's to say? It's more or less of a judgement call as to what amount of smoothing is best, isn't it. You could determine the sum of absolute differences for different window sizes and plot it. Maybe some pattern will jump out at you, like a knee in the curve.
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 20;
numPoints = 5000;
noiseSignal = rand(1, numPoints);
x = linspace(0, 300, numPoints);
period = 100;
cleanSignal = cos(2*pi*x / period);
noisySignal = cleanSignal + noiseSignal;
subplot(2, 1, 1);
plot(x, noisySignal, 'b-', 'LineWidth', 2);
grid on;
xlabel('x', 'FontSize', fontSize);
ylabel('Noisy Signal', 'FontSize', fontSize);
windowSizes = 3 : 3 : 51
for k = 1 : length(windowSizes)
smoothedSignal = movmean(noisySignal, windowSizes(k));
sad(k) = sum(abs(smoothedSignal - noisySignal))
end
subplot(2, 1, 2);
plot(windowSizes, sad, 'b*-', 'LineWidth', 2);
grid on;
xlabel('Window Size', 'FontSize', fontSize);
ylabel('SAD', 'FontSize', fontSize);
Pick the smallest window size where the SAD seems to start to flatten out. Going beyond that (to larger window sizes) really doesn't produce much more benefit (smoothing) and will take longer.
  11 Comments

Sign in to comment.

More Answers (3)

Walter Roberson
Walter Roberson on 7 Dec 2016
A moving average filter is one of the varieties of discrete lowpass filter. You can choose your width according to your attenuation needs. See http://ptolemy.eecs.berkeley.edu/eecs20/week12/freqResponseRA.html

Siyab Khan
Siyab Khan on 28 Jan 2019
How can we select a wind size for the selection of DNA sequence like
ATCGGGCTTACGG
window length size 5 to read the sequence please drop the code.
  3 Comments
Image Analyst
Image Analyst on 28 Jan 2019
I don't know what that means. Do you want to read 5 characters from somewhere? Or 10? Or 15? Where is this stream coming from? A file? If so, have you seen fread()?

Sign in to comment.


Greg Heath
Greg Heath on 9 Mar 2019
I'm very surprised that none of the previous responses mentioned
1. Determine characteristic self correlation lengths using output autocorrelation functions
2.. Determine characteristic cross correlation lengths using
input-output crosscorrelation functions
Hope this helps.
Greg
  2 Comments
yusra Ch
yusra Ch on 20 Feb 2020
Could you please explain to me in case for example C35 and C57 with a maximum gradient comparing to the rest. Which one of them could be considered at the best length 3, 5 or 7 ?

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!