smoothdata

Сглаживайте зашумленные данные

Описание

пример

B = smoothdata(A) возвращает движущееся среднее значение вектора элементов массива с помощью фиксированной длины окна, которая определяется эвристически. Окно скользит по длине вектора, вычисляя среднее значение по элементам в каждом окне.

  • Если A является матрицей, тогда smoothdata вычисляет скользящее среднее значение вниз по каждому столбцу.

  • Если A является многомерным массивом, затем smoothdata действует вдоль первой размерности, размер которого не равен 1.

  • Если A - таблица или расписание с числовыми переменными, затем smoothdata работает с каждой переменной отдельно.

пример

B = smoothdata(A,dim) действует вдоль размерности dim от A. Для примера, если A является матрицей, тогда smoothdata(A,2) сглаживает данные в каждой строке A.

пример

B = smoothdata(___,method) задает метод сглаживания для любого из предыдущих синтаксисов. Для примера, B = smoothdata(A,'sgolay') использует фильтр Савицкого-Голея, чтобы сгладить данные в A.

пример

B = smoothdata(___,method,window) задает длину окна, используемого методом сглаживания. Для примера, smoothdata(A,'movmedian',5) сглаживает данные в A путем взятия медианы над пятиэлементным скользящим окном.

пример

B = smoothdata(___,nanflag) задает, как NaN значения обрабатываются для любого из предыдущих синтаксисов. 'omitnan' игнорирует NaN значения и 'includenan' включает их при вычислении в каждом окне.

пример

B = smoothdata(___,Name,Value) задает дополнительные параметры для сглаживания с помощью одного или нескольких аргументов пары "имя-значение". Для примера, если t является вектором значений времени, затем smoothdata(A,'SamplePoints',t) сглаживает данные в A относительно времени в t.

пример

[B,window] = smoothdata(___) также возвращает длину окна.

Примеры

свернуть все

Создайте вектор, содержащий зашумленные данные, и сглажьте данные с помощью скользящего среднего значения. Постройте график исходных и сглаженных данных.

x = 1:100;
A = cos(2*pi*0.05*x+2*pi*rand) + 0.5*randn(1,100);
B = smoothdata(A);
plot(x,A,'-o',x,B,'-x')
legend('Original Data','Smoothed Data')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Data, Smoothed Data.

Создайте матрицу, строки которой представляют три сигналов с шумом. Сглаживайте три сигнала, используя скользящее среднее значение, и стройте графики сглаженных данных.

x = 1:100;
s1 = cos(2*pi*0.03*x+2*pi*rand) + 0.5*randn(1,100);
s2 = cos(2*pi*0.04*x+2*pi*rand) + 0.4*randn(1,100) + 5;
s3 = cos(2*pi*0.05*x+2*pi*rand) + 0.3*randn(1,100) - 5;
A = [s1; s2; s3];
B = smoothdata(A,2);
plot(x,B(1,:),x,B(2,:),x,B(3,:))

Figure contains an axes. The axes contains 3 objects of type line.

Сглаживайте вектор зашумленных данных с помощью Гауссова взвешенного фильтра скользящего среднего. Отображение длины окна, используемой фильтром.

x = 1:100;
A = cos(2*pi*0.05*x+2*pi*rand) + 0.5*randn(1,100);
[B, window] = smoothdata(A,'gaussian');
window
window = 4

Сглаживайте исходные данные с большим окном длины 20. Постройте график сглаженных данных для обоих длин окон.

C = smoothdata(A,'gaussian',20);
plot(x,B,'-o',x,C,'-x')
legend('Small Window','Large Window')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Small Window, Large Window.

Создайте зашумленный вектор, содержащий NaN Значения и сглаживайте данные, игнорируя NaN, который является значением по умолчанию.

A = [NaN randn(1,48) NaN randn(1,49) NaN];
B = smoothdata(A);

Сглаживайте данные, включая NaN значения. Среднее значение в окне, содержащем NaN является NaN.

C = smoothdata(A,'includenan');

Постройте график сглаженных данных в B и C.

plot(1:100,B,'-o',1:100,C,'-x')
legend('Ignore NaN','Include NaN')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Ignore NaN, Include NaN.

Создайте вектор зашумленных данных, который соответствует временному вектору t. Сглаживайте данные относительно времени в t, и постройте график исходных данных и сглаженных данных.

x = 1:100;
A = cos(2*pi*0.05*x+2*pi*rand) + 0.5*randn(1,100);
t = datetime(2017,1,1,0,0,0) + hours(0:99);
B = smoothdata(A,'SamplePoints',t);
plot(t,A,'-o',t,B,'-x')
legend('Original Data','Smoothed Data')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Data, Smoothed Data.

Входные параметры

свернуть все

Входной массив, заданный как вектор, матрица, многомерный массив, таблица или timetable. Если A является таблицей или расписанием, тогда переменные должны быть числовыми, или вы должны использовать 'DataVariables' пара "имя-значение" для явного перечисления числовых переменных. Установка переменных полезна при работе с таблицей, которая также содержит нечисловые переменные.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | table | timetable

Поддержка комплексного числа: Да

Размерность для работы, заданная как положительный целочисленный скаляр Если значение не задано, то по умолчанию это первое измерение массива, не равный 1.

Рассмотрим матрицу A.

B = smoothdata(A,1) сглаживает данные в каждом столбце A.

B = smoothdata(A,2) сглаживает данные в каждой строке A.

Когда A является таблицей или расписанием, dim не поддерживается. smoothdata работает с каждой таблицей или переменной расписания отдельно.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Метод сглаживания, заданный как один из следующих:

  • 'movmean' - Скользящее среднее значение по каждому окну A. Этот метод полезен для сокращения периодических трендов в данных.

  • 'movmedian' - Перемещение медианы по каждому окну A. Этот метод полезен для уменьшения периодических трендов в данных, когда присутствуют выбросы.

  • 'gaussian' - взвешенное по Гауссу скользящее среднее значение для каждого окна A.

  • 'lowess' - Линейная регрессия на каждом окне A. Этот метод может быть вычислительно дорогим, но приводит к меньшему количеству разрывов.

  • 'loess' - Квадратичная регрессия на каждом окне A. Этот метод немного дороже в вычислительном отношении, чем 'lowess'.

  • 'rlowess' - Устойчивая линейная регрессия на каждом окне A. Этот метод является более в вычислительном отношении дорогостоящей версией метода 'lowess'но это более устойчиво к выбросам.

  • 'rloess' - Устойчивая квадратичная регрессия на каждом окне A. Этот метод является более в вычислительном отношении дорогостоящей версией метода 'loess'но это более устойчиво к выбросам.

  • 'sgolay' - фильтр Савицкого-Голея, который сглаживается согласно квадратичному полиному, который устанавливается над каждым окном A. Этот метод может быть более эффективным, чем другие методы, когда данные изменяются быстро.

Длина окна, заданная как положительный целочисленный скаляр, двухэлементный вектор положительных целых чисел, положительная длительность скаляра или двухэлементный вектор положительных длительностей.

Когда window является положительным целочисленным скаляром, затем окно центрируется вокруг текущего элемента и содержит window-1 соседние элементы. Если window является четным, тогда окно центрируется вокруг текущего и предыдущего элементов. Если window - двухэлементный вектор положительных целых чисел [b f], затем окно содержит текущий элемент, b элементы назад и f элементы вперед.

Когда A является расписанием или когда 'SamplePoints' задается как datetime или duration вектор, window должен иметь тип duration, и окно вычисляется относительно точек выборки.

Когда длина окна также задана как выходной аргумент, значение выхода совпадает со значением входа.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

NaN условие, заданное как одно из следующих значений:

  • 'omitnan' - Игнорировать NaN значений во входе. Если окно содержит все NaN значения, затем smoothdata возвращает NaN.

  • 'includenan' - Включить NaN значения при вычислении в каждом окне, что приводит к NaN.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: smoothdata(A,'SmoothingFactor',0.5)
Опции данных

свернуть все

Точки выборки, заданные как разделенная разделенными запятой парами, состоящая из 'SamplePoints' и вектор. Точки выборки представляют x местоположения данных в осях A, и должен быть отсортирован и содержать уникальные значения. Точки выборки не нужно равномерно отбирать. Вектор точек выборки по умолчанию [1 2 3 ...].

Примечание

Эта пара "имя-значение" не поддерживается, когда входные данные являются timetable. В Timetables всегда используется вектор времени строки в качестве точек выборки. Чтобы использовать различные точки выборки, необходимо отредактировать расписание так, чтобы время в строке содержало требуемые точки выборки.

Движущиеся окна заданы относительно точек выборки. Для примера, если t является вектором времени, соответствующим входным данным, затем smoothdata(rand(1,10),3,'SamplePoints',t) имеет окно, которое представляет временной интервал между t(i)-1.5 и t(i)+1.5.

Когда вектор точек выборки имеет тип данных datetime или duration, тогда длина окна должна иметь тип duration.

Пример: smoothdata(T,'SamplePoints',0:0.1:10)

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | datetime | duration

Табличные переменные для работы, заданные как разделенная разделенными запятой парами, состоящая из 'DataVariables' и один из опций в этой таблице. The 'DataVariables' значение указывает, какие переменные таблицы входа необходимо сглаживать. Другие переменные в таблице, не заданные 'DataVariables' пройти к выходу без работы.

ОпцияОписаниеПримеры
Имя переменной

Вектор символов или скалярная строка, задающая имя табличной переменной

'Var1'

"Var1"

Вектор имен переменных

Массив ячеек из векторов символов или строковых массивов, где каждый элемент является именем табличной переменной

{'Var1' 'Var2'}

["Var1" "Var2"]

Скаляр или вектор переменных индексов

Скаляр или вектор табличных переменных

1

[1 3 5]

Логический вектор

Логический вектор, элементы которого каждый соответствуют табличной переменной, где true включает соответствующую переменную и false исключает его

[true false true]

Указатель на функцию

Указатель на функцию, который принимает табличную переменную как вход и возвращает логический скаляр

@isnumeric

vartype индекс

Индекс таблицы, сгенерированный vartype функция

vartype('numeric')

Пример: smoothdata(T,'DataVariables',["Var1" "Var2" "Var4"])

Опции сглаживания

свернуть все

Коэффициент размера окна, заданный как разделенная разделенными запятой парами, состоящая из 'SmoothingFactor' и скаляр в диапазоне от 0 до 1. Как правило, значение 'SmoothingFactor' настраивает уровень сглаживания путем масштабирования эвристического размера окна. Значения около 0 дают меньшие длины движущихся окон, что приводит к меньшему сглаживанию. Значения около 1 создают большие длины движущихся окон, что приводит к большему сглаживанию. В некоторых случаях, в зависимости от входных данных, из которых определяется эвристический размер окна, значение 'SmoothingFactor' может не оказать существенного влияния на размер окна, используемого smoothdata.

'SmoothingFactor' является 0.25 по умолчанию и может быть задано только тогда, когда window не задан.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Степень Савицкого-Голая, заданная как разделенная запятыми пара, состоящая из 'Degree' и неотрицательное целое число. Эта пара "имя-значение" может быть задана только тогда, когда 'sgolay' - заданный метод сглаживания. Значение 'Degree' соответствует степени полинома в фильтре Савицкого-Голея, который подходит для данных внутри каждого окна, что по умолчанию равняется 2.

Значение 'Degree' должно быть меньше длины окна для равномерных точек выборки. Для неоднородных точек выборки значение должно быть меньше максимального число точек в любом окне.

Выходные аргументы

свернуть все

Выходной массив, возвращенный в виде вектора, матрицы, многомерного массива, таблицы или timetable. B - тот же размер, что и A.

Длина окна, возвращенная как положительный целочисленный скаляр, двухэлементный вектор положительных целых чисел, положительная длительность скаляра или двухэлементный вектор положительных длительностей.

Когда window задается как входной параметр, значение выхода соответствует входу значению. Когда window не задается как входной параметр, тогда его значение является скаляром эвристически определяемым smoothdata на основе входных данных.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

Алгоритмы

Когда размер окна для метода сглаживания не задан, smoothdata вычисляет размер окна по умолчанию на основе эвристики. Для коэффициента сглаживания, эвристический оценивает размер окна скользящего среднего, который ослабляет приблизительно 100 *, процентов энергии входных данных.

Расширенные возможности

.
Введенный в R2017a