exponenta event banner

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.

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

свернуть все

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

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

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

свернуть все

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

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

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

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

Алгоритмы

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

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

.
Представлен в R2017a