Человек записал их вес в фунтах в течение високосного года 2012. Человек не записывал их вес каждый день, таким образом, данные неоднородны. Используйте приложение Signal Analyzer, чтобы предварительно обработать и изучить записанный вес. Приложение позволяет вам заполнить недостающие точки данных путем интерполяции сигнала к регулярной координатной сетке. (Эта процедура дает лучшие результаты, если сигнал имеет только маленькие разрывы.)
Загрузите данные и преобразуйте измерения в килограммы. Файлу данных установили недостающие показания на NaN
. Существует 27 пропавших без вести точек данных, большинство из них во время 2D недельного фрагмента в августе.
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 array
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®. Удалите недостающие точки. Удалите значение DC, чтобы сконцентрироваться на колебаниях. Преобразуйте информацию времени в массив 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 выберите Show Markers. Масштабируйте в недостающий фрагмент путем установки Ограничений по времени 200 и 250 дням.
Щелкните правой кнопкой по сигналу по таблице Signal и выберите Duplicate
. Переименуйте копию как Preprocessed
путем двойного клика по столбцу Имени в таблице Signal. Оставьте сигнал Preprocessed
выбранным. На вкладке Analyzer нажмите Preprocessing ▼ и выберите Resample. На вкладке Resample, которая появляется, введите частоту дискретизации 1 cycles/day
и выберите метод Shape Preserving Cubic
. Нажмите Resample. Наложите передискретизируемый сигнал на отображении путем установки флажка рядом с его именем.
Уменьшите масштаб, чтобы показать данные в течение целого года. На вкладке Spectrum, набор утечка к максимальному значению. Спектры исходных и передискретизируемых сигналов соглашаются хорошо для большинства частот. Спектр показывает два значимых peaks, один приблизительно в 0,14 циклах/день и другом в очень низких частотах. Чтобы определить местоположение peaks лучше, нажмите Data Cursors ▼ и выберите Two
. Установите курсоры на peaks. Наведите на поле частоты каждого курсора, чтобы получить более точное значение его местоположения.
Пик средней частоты в 0,142857 = 1/7 циклы/день, который соответствует однонедельному циклу.
Низкочастотный пик в 0,004762 циклах/день, который соответствует 210-дневному циклу.
Удалите курсоры путем нажатия на значок Data Cursor. Удалите исходный сигнал из отображения. Отфильтруйте сигнал Preprocessed
удалить эффекты циклов.
Чтобы удалить низкочастотный цикл, highpass-отфильтруйте сигнал. На вкладке Analyzer выберите Highpass. На вкладке Highpass, которая появляется, введите частоту полосы пропускания 0.05 cycles/day
. Используйте значения по умолчанию других параметров. Нажмите Highpass.
Удалить еженедельный цикл, заграждающий фильтр сигнал. На вкладке Analyzer нажмите Preprocessing ▼ и выберите Bandstop. На вкладке Bandstop, которая заменяет вкладку Highpass, введите более низкую частоту полосы пропускания 0.135 cycles/day
и более высокую частоту полосы пропускания 0.15 cycles/day
. Используйте значения по умолчанию других параметров. Нажмите Bandstop.
Предварительно обработанный сигнал показывает меньше колебания, чем оригинал. Форма сигнала предполагает, что вес человека отличается меньше в летних месяцах, чем зимой, но это может быть артефактом передискретизации. Кликните по значку на Информационном столбце в записи таблицы Сигнала для сигнала 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