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.

Detectar la periodicidad en 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, aunque faltan algunos puntos de datos.

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;  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 se han muestreado irregularmente.

Encontrar las duraciones del ciclo, medir 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 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';

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('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 pesa más, durante el fin de semana. Verifique calculando los medios diarios. Excluya los valores que faltan 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