Повторный отбор и фильтрация неоднородно дискретизированного сигнала

Человек зафиксировал их вес в фунтах в течение високосного 2012 года. Человек не записывал свой вес каждый день, поэтому данные неоднородны. Используйте приложение Signal Analyzer, чтобы предварительно обработать и изучить зарегистрированный вес. Приложение позволяет вам заполнить отсутствующие точки данных путем интерполяции сигнала в однородную сетку. (Эта процедура дает лучшие результаты, если сигнал имеет только небольшие погрешности.)

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

wt = datetime(2012,1,1:366)';

load weight2012.dat
wgt = weight2012(:,2)/2.20462;

validpoints = ~isnan(wgt);
missing = wt(~validpoints);
missing(15:26)
ans = 12x1 datetime
   09-Aug-2012
   10-Aug-2012
   11-Aug-2012
   12-Aug-2012
   15-Aug-2012
   16-Aug-2012
   17-Aug-2012
   18-Aug-2012
   19-Aug-2012
   20-Aug-2012
   22-Aug-2012
   23-Aug-2012

Сохраните данные в расписании MATLAB ®. Удалите отсутствующие точки. Удалите значение постоянного тока, чтобы сконцентрироваться на колебаниях. Преобразуйте информацию о времени в duration массив путем вычитания первой временной точки. Для получения дополнительной информации смотрите Типы данных, поддерживаемые Signal Analyzer.

wgt = wgt(validpoints);
wgt = wgt - mean(wgt);

wt = wt(validpoints);
wt = wt - wt(1);

wg = timetable(wt,wgt);

Откройте Signal Analyzer и перетащите расписание на отображение. На вкладке Display нажмите Spectrum, чтобы открыть представление спектра. На вкладке Time выберите Показ Маркеров. Масштабирование отсутствующего участка путем установки пределов времени 200 и 250 дней.

Щелкните правой кнопкой мыши сигнал в таблице Signal и выберите Duplicate. Переименуйте копию как Preprocessed двойным щелчком по столбцу Имени в таблице Signal. Выйдите из Preprocessed выбран сигнал. На вкладке Analyzer нажмите Preprocessing ▼ и выберите Resample. На появившейся вкладке Resample введите частоту дискретизации 1 cycles/day и выберите Shape Preserving Cubic способ. Нажмите Resample. Наложите повторно дискретизированный сигнал на отображение, установив флажок рядом с его именем.

Масштабирование, чтобы отобразить данные за весь год. На вкладке « Спектре» установите максимальное значение утечки. Спектры исходных и повторно дискретизированных сигналов хорошо согласуются для большинства частот. Спектр показывает два заметных peaks, один с частотой около 0,14 оборотов в день и другой с очень низкими частотами. Чтобы лучше определить местоположение peaks, нажмите Data Cursors ▼ и выберите Two. Поместите курсоры на peaks. Наведите на поле частоты каждого курсора, чтобы получить более точное значение его местоположения.

  • Пик средней частоты находится в 0,142857 = 1/7 циклов/день, что соответствует недельному циклу.

  • Низкочастотный пик находится в 0,004762 циклов/день, что соответствует 210-дневному циклу.

Удалите курсоры, щелкнув значок «Курсоры данных». Удалите исходный сигнал с отображения. Фильтрация Preprocessed сигнал для удаления эффектов циклов.

  1. Чтобы удалить низкочастотный цикл, высокочастотная фильтрация сигнала. На вкладке Analyzer выберите Highpass. На появившейся вкладке Highpass введите частоту полосы пропускания 0.05 cycles/day. Используйте значения по умолчанию других параметров. Нажмите Highpass.

  2. Чтобы удалить недельный цикл, полосно-заглушите сигнал. На вкладке Analyzer нажмите Preprocessing ▼ и выберите Bandstop. На вкладке Bandstop, которая заменяет вкладку Highpass, введите более низкую частоту полосы пропускания 0.135 cycles/day и более высокая ширина полосы пропускания 0.15 cycles/day. Используйте значения по умолчанию других параметров. Нажмите кнопку Bandstop.

Предварительно обработанный сигнал показывает меньше колебаний, чем исходный. Форма сигнала предполагает, что вес человека изменяется меньше в летние месяцы, чем зимой, но это может быть программным продуктом повторной дискретизации. Щелкните значок в столбце Информация (Info) в записи таблицы Сигнал (Signal) для Preprocessed сигнал для просмотра выполненных на нем шагов предварительной обработки.

Чтобы просмотреть полные сводные данные шагов предварительной обработки, включая все выбранные настройки, щелкните Сгенерировать функцию (Generate Function) на вкладке Анализатор (Analyzer). Сгенерированная функция появится в редакторе MATLAB ®.

function [y,ty] = preprocess(x,tx)
%  Preprocess input x
%    This function expects an input vector x and a vector of time values
%    tx. tx is a numeric vector in units of seconds.
%    Follow the timetable documentation (type 'doc timetable' in
%    command line) to learn how to index into a table variable and its time
%    values so that you can pass them into this function.

% Generated by MATLAB(R) 9.5 and Signal Processing Toolbox 8.1.
% Generated on: 08-Jun-2018 14:35:38

targetSampleRate = 1.1574074074074073e-05;
[y,ty] = resample(x,tx,targetSampleRate,'pchip');
Fs = 1/mean(diff(ty)); % Average sample rate
y = highpass(y,5.787e-07,Fs,'Steepness',0.85,'StopbandAttenuation',60);
y = bandstop(y,[1.5625e-06 1.73611111111111e-06],Fs,'Steepness',0.85,'StopbandAttenuation',60);
end

См. также

Приложения

Функции

Похожие примеры

Подробнее о