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.

La predicción lineal y el modelado autorregresivo

Este ejemplo muestra cómo comparar la relación entre el modelado autorregresivo y la predicción lineal. La predicción lineal y el modelado autorregresivo son dos problemas diferentes que pueden producir los mismos resultados numéricos. En ambos casos, el objetivo final es determinar los parámetros de un filtro lineal. Sin embargo, el filtro utilizado en cada problema es diferente.

Introducción

En el caso de la predicción lineal, la intención es determinar un filtro FIR que pueda predecir óptimamente muestras futuras de un proceso autorregresivo basado en una combinación lineal de muestras pasadas. La diferencia entre la señal autorregresiva real y la señal pronosticada se denomina error de predicción. Idealmente, este error es ruido blanco.

Para el caso del modelado autorregresivo, la intención es determinar un filtro IIR de todo Polo, que cuando se excita con ruido blanco produce una señal con las mismas estadísticas que el proceso autorregresivo que estamos tratando de modelar.

Genere una señal AR utilizando un filtro de todo Polo con ruido blanco como entrada

Aquí utilizamos la función LPC y un filtro FIR simplemente para llegar a parámetros que usaremos para crear la señal autorregresiva con la que trabajaremos. El uso de FIR1 y LPC no son críticos aquí. Por ejemplo, podríamos reemplazar d con algo tan simple como [1 1/2 1/3 1/4 1/5 1/6 1/7 1/8] y P0 con algo así como 1E-6. Pero la forma de este filtro es mejor, así que lo usamos en su lugar.

b = fir1(1024, .5); [d,p0] = lpc(b,7);

Para generar la señal autorregresiva, vamos a excitar un filtro de todo Polo con ruido Gaussiano blanco de varianza P0. Tenga en cuenta que para obtener la varianza P0, debemos utilizar SQRT (P0) como el término ' ganancia ' en el generador de ruido.

rng(0,'twister'); % Allow reproduction of exact experiment u = sqrt(p0)*randn(8192,1); % White gaussian noise with variance p0

Ahora usamos la señal de ruido Gaussiano blanco y el filtro All-pole para generar una señal AR.

x = filter(1,d,u);

Encuentre el modelo AR de Signal usando el método Yule-Walker

Resolviendo las ecuaciones Yule-Walker, podemos determinar los parámetros para un filtro All-pole que cuando está emocionado con el ruido blanco producirá una señal AR cuyas estadísticas coinciden con las de la señal dada, x. Una vez más, esto se llama modelado autorregresivo. Con el fin de resolver las ecuaciones Yule-Walker, es necesario estimar la función de autocorrelación de x. El algoritmo de Levinson se utiliza entonces para resolver las ecuaciones de Yule-Walker de una manera eficiente. La función ARYULE hace todo esto por nosotros.

[d1,p1] = aryule(x,7);

Compare AR Model con AR Signal

Ahora nos gustaría calcular la respuesta de frecuencia del filtro All-pole que acabamos de usar para modelar la señal de AR x. Es bien sabido que la densidad espectral de potencia de la salida de este filtro, cuando el filtro está emocionado con el ruido Gaussiano blanco se da por la magnitud cuadrada de su respuesta de frecuencia multiplicada por la varianza de la entrada de ruido blanco. Una forma de calcular esta densidad espectral de potencia de salida es utilizando FREQZ de la siguiente manera:

[H1,w1] = freqz(sqrt(p1),d1);

Con el fin de tener una idea de lo bien que hemos modelado la señal autorregresiva x, superponemos la densidad espectral de potencia de la salida del modelo, calculada utilizando FREQZ, con la estimación de densidad espectral de potencia de x, calculada utilizando PERIODOGRAMA. Observe que el periodograma se escala por 2 * PI y es unilateral. Tenemos que ajustarnos para esto con el fin de comparar.

periodogram(x) hold on hp = plot(w1/pi,20*log10(2*abs(H1)/(2*pi)),'r'); % Scale to make one-sided PSD hp.LineWidth = 2; xlabel('Normalized frequency (\times \pi rad/sample)') ylabel('One-sided PSD (dB/rad/sample)') legend('PSD estimate of x','PSD of model output')

Utilice LPC para realizar la predicción lineal

Ahora vamos a recurrir al problema de predicción lineal. Aquí tratamos de determinar un filtro de predicción FIR. Utilizamos LPC para hacerlo, pero el resultado de LPC requiere una pequeña interpretación. LPC devuelve los coeficientes de todo el filtro blanqueador A (z), este filtro toma como entrada la señal autorregresiva x y devuelve como salida el error de predicción. Sin embargo, A (z) tiene el filtro de predicción incrustado en él, en la forma B (z) = 1-A (z), donde B (z) es el filtro de predicción. Tenga en cuenta que los coeficientes y la desviación de error calculados con LPC son esencialmente los mismos que los calculados con ARYULE, pero su interpretación es diferente.

[d2,p2] = lpc(x,7); [d1.',d2.']
ans = 8×2

    1.0000    1.0000
   -3.5245   -3.5245
    6.9470    6.9470
   -9.2899   -9.2899
    8.9224    8.9224
   -6.1349   -6.1349
    2.8299    2.8299
   -0.6997   -0.6997

Ahora extraemos B (z) de a (z) como se describió anteriormente para utilizar el filtro predictor lineal FIR para obtener una estimación de los valores futuros de la señal autorregresiva basada en combinaciones lineales de valores pasados.

xh = filter(-d2(2:end),1,x);

Compare las señales reales y pronosticadas

Para tener una sensación de lo que hemos hecho con un filtro de predicción FIR de 7-TAP, trazamos (200 muestras) de la señal autorregresiva original junto con la estimación de la señal resultante del predictor lineal teniendo en cuenta el retardo de una muestra en el filtro de predicción.

cla stem([x(2:end),xh(1:end-1)]) xlabel('Sample time') ylabel('Signal value') legend('Original autoregressive signal','Signal estimate from linear predictor') axis([0 200 -0.08 0.1])

Comparar errores de predicción

La potencia de error de predicción (varianza) se devuelve como la segunda salida de LPC. Su valor es (teóricamente) el mismo que la varianza del ruido blanco que conduce el filtro All-pole en el problema de modelado AR (P1). Otra forma de estimar esta varianza es a partir del error de predicción en sí:

p3 = norm(x(2:end)-xh(1:end-1),2)^2/(length(x)-1);

Todos los valores siguientes son teóricamente los mismos. Las diferencias se deben a los diversos errores de cálculo y aproximación aquí descritos.

[p0 p1 p2 p3]
ans = 1×4
10-5 ×

    0.5127    0.5305    0.5305    0.5068