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.

Procese 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, pero antes de hacerlo, debe ocuparse de los datos que faltan.

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; 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 la interpolación lineal.resample Graficar las lecturas originales e interpoladas. Amplíe los días 200 a 250, que contienen aproximadamente la mitad de los puntos faltantes.

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. Encuentra la duración del ciclo, midiendo el tiempo en semanas. Reste 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 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'; grid

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('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 pesan 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