Обнаружьте периодичность в сигнале с Недостающими выборками

Рассмотрите вес человека, как зарегистрировано (в фунтах) в течение високосного года 2012. Человек не записывал их вес каждый день. Требуется изучить периодичность сигнала, даже при том, что некоторые точки данных отсутствуют.

Загрузите данные и преобразуйте измерения в килограммы. Пропущенные показания установлены в NaN. Определите, сколько сути упускает.

load('weight2012.dat')

wgt = weight2012(:,2)/2.20462;

fprintf('Missing %d samples of %d\n',sum(isnan(wgt)),length(wgt))
Missing 27 samples of 366

Определите, является ли сигнал периодическим путем анализа его в частотном диапазоне. Алгоритм Lomb-Scargle спроектирован, чтобы обработать данные с недостающими выборками или данные, которые были произведены нерегулярно.

Найдите длительности цикла, измерив время в неделях.

[p,f] = plomb(wgt,7,'normalized');

plot(f,p)
xlabel('Frequency (week^{-1})')

Figure contains an axes. The axes contains an object of type line.

Заметьте, как вес человека колеблется еженедельно. Из недели в неделю существует ли значимый шаблон? Устраните прошлые два дня года, чтобы получить 52 недели. Переупорядочьте измерения согласно дню недели.

wgd = reshape(wgt(1:7*52),[7 52])';

plot(wgd)
xlabel('Week')
ylabel('Weight (kg)')

dweek = datetime([repmat([2012 1],7,1) (1:7)'],'Format','eeee');

legend(string(dweek),'Location','northwest')

Figure contains an axes. The axes contains 7 objects of type line. These objects represent Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday.

Сгладьте колебания с помощью фильтра, который соответствует полиномам младшего разряда к подмножествам данных. А именно, установите его соответствовать кубическим полиномам к наборам семи дней.

wgs = sgolayfilt(wgd,3,7);

plot(wgs)
xlabel('Week')
ylabel('Smoothed weight (kg)')

legend(string(dweek),'Location','southeast')

Figure contains an axes. The axes contains 7 objects of type line. These objects represent Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday.

Этот человек склонен есть больше, и таким образом весить больше, в течение выходных. Проверьте путем вычисления среднесуточных значений. Исключите отсутствующие значения из вычисления.

for jk = 1:7
    wgm = find(~isnan(wgd(:,jk)));
    fprintf('%s mean: %5.1f kg\n',dweek(jk),mean(wgd(wgm,jk)))
end
Sunday mean:  76.3 kg
Monday mean:  75.7 kg
Tuesday mean:  75.2 kg
Wednesday mean:  74.9 kg
Thursday mean:  75.1 kg
Friday mean:  75.3 kg
Saturday mean:  75.8 kg

Смотрите также

| |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте