Усреднение данных относится к методам для устранения нежелательного шума или поведений в данных, в то время как определение выбросов идентифицирует точки данных, которые существенно отличаются от остальной части данных.
Движущиеся методы окна являются способами обработать данные в меньших пакетах за один раз, обычно для того, чтобы статистически представлять окружение точек в данных. Скользящее среднее значение является общими данными, сглаживающими метод, который двигает окно вдоль данных, вычисляя среднее значение точек в каждом окне. Это может помочь устранить незначительные изменения от одной точки данных до следующего.
Например, считайте измерения скорости ветра бравшимися каждую минуту в течение приблизительно 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