dsp.MovingAverage

Скользящее среднее значение

Описание

The dsp.MovingAverage Система object™ вычисляет скользящее среднее значение входного сигнала вдоль каждого канала, независимо с течением времени. Объект использует метод скользящего окна или экспоненциальный метод взвешивания, чтобы вычислить скользящее среднее значение. В методе раздвижного окна окно заданной длины перемещается по данным, выборке по выборке, и среднее значение вычисляется по данным в окне. В экспоненциальном методе взвешивания объект умножает выборки данных на набор весовых коэффициентов. Расчет среднего значения осуществляется путем суммирования взвешенных данных. Для получения дополнительной информации об этих методах см. «Алгоритмы».

Чтобы вычислить скользящее среднее значение значения входа:

  1. Создайте dsp.MovingAverage Объекту и установите его свойства.

  2. Вызывайте объект с аргументами, как будто это функция.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

movAvg = dsp.MovingAverage возвращает объект скользящего среднего, movAvg, с использованием свойств по умолчанию.

movAvg = dsp.MovingAverage(Len) устанавливает WindowLength свойство к Len.

пример

movAvg = dsp.MovingAverage(Name,Value) задает дополнительные свойства, используя Name,Value пар. Неопределенные свойства имеют значения по умолчанию.

Пример: movAvg = dsp.MovingAverage('Method','Exponential weighting','ForgettingFactor',0.9);

Свойства

расширить все

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

Если свойство настраивается, можно изменить его значение в любой момент.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

Метод усреднения, заданный как 'Sliding window' или 'Exponential weighting'.

  • 'Sliding window' - Окно длины, заданное как SpecifyWindowLength перемещается по входным данным вдоль каждого канала. Для каждой выборки, по которой перемещается окно, объект вычисляет среднее значение по данным в окне.

  • 'Exponential weighting' - Объект умножает выборки на набор весовых коэффициентов. Величина весовых коэффициентов уменьшается экспоненциально, когда возраст данных увеличивается, никогда не достигая нуля. Чтобы вычислить среднее значение, алгоритм суммирует взвешенные данные.

Для получения дополнительной информации об этих методах см. «Алгоритмы».

Флаг для задания длины окна в виде скаляра логического значения.

  • true - Длина скользящего окна равна значению, заданному в WindowLength свойство.

  • false - Длина раздвижного окна бесконечна. В этом режиме среднее значение вычисляется с помощью текущей выборки и всех прошлых выборок.

Зависимости

Это свойство применяется при установке Method на 'Sliding window'.

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

Зависимости

Это свойство применяется при установке Method на 'Sliding window' и SpecifyWindowLength на true.

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

Экспоненциальный весовой коэффициент, заданный как положительный действительный скаляр в области значений (0,1]. Коэффициент забывания 0,9 дает больший вес старшим данным, чем коэффициент забывания 0,1. Коэффициент забывания 1,0 указывает на бесконечную память. Всем прошлым выборкам придают одинаковый вес.

Поскольку это свойство настраивается, можно изменить его значение, даже когда объект заблокирован.

Настраиваемый: Да

Зависимости

Это свойство применяется при установке Method на 'Exponential weighting'.

Типы данных: single | double

Использование

Синтаксис

Описание

пример

y = movAvg(x) вычисляет скользящее среднее значение входного сигнала, x, с использованием метода скользящего окна или экспоненциального взвешивания.

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

расширить все

Вход данных, заданный как вектор или матрица. Если x является матрицей, каждый столбец рассматривается как независимый канал. Скользящее среднее значение вычисляется вдоль каждого канала. Объект также принимает входы переменного размера. Когда объект заблокирован, можно изменить размер каждого входного канала, но вы не можете изменить количество каналов.

Типы данных: single | double
Поддержка комплексного числа: Да

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

расширить все

Скользящее среднее значение входного сигнала, возвращаемое как вектор или матрица.

Типы данных: single | double
Поддержка комплексного числа: Да

Функции объекта

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:

release(obj)

расширить все

stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

Вычислите скользящее среднее значение зашумленного сигнала наклона с помощью dsp.MovingAverage объект.

Инициализация

Настройка movavgWindow и movavgExp объекты. movavgWindow использует метод раздвижного окна с длиной окна 10. movavgExp использует метод экспоненциального взвешивания с коэффициентом забывания 0,9. Создайте временные возможности для просмотра выхода.

FrameLength = 1001;
Fs = 1000;
movavgWindow = dsp.MovingAverage(10);
movavgExp = dsp.MovingAverage('Method','Exponential weighting',...
    'ForgettingFactor',0.9);
scope  = timescope('SampleRate',Fs,...
    'TimeSpanOverrunAction','Scroll',...
    'ShowGrid',true,...
    'YLimits',[-0.5 1.5]);
title = 'Sliding Window Average(blue) and Exponentially Weighted Average(red)';
scope.Title = title;

Вычислите среднее значение

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

for i = 1:500
    t = (0:0.001:1)';
    unitstep = t>=0;
    ramp = t.*unitstep;
    x = ramp + 0.1 * randn(FrameLength,1);
    y1 = movavgWindow(x);
    y2 = movavgExp(x);
    scope([x,y1,y2]);
end

Алгоритмы

расширить все

Ссылки

[1] Боденем, Дин. «Адаптивная фильтрация и обнаружение изменений для потоковых данных». PH.D. Дипломная работа. Имперский колледж, Лондон, 2012.

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

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