smoothdata

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

Синтаксис

B = smoothdata(A)
B = smoothdata(A,dim)
B = smoothdata(___,method)
B = smoothdata(___,method,window)
B = smoothdata(___,nanflag)
B = smoothdata(___,Name,Value)
[B,window] = 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')

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

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,:))

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

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')

Создайте шумный вектор, содержащий стоимость 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')

Создайте вектор шумных данных, которые соответствуют временному вектору 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')

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

свернуть все

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

Пример: smoothdata(A,'SmoothingFactor',0.5)

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

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

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

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

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

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

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

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

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

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

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

  • Вектор индексов табличной переменной

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

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

Пример: 'Age'

Пример: {'Height','Weight'}

Пример: @isnumeric

Типы данных: char | cell | double | single | logical | function_handle

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

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

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

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

свернуть все

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

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

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

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

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

Алгоритмы

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

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

Введенный в R2017a

Для просмотра документации необходимо авторизоваться на сайте