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.

Detecte la periodicidad en una señal con muestras faltantes

Considere el peso de una persona como registrado (en libras) durante el año bisiesto 2012. La persona no graba su peso todos los días. Le gustaría estudiar la periodicidad de la señal, aunque faltan algunos puntos de datos.

Cargue los datos y convierta las mediciones en kilogramos. Las lecturas perdidas están establecidas.NaN Determine cuántos puntos faltan.

load(fullfile(matlabroot,'examples','signal','weight2012.dat'))  wgt = weight2012(:,2)/2.20462;  fprintf('Missing %d samples of %d\n',sum(isnan(wgt)),length(wgt))
Missing 27 samples of 366 

Determine si la señal es periódica analizándola en el dominio de frecuencia. El algoritmo Lomb-Scargle está diseñado para manejar datos con muestras faltantes o datos que han sido muestreados irregularmente.

Encuentra las duraciones del ciclo, midiendo el tiempo en semanas.

[p,f] = plomb(wgt,7,'normalized');  plot(f,p) xlabel('Frequency (week^{-1})')

Observe cómo el peso de la persona oscila semanalmente. ¿Hay un patrón notable de una semana a la semana? Elimina los dos últimos días del año para obtener 52 semanas. Reordenar 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';

Suavizar las fluctuaciones utilizando un filtro que se ajuste a polinomios de orden bajo a subconjuntos de los datos. En concreto, establezca que se ajuste a polinomios cúbicos a conjuntos de siete días.

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

Esta persona tiende a comer más, y por lo tanto pesan más, durante el fin de semana. Verifique calculando los medios diarios. Excluya los valores faltantes del cálculo.

for jk = 1:7     wgm = find(~isnan(wgd(:,jk)));     fprintf('%3s mean: %5.1f kg\n', ...         datestr(datenum(2012,1,jk),'ddd')',mean(wgd(wgm,jk))) end
Sun mean:  76.3 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