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') использует фильтр Savitzky-Golay, чтобы сглаживать данные в 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 isnan.

C = smoothdata(A,'includenan');

Отобразите сглаживавшие данные на графике в B и C.

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

Figure contains an axes object. The axes object 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 object. The axes object contains 2 objects of type line. These objects represent Original Data, Smoothed Data.

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

свернуть все

Входной массив в виде вектора, матрицы, многомерного массива, таблицы или расписания. Если 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' — Фильтр Savitzky-Golay, который сглаживает согласно квадратичному полиному, который адаптирован по каждому окну 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 имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

свернуть все

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

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

Опция для табличного входаОписаниеПримеры
Имя переменной

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

'Var1'

"Var1"

Скалярный переменный индекс

Скалярный индекс табличной переменной

3

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

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

[true false false]

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

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

@isnumeric

vartype индекс

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

vartype('numeric')

Примечание

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

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

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

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

Пример: smoothdata(T,'SamplePoints',"Var1")

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

Табличные переменные, чтобы работать с в виде разделенной запятой пары, состоящей из 'DataVariables' и одна из опций в этой таблице. '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

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

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

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

свернуть все

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

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

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

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

Алгоритмы

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

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

Введенный в R2017a