Усреднение данных относится к методам для устранения нежелательного шума или поведений в данных, в то время как определение выбросов идентифицирует точки данных, которые существенно отличаются от остальной части данных.
Движущиеся методы окна являются способами обработать данные в меньших пакетах за один раз, обычно по порядку статистически представлять окружение точек в данных. Скользящее среднее значение является общими данными, сглаживающими метод, который двигает окно вдоль данных, вычисляя среднее значение точек в каждом окне. Это может помочь устранить незначительные изменения от одной точки данных до следующего.
Например, считайте измерения скорости ветра бравшимися каждую минуту в течение приблизительно 3 часов. Используйте функцию movmean с размером окна 5 минут, чтобы сгладить высокоскоростные порывы ветра.
load windData.mat mins = 1:length(speed); window = 5; meanspeed = movmean(speed,window); plot(mins,speed,mins,meanspeed) axis tight legend('Measured Wind Speed','Average Wind Speed over 5 min Window','location','best') xlabel('Time') ylabel('Speed')

Точно так же можно вычислить среднюю скорость ветра по раздвижному окну с помощью функции movmedian.
medianspeed = movmedian(speed,window); plot(mins,speed,mins,medianspeed) axis tight legend('Measured Wind Speed','Median Wind Speed over 5 min Window','location','best') xlabel('Time') ylabel('Speed')

Не все данные подходят для сглаживания с движущимся методом окна. Например, создайте синусоидальный сигнал с введенным случайным шумом.
t = 1:0.2:15; A = sin(2*pi*t) + cos(2*pi*0.5*t); Anoise = A + 0.5*rand(1,length(t)); plot(t,A,t,Anoise) axis tight legend('Original Data','Noisy Data','location','best')

Используйте скользящее среднее значение с размером окна 3, чтобы сглаживать шумные данные.
window = 3; Amean = movmean(Anoise,window); plot(t,A,t,Amean) axis tight legend('Original Data','Moving Mean - Window Size 3')

Скользящее среднее значение достигает общей формы данных, но не получает долины (локальные минимумы) очень точно. Поскольку точки долины окружаются двумя более крупными соседями в каждом окне, среднее значение не является очень хорошим приближением к тем точкам. Если вы делаете размер окна больше, среднее значение устраняет более короткий peaks в целом. Для этого типа данных вы можете рассмотреть альтернативные методы сглаживания.
Amean = movmean(Anoise,5); plot(t,A,t,Amean) axis tight legend('Original Data','Moving Mean - Window Size 5','location','best')

Функция smoothdata предоставляет несколько возможностей сглаживания, таких как метод Savitzky-Golay, который является популярным методом сглаживания, используемым в обработке сигналов. По умолчанию smoothdata выбирает размер окна лучшего предположения для метода в зависимости от данных.
Используйте метод Savitzky-Golay, чтобы сглаживать сигнал с шумом Anoise и вывести размер окна, который это использует. Этот метод обеспечивает лучшее приближение долины по сравнению с movmean.
[Asgolay,window] = smoothdata(Anoise,'sgolay'); plot(t,A,t,Asgolay) axis tight legend('Original Data','Savitzky-Golay','location','best')

window
window = 3
Устойчивый метод Lowess является другим методом сглаживания, который особенно полезен, когда выбросы присутствуют в данных в дополнение к шуму. Введите выброс в шумные данные и используйте устойчивый Lowess, чтобы сглаживать данные, которые устраняют выброс.
Anoise(36) = 20; Arlowess = smoothdata(Anoise,'rlowess',5); plot(t,Anoise,t,Arlowess) axis tight legend('Noisy Data','Robust Lowess')

Выбросы в данных могут значительно скосить результаты обработки данных и другие вычисленные количества. Например, при попытке сглаживать данные, содержащие выбросы с движущейся медианой, можно получить вводящий в заблуждение peaks или долины.
Amedian = smoothdata(Anoise,'movmedian'); plot(t,Anoise,t,Amedian) axis tight legend('Noisy Data','Moving Median')

Функция isoutlier возвращает логическую единицу, когда выброс обнаруживается. Проверьте индекс и значение выброса в Anoise.
TF = isoutlier(Anoise); ind = find(TF)
ind = 36
Aoutlier = Anoise(ind)
Aoutlier = 20
Можно использовать функцию filloutliers, чтобы заменить выбросы в данных путем определения метода заполнения. Например, заполните выброс в Anoise со значением его соседа сразу направо.
Afill = filloutliers(Anoise,'next'); plot(t,Anoise,t,Afill) axis tight legend('Noisy Data with Outlier','Noisy Data with Filled Outlier')

Не все данные состоят из равномерно распределенных точек, которые могут влиять на методы для обработки данных. Создайте вектор datetime, который содержит неправильное время выборки для данных в Airreg. Вектор time представляет выборки, бравшиеся каждую минуту в течение первых 30 минут, затем каждый час более чем двух дней.
t0 = datetime(2014,1,1,1,1,1);
timeminutes = sort(t0 + minutes(1:30));
timehours = t0 + hours(1:48);
time = [timeminutes timehours];
Airreg = rand(1,length(time));
plot(time,Airreg)
axis tight
По умолчанию smoothdata сглаживает относительно равномерно распределенных целых чисел, в этом случае, 1,2,...,78. Поскольку целочисленные метки времени не координируют с выборкой точек в Airreg, час первой половины данных все еще кажется шумным после сглаживания.
Adefault = smoothdata(Airreg,'movmean',3); plot(time,Airreg,time,Adefault) axis tight legend('Original Data','Smoothed Data with Default Sample Points')

Много функций обработки данных в MATLAB®, включая smoothdata, movmean, и filloutliers, позволяют вам обеспечивать точки выборки, гарантируя, что данные обрабатываются относительно его модулей выборки и частот. Чтобы удалить высокочастотное изменение в час первой половины данных в Airreg, используйте опцию 'SamplePoints' с метками времени в time.
Asamplepoints = smoothdata(Airreg,'movmean',hours(3),'SamplePoints',time); plot(time,Airreg,time,Asamplepoints) axis tight legend('Original Data','Smoothed Data with Sample Points')

filloutliers | isoutlier | movmean | movmedian | smoothdata