Объекты системы статистики перемещения измеряют статистику потоковых сигналов в MATLAB ®. Можно также использовать такие функции, какmovmean, movmedian, movstd, и movvar для измерения статистики перемещения. Эти функции более подходят для одноразовых вычислений данных, доступных в пакете. В отличие от системных объектов, функции не предназначены для обработки больших потоков данных.
В этом примере показано, как вычислить скользящее среднее сигнала с помощью movmean функция.
movmean функция вычисляет 10-точечное скользящее среднее шумных данных, поступающих от акселерометра. Три столбца в этих данных представляют линейное ускорение акселерометра в осях X, Y и Z соответственно. Все данные доступны в файле MAT. Постройте график скользящего среднего для данных по оси X.
winLen = 10; accel = load('LSM9DS1accelData73.mat'); movAvg = movmean(accel.data,winLen,'Endpoints','fill'); plot([accel.data(:,1),movAvg(:,1)]); legend('Input','Moving average along X data');

Данные не очень большие (7140 образцов в каждом столбце) и полностью доступны для обработки. movmean функция предназначена для обработки таких разовых вычислений. Однако если данные очень большие, например, в порядке ГБ, или если данные представляют собой прямой поток, который должен обрабатываться в реальном времени, то используйте системные объекты. Объекты System делят данные на сегменты, называемые кадрами, и обрабатывают каждый кадр в цикле итерации. Этот подход эффективен для памяти, поскольку в любой момент времени обрабатывается только один кадр данных. Кроме того, системные объекты оптимизированы для внутренней обработки состояний.
Создать dsp.MovingAverage Системный объект для вычисления 10-точечного скользящего среднего потокового сигнала. Использовать dsp.MatFileReader Системный объект для считывания данных из MAT-файла акселерометра. Просмотр выходных данных скользящего среднего в области времени.
Системные объекты автоматически индексируют данные в кадры. Выберите размер кадра 714 выборок. В каждом столбце файла MAT имеется 7140 выборок или 10 кадров данных. Каждый цикл итерации вычисляет скользящее среднее 1 кадр данных.
frameSize = 714; reader = dsp.MatFileReader('SamplesPerFrame',frameSize,... 'Filename','LSM9DS1accelData73.mat','VariableName','data'); movAvg = dsp.MovingAverage(10); scope = timescope('NumInputPorts',2,'SampleRate',119,... 'YLimits',[-2500 2500],... 'TimeSpanSource','property','TimeSpan',60,... 'ChannelNames',{'Input','Moving Average along X data'},... 'ShowLegend',true); while ~isDone(reader) accel = reader(); avgData = movAvg(accel); scope(accel(:,1),avgData(:,1)); end

Цикл обработки очень прост. Системные объекты обрабатывают индексирование данных и состояния автоматически.