Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Procesar una señal con muestras que faltan

Considere el peso de una persona como se registró (en libras) durante el año bisiesto 2012. La persona no registraba su peso todos los días. Le gustaría estudiar la periodicidad de la señal, pero antes de poder hacerlo debe cuidar de los datos que faltan.

Cargue los datos y convierta las medidas en kilogramos. Las lecturas perdidas se establecen en .NaN Determine cuántos puntos faltan.

load(fullfile(matlabroot,'examples','signal','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 

Asigne valores a los puntos que faltan utilizando .resample De forma predeterminada, realiza estimaciones mediante interpolación lineal.resample Trazar las lecturas originales e interpoladas. Amplíe los días 200 a 250, que contienen aproximadamente la mitad de los puntos que faltan.

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

Determine si la señal es periódica analizándola en el dominio de frecuencia. Encontrar la duración del ciclo, midiendo el tiempo en semanas. Restar la media para concentrarse en las fluctuaciones.

Fs = 7;  [p,f] = pwelch(wgt-mean(wgt),[],[],[],Fs);  plot(f,p) xlabel('Frequency (week^{-1})') grid

Observe cómo el peso de la persona oscila semanalmente. ¿Hay un patrón notable de una semana a otra? Elimine los últimos dos días del año para obtener 52 semanas. Reordene las mediciones según el día de la semana.

wgd = reshape(wgt(1:7*52),[7 52]);  plot(wgd') xlabel('Week') ylabel('Weight (kg)')  q = legend(datestr(datenum(2012,1,1:7),'dddd')); q.Location = 'NorthWest'; grid

Suaviza las fluctuaciones con un filtro que ajuste los polinomios de orden bajo a subconjuntos de los datos. Específicamente, establézcalo para que se ajuste a los polinomios cúbicos en conjuntos de siete días.

wgs = sgolayfilt(wgd',3,7);  plot(wgs) xlabel('Week') ylabel('Weight (kg)') title('Smoothed Weight Fluctuations')  q = legend(datestr(datenum(2012,1,1:7),'dddd')); q.Location = 'SouthEast'; grid

Esta persona tiende a comer más, y por lo tanto pesa más, durante el fin de semana. Verifique calculando los medios diarios.

for jk = 1:7     fprintf('%3s mean: %5.1f kg\n', ...         datestr(datenum(2012,1,jk),'ddd')',mean(wgd(jk,:))) end
Sun mean:  76.2 kg Mon mean:  75.7 kg Tue mean:  75.2 kg Wed mean:  74.9 kg Thu mean:  75.1 kg Fri mean:  75.3 kg Sat mean:  75.8 kg 

Consulte también

|

Temas relacionados