exponenta event banner

Обработка сигнала с отсутствующими образцами

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

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

load('weight2012.dat')

wgt = weight2012(:,2)/2.20462;
daynum = 1:length(wgt);
missing = isnan(wgt);

fprintf('Missing %d samples of %d\n',sum(missing),max(daynum))
Missing 27 samples of 366

Назначение значений отсутствующим точкам с помощью resample. По умолчанию resample получение оценок с использованием линейной интерполяции. Постройте график исходных и интерполированных показаний. Увеличьте изображение дней с 200 по 250, которые содержат около половины недостающих точек.

wgt_orig = wgt;
wgt = resample(wgt,daynum);

plot(daynum,wgt_orig,'.-',daynum,wgt,'o')
xlabel('Day')
ylabel('Weight (kg)')
axis([200 250 73 77])
legend('Original','Interpolated')
grid

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Interpolated.

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

Fs = 7;

[p,f] = pwelch(wgt-mean(wgt),[],[],[],Fs);

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

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')
grid

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('Weight (kg)')
title('Smoothed Weight Fluctuations')

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

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

Этот человек имеет тенденцию есть больше, и, таким образом, весить больше, в выходные. Проверьте, рассчитав ежедневные средства.

for jk = 1:7
    fprintf('%s mean: %5.1f kg\n',dweek(jk),mean(wgd(jk,:)))
end
Sunday mean:  76.2 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

См. также

|

Связанные темы