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.

Reconstrucción de datos faltantes

En este ejemplo se muestra cómo reconstruir los datos que faltan mediante la interpolación, el filtrado de suavizado y el modelado autorregresivo.

Introducción

Con la llegada de hardware de adquisición de datos baratos, a menudo tiene acceso a las señales que se muestrean rápidamente a intervalos regulares. Esto le permite obtener una aproximación fina a la señal subyacente. Pero, ¿qué sucede cuando los datos que está midiendo se muestrean de forma gruesa o faltan porciones significativas? ¿Cómo se infieren los valores de las señales en puntos entre las muestras que usted conoce?

Interpolación lineal

La interpolación lineal es, con diferencia, el método más común para deducir valores entre los puntos muestreados. De forma predeterminada, cuando se traza un vector en MATLAB, se ven los puntos conectados por líneas rectas. Usted necesita muestrear una señal con detalle muy fino para aproximar la señal verdadera.

En este ejemplo, se muestrea una sinusoide con resolución fina y gruesa. Cuando se traza en un gráfico, la sinusoide finamente muestreada se asemeja muy estrechamente a lo que la verdadera sinusoide continua se vería como. Por lo tanto, se puede utilizar como un modelo de la "señal verdadera." En la siguiente gráfica, las muestras de una señal muestreada de forma gruesa se muestran como círculos conectados por líneas rectas.

tTrueSignal = 0:0.01:20; xTrueSignal = sin(2*pi*2*tTrueSignal/7);  tSampled = 0:20; xSampled = sin(2*pi*2*tSampled/7);  plot(tTrueSignal,xTrueSignal,'-', ...     tSampled,xSampled,'o-') legend('true signal','samples')

Es sencillo recuperar muestras intermedias de la misma manera que realiza la interpolación.plot Esto se puede lograr con el método lineal de la función.interp1

tResampled = 0:0.1:20; xLinear = interp1(tSampled,xSampled,tResampled,'linear'); plot(tTrueSignal,xTrueSignal,'-', ...      tSampled, xSampled, 'o-', ...      tResampled,xLinear,'.-') legend('true signal','samples','interp1 (linear)')

El problema con la interpolación lineal es que el resultado no es muy suave. Otros métodos de interpolación pueden producir aproximaciones más suaves.

Interpolación spline

Muchas señales físicas son como las sinusoides en que son continuas y tienen derivados continuos. Puede reconstruir dichas señales utilizando la interpolación spline cúbica, lo que garantiza que el primer y segundo derivados de la señal interpolada sean continuos en cada punto de datos:

xSpline = interp1(tSampled,xSampled,tResampled,'spline'); plot(tTrueSignal,xTrueSignal,'-', ...      tSampled, xSampled,'o', ...      tResampled,xLinear,'.-', ...      tResampled,xSpline,'.-') legend('true signal','samples','interp1 (linear)','interp1 (spline)')

Las splines cúbicas son particularmente efectivas cuando se interpolan señales que constan de sinusoides. Sin embargo, hay otras técnicas que se pueden utilizar para obtener una mayor fidelidad a las señales físicas que tienen derivados continuos hasta un orden muy alto.

Remuestreo con filtros antialiasing

La función en la caja de herramientas de procesamiento de señal proporciona otra técnica para rellenar los datos que faltan. puede reconstruir componentes sinusoidales de baja frecuencia con muy baja distorsión.resampleresample

xResample = resample(xSampled, 10, 1); tResample = 0.1*((1:numel(xResample))-1);  plot(tTrueSignal,xTrueSignal,'-', ...      tResampled,xSpline, '.', ...      tResample, xResample,'.') legend('true signal','interp1 (spline)','resample')

Al igual que los otros métodos, tiene alguna dificultad para reconstruir los puntos finales.resample Por otro lado, la parte central de la señal reconstruida concuerda muy bien con la señal verdadera.

xlim([6 10])

Remuestreo con muestras faltantes

puede acomodar señales muestreadas de manera no uniforme.resample La técnica funciona mejor cuando la señal se muestrea a una velocidad alta.

En el siguiente ejemplo, creamos una sinusoide en movimiento lento, eliminamos una muestra y nos alejamos en las proximidades de la muestra que falta.

tTrueSignal = 0:.1:20; xTrueSignal = sin(2*pi*2*tTrueSignal/15);  Tx = 0:20;  Tmissing = Tx(10); Tx(10) = [];  x = sin(2*pi*2*Tx/15); Xmissing = sin(2*pi*2*Tmissing/15);  [y, Ty] = resample(x,Tx,10,'spline');  plot(tTrueSignal, xTrueSignal, '-', ...      Tmissing,Xmissing,'x ', ...      Tx,x,'o ', ...      Ty,y,'. ') legend('true signal','missing sample','remaining samples','resample with ''spline''') ylim([-1.2 1.2]) xlim([6 14])

La sinusoide reconstruida rastrea la forma de la señal verdadera razonablemente bien, con sólo un leve error en las proximidades de la muestra que falta.

Sin embargo, no funciona bien cuando hay una gran brecha en la señal.resample Por ejemplo, considere una sinusoide humedecida cuya porción media falte:

tTrueSignal = (0:199)/199; xTrueSignal = exp(-0.5*tTrueSignal).*sin(2*pi*5*tTrueSignal);  tMissing = tTrueSignal; xMissing = xTrueSignal; tMissing(50:140) = []; xMissing(50:140) = [];  [y,Ty] = resample(xMissing, tMissing, 200, 'spline');  plot(tTrueSignal,xTrueSignal,'-', ...      tMissing,xMissing,'o',...      Ty,y,'.') legend('true signal','samples','resample with ''spline''')

Aquí se asegura de que la señal reconstruida es continua y tiene derivados continuos en las proximidades de los puntos faltantes.resample Sin embargo, no puede reconstruir adecuadamente la porción que falta.

Reconstrucción de grandes lagunas

Como se puede ver anteriormente, el filtrado y la interpolación cúbica por sí solos podrían no ser suficientes para lidiar con grandes brechas. Sin embargo, con ciertos tipos de señales muestreadas, como las que surgen al observar fenómenos oscilantes, a menudo se pueden deducir los valores de las muestras faltantes basándose en los datos inmediatamente anteriores o posteriores a la brecha.

La función puede sustituir las muestras que faltan (especificadas por) en una señal muestreada uniformemente mediante el ajuste de un modelo autorregresivo a las muestras que rodean un hueco y extrapolando en la brecha desde ambas direcciones.fillgapsNaN

tTrueSignal = (0:199)/199; xTrueSignal = exp(-.5*tTrueSignal).*sin(2*pi*5*tTrueSignal); gapSignal = xTrueSignal; gapSignal(50:140) = NaN; y = fillgaps(gapSignal);  plot(tTrueSignal,xTrueSignal,'-', ...      tTrueSignal,gapSignal,'o', ...      tTrueSignal,y,'.')  legend('true signal','samples','reconstructed signal')

La técnica funciona porque las señales autorregresivas tienen información que se extiende sobre muchas muestras. Sólo unas cuantas muestras dentro de cualquier segmento son necesarias para reconstruir completamente la señal completa.

Este tipo de reconstrucción se puede adaptar para estimar las muestras faltantes de señales más complicadas. Considere una señal de audio muestreada de una cuerda de guitarra pulsada después de retirar 600 muestras inmediatamente después del Pluck:

[y,fs] = audioread('guitartune.wav'); x = y(1:3500); x(2000:2600) = NaN; y2 = fillgaps(x); plot(1:3500, y(1:3500), '-', ...      1:3500, x, '.', ...      1:3500, y2, '-') legend('original signal','samples','reconstructed signal',...        'Location','best')

Reconstrucción de huecos con estimación localizada

Es bastante sencillo llenar los datos dentro de un hueco cuando se sabe que la señal en las proximidades de la brecha se puede modelar con un único proceso autorregresivo. Puede mitigar los problemas cuando una señal consiste en un proceso autorregresivo no constante restringiendo el área sobre la que se calculan los parámetros del modelo. Esto es útil cuando usted está tratando de llenar un hueco dentro del período de "zumbido" de una resonancia que viene inmediatamente antes o después de otra, más fuerte, resonancia.

x = y(350001:370000); x(6000:6950) = NaN; y2 = fillgaps(x); y3 = fillgaps(x,1500); plot(1:20000, y(350001:370000), '-', ...      1:20000, x, '.', ...      1:20000, y2, '-', ...      1:20000, y3, '-') xlim([2200 10200]) legend('original signal','samples','fillgaps (all)','fillgaps (localized)',...        'Location','best')

En la trama anterior, la forma de onda carece de una sección justo antes de una gran resonancia. Como antes, se utiliza para extrapolar en la región de brecha utilizando todos los datos disponibles.fillgaps Una segunda llamada para utilizar sólo 1500 muestras a cada lado de la brecha para realizar el modelado.fillgaps Esto mitiga el efecto del posterior desplume de la guitarra después de la muestra 7500.

Resumen

Ha visto varias formas de reconstruir los datos que faltan de los valores de muestra adyacentes mediante la interpolación, el remuestreo y el modelado autorregresivo.

Trabajo de interpolación y remuestreo para señales que varían lentamente. El remuestreo con filtros de suavizado de contorno a menudo hace un mejor trabajo en la reconstrucción de señales que consisten en componentes de baja frecuencia. Para reconstruir grandes huecos en las señales oscilantes, el modelado autorregresivo en las proximidades de la brecha puede ser particularmente eficaz.

Leer más

Para obtener más información sobre el remuestreo uniforme y no uniforme, consulte