Jump to content

Filtrado adaptativo

From glossaLAB

anon

Clarification activity Transmisión digital
Author(s) Rubén Guzmán
Creation date Apr 2025
Status 🔵 Listo para publicar

Definición

El filtrado adaptativo es una técnica de procesamiento de señales, donde un filtro tiene la capacidad de adaptar sus coeficientes de forma dinámica ante las condiciones cambiantes de la señal o de su entorno. Para ello, los filtros adaptativos implementan algoritmos que buscan la minimización de una función de error determinada.

Existen dos algoritmos fundamentales en el filtrado adaptativo: LMS (Least Mean Squares, Mínimos cuadrados medios) y RLS (Recursive Least Squares, Mínimos cuadrados recursivos). Ambos buscan la minimización del error cuadrático medio entre la señal deseada y la señal filtrada, pero lo abordan de forma diferente. En líneas generales, LMS implementa una solución iterativa por el método de gradiente descendiente, mientras RLS utiliza una método recursivo de actualización de la solución óptima en base a todas las muestras previas. RLS requiere de mayor complejidad y coste computacional, pero a cambio converge de forma más rápida a los coeficientes óptimos.[1]

Ejemplos

Cuando las características de las señales y el entorno son variantes, debemos recurrir a métodos con capacidad de adaptación y seguimiento a estos cambios. Los filtros adaptativos son soluciones ideales para sistemas que deben trabajar en tiempo real en entornos no estacionarios. Estas son algunas de las múltiples aplicaciones que implementan técnicas de filtrado adaptativo:

  • Identificación de sistemas. La comparación de las señales a la salida de un filtro adaptativo en paralelo con un sistema desconocido variante en el tiempo nos permitirá identificar la respuesta del sistema en base a los coeficientes obtenidos en el filtro.
  • Ecualización adaptativa del canal. Utilizado para mitigar la distorsión producida en la señal por un canal de comunicación de condiciones variantes en el tiempo. Este es el caso de las comunicaciones móviles, donde debido al multitrayecto, la distorsión de los símbolos transmitidos aumenta la interferencia entre estos.
  • Cancelación de eco. En las comunicaciones full-duplex, como la telefónica, parte de la señal del emisor puede introducirse en el canal de vuelta. Ésta se puede suprimir mediante filtrado adaptativo.

Planteamiento general

Figura 1: Filtro FIR adaptativo genérico.

Los filtros FIR son los más ampliamente utilizados en el filtrado adaptativo. Por lo tanto partimos de un filtro FIR de coeficientes adaptativos implementado en su estructura directa (ver figura), donde x(n) es la señal a la entrada del filtro, y(n) la señal a su salida, d(n) la señal deseada y h(n) es la respuesta al impulso del filtro de M coeficientes h(0),h(1),...,h(M1) .

La señal a salida del filtro se puede expresar como la convolución entre la señal a la entrada y la respuesta al impulso:

y(n)=k=0M1x(k)h(nk)

El error está determinado por e(n)=d(n)y(n), y el objetivo es encontrar el valor de los parámetros del filtro que minimicen el error cuadrático medio, según la siguiente función de costo:

J=E[e2(n)]=E[(d(n)y(n))2]=E[(d(n)k=0M1x(k)h(nk))2]

La optimización de esta función nos lleva al siguiente conjunto de ecuaciones lineales, conocido como la ecuación de Wiener-Hopf:[1]

k=0M1h(k)γxx(lk)=γdx(l)l=0,1,,M1

En esta ecuación se consideran x(n) y d(n) como procesos aleatorios, siendo γxx(l) la función de autocorrelación de x(n) y γdx(l) la función de autocorrelación cruzada entre d(n) y x(n). La solución a este ecuación da como resultado los coeficientes h(n) óptimos del filtro que minimizan el error cuadrático medio, pero desconocemos los valores estadísticos de x(n) y d(n) para poder resolverla. Sin embargo, podemos considerar una ecuación muy similar a partir de los valores reales de las señales:

k=0M1h(k)rxx(lk)=rdx(l)l=0,1,,M1

Donde rxx es la autocorrelación de la secuencia x(n), y rdx la correlación cruzada entre las secuencias d(n) y x(n). Estos valores reales son estimaciones de los valores estadísticos de las señales y la resolución de este sistema de ecuaciones, muestra a muestra, dará como resultado los coeficientes h(n) estimados en cada instante.

El objetivo de los algoritmos adaptativos como el LMS es acercarse a la solución óptima de la ecuación de Wiener-Hopf a partir de los datos reales de las secuencias, haciendo que los datos estimados obtenidos a partir de estos converjan hacia la solución óptima.

Algoritmo LMS

El algoritmo LMS (Least Mean Squares, Mínimos cuadrados medios) es un método iterativo basado en el gradiente descendente para adaptar los coeficientes de un filtro y minimizar el error cuadrático medio entre la salida filtrada y la señal deseada.

Para ello, propone la actualización iterativa de los coeficientes en dirección del gradiente negativo según la regla:

𝐡(n+1)=𝐡(n)+μe(n)𝐱(n)

Siendo:

  • 𝐡(n)=[h0(n),h1(n),,hM1(n)]T, el vector de coeficientes del filtro en el instante n.
  • 𝐱(n)=[x(n),x(n1),,x(nM+1)]T, el vector de entrada deslizante de M muestras de la señal x(n) en el instante n.
  • e(n)=d(n)y(n), el error en el instante n. Siendo d(n) el valor deseado de la muestra, e y(n) el valor de la salida del filtro en ese instante, donde y(n)=k=0M1x(k)h(nk)=𝐱T(n)𝐡(n).
  • μ, la tasa de aprendizaje, parámetro que condiciona la velocidad de convergencia y la estabilidad del algoritmo.

La elección de μ es determinante. Una tasa de aprendizaje mayor produce una convergencia más rápida, pero no puede superar la condición de estabilidad del algoritmo dada por 0<μ<2λmax. Donde λmax es el autovalor máximo de 𝐑xx (matriz de autocorrelación de la secuencia x(n)) . Ante la dificultad de conocer λmax, se suele utilizar la aproximación dada por 0<μ<1MPx, donde M es el número de coeficientes del filtro y Px es la potencia media de la señal de entrada.[1]

El procedimiento del algoritmo se puede sintetizar en los siguientes pasos:

  1. Inicialización de los coeficientes del filtro 𝐡(0)=[h0(0),h1(0),,hM1(0)]T. Si fuera posible se tomarían los valores calculados previamente a partir de una señal de referencia conocida por el receptor. Si no, se inicializan normalmente a 0.
  2. Entrada de datos. Se toma la muestra x(n) y se construye el vector 𝐱(n)=[x(n),x(n1),,x(nM+1)]T.
  3. Cálculo de la salida estimada del filtro mediante y(n)=k=0M1x(k)h(nk)=𝐱T(n)𝐡(n).
  4. Cálculo del error mediante e(n)=d(n)y(n).
  5. Actualización del vector de coeficientes. Según la regla 𝐡(n+1)=𝐡(n)+μe(n)𝐱(n).
  6. Incremento del índice temporal n=n+1 y salto al paso 2.

Algoritmo RLS

El algoritmo RLS (Recursive Least Squares, Mínimos cuadrados recursivos) actualiza los coeficientes del filtro mediante la minimización de la suma del error cuadrático hacia el pasado según una ponderación decreciente exponencial. RLS tiene una convergencia más rápida, pero a costa de mayor complejidad computacional.

RLS trata de encontrar los coeficientes que minimizan la función de costo siguiente:

J(n)=l=0nλnle2(l)=l=0nλnl(d(l)y(l))2=l=0nλnl(d(l)𝐱T(l)𝐡(n))2

Donde: n es el instante actual; l es el índice que recorre las muestras pasadas desde 0 hasta n, suponiendo x(n)=0 para n<0; d(l) e y(l) son el valor deseado de la muestra y el valor a la salida del filtro, respectivamente; y λ es un parámetro conocido como factor de olvido (0<λ<1, típicamente muy cercano a 1, por encima de 0.9) que pondera las muestras de forma exponencial decreciente desde la actual a la más antigua.

Se puede observar que a diferencia del planteamiento inicial que llevó a LMS, donde la función de costo era estadística, RLS plantea una función de costo determinista.

La optimización de la dicha función nos llevará a la resolución de un conjunto de ecuaciones lineales 𝐑xx𝐡=𝐫xd, con el que obtendremos el vector de coeficientes del filtro para cada instante 𝐡(n)=[h0(n),h1(n),,hM1(n)]T, siendo 𝐑xx la matriz de correlación de dimensión M×M a partir de la secuencia x(n), y 𝐫xd el vector columna de dimensión M×1 dado por la correlación cruzada de las secuencias x(n) y d(n).

Para ello, se emplea un método recursivo en el cuál la ecuación de actualización de los coeficientes viene dada por 𝐡(n)=𝐡(n1)+𝐤(n)e(n), donde e(n)=d(n)y(n) es el error entre el valor de la muestra deseada y el valor a la salida del filtro en el instante n, y 𝐤(n) es el vector de ganancia de Kalman, dado por la expresión:[1]

𝐤(n)=𝐑xx1(n1)𝐱*(n)λ+𝐱T(n)𝐑xx1(n1)𝐱*(n)

El procedimiento recursivo del cálculo de coeficientes según el algoritmo RLS se puede sintetizar como:

  1. Inicialización de 𝐡(1)=𝟎 y de 𝐑xx1(1)=(1/δ)𝐈 (δ número positivo pequeño, 𝐈 matriz identidad M×M).
  2. Entrada de datos. Se toma la muestra x(n) y se construye el vector 𝐱(n)=[x(n),x(n1),,x(nM+1)]T.
  3. Cálculo de la salida estimada del filtro mediante y(n)=k=0M1x(k)h(nk)=𝐱T(n)𝐡(n1).
  4. Cálculo del error mediante e(n)=d(n)y(n).
  5. Cálculo del vector de ganancia de Kalman. Según la expresión 𝐤(n)=𝐑xx1(n1)𝐱*(n)λ+𝐱T(n)𝐑xx1(n1)𝐱*(n).
  6. Actualización de la inversa de la matriz de autocorrelación. Según 𝐑xx1(n)=𝐑xx1(n1)𝐤(n)𝐱T(n)𝐑xx1(n1)λ.
  7. Actualización del vector de coeficientes. Según la regla 𝐡(n)=𝐡(n1)+𝐤(n)e(n).
  8. Incremento del índice temporal n=n+1 y salto al paso 2.

Código

La función DecisorAdaptativo(xm,a,c,M,lambda,h,P) realiza la decisión en recepción, incorporando un filtro FIR que adapta sus coeficientes según el algoritmo RLS. Se parte de las muestras en instantes óptimos después del filtro adaptado (xm), y se realiza una llamada a la función decisor(), que devuelve las decisiones óptimas y sus codificaciones correspondientes.

Las entradas a y c determinan la constelación de los valores esperados de la señal y los códigos asociados a cada valor. M es el orden del filtro FIR adaptativo. lambda es el factor de olvido del algoritmo RLS. h y P son, respectivamente, los valores de iniciales de los coeficientes del filtro 𝐡(1) y de la inversa de la matriz de correlación 𝐑xx1(1).

Además del vector de decisiones (d) y de sus valores codificados en forma de secuencia binaria (d_cod), a la salida se entrega el vector de valores a la salida del filtro (y) y el error entre éste y el de decisiones (e).

A continuación, se muestra el código completo:

function [d_cod,d,y,e,h_out,P_out,h_hist] = DecisorAdaptativo(xm,a,c,M,lambda,h,P)
% DecisorAdaptativo
% ENTRADAS:
%   xm: Señal recibida de canal tras pasar por filtro adaptado + muestreo
%   a: Vector columna de amplitudes de la constelación (Mx1)
%   c: Códigos correspondirntes a cada amplitud (Mxb)
%   M: Orden del filtro FIR
%   lambda: Factor de olvido de algoritmo RLS
%   h: Valores iniciales de los coeficientes del ecualizador (heredados de trama anterior)
%   P: Valores iniciales de matriz P (heredados de trama anterior)
% SALIDAS:
%   d_cod: Vector de decisiones codificado según c
%   d: Vector de decisiones después de ecualizador adaptativo
%   y: Vector de salidas de ecualizador adaptativo, previo a decisor
%   e: Error entre decisiones y salida 
%   h_out: Últimos valores de h (para siguiente trama)
%   P_out: Últimos valores de P (para siguiente trama)
%   h_hist: Registro de la evolución de los coeficientes del filtro (MxN)

N = length(xm) - (M-1); % Longitud de trama de entrada - Solape (condiciones iniciales)
b = log2(numel(a));     % Bits por símbolo

xm=xm(:); % Forzar entrada como columna

% Inicialización de vectores:
y = zeros(N,1);         % Vector de salida de ecualizador adaptativo 
d = zeros(N,1);         % Vector de decisiones
e = zeros(N,1);         % Vector de errores 
d_cod = zeros(N*b, 1);  % Vector de decisiones codificado
h_hist = zeros(M,N);    % Inicialización de h_hist

% Muestras desde 1 a N:
for n=1:N
    x = flipud(xm(n : n+M-1));          % Selección de entrada al filtro de x(n) a x(n-M+1)
    y(n)=x'*h;                          % Salida de ecualizador para coeficientes actuales 
    [bits_n, d(n)]=decisor(y(n),a,c);   % Decisión para salida de ecualizador
    d_cod((n-1)*b+1 : n*b)=bits_n;      % Escritura en vector de decisiones codificado
    e(n)=d(n)-y(n);                     % Error (Señal decidida - Señal ecualizada)
    k=(P*x)/(lambda + x'*P*x);          % Vector de ganancia de Kalman
    P=(1/lambda)*(P-k*x'*P);            % Actualización de matriz P
    h_hist(:,n) = h;                    % Actualización del histórico de h
    h=h+k*e(n);                         % Actualización de coeficientes para siguiente iteración
end

% Salidas para siguiente trama
h_out=h;
P_out=P;

%Salida decodificada como boolean
d_cod = boolean(d_cod);
end

Como ejemplo, se representa gráficamente la evolución del error cuadrático a la salida del decisor adaptativo, a partir del vector de error e, y la comparativa entre las decisiones d y las salidas del filtro adaptativo y. En este caso, el decisor se intenta adaptar a un canal multitrayecto con 4 variaciones temporales equidistantes. En la figura 2 se puede observar la convergencia del error después de cada cambio.

Figura 2: Evolución del error cuadrático en el decisor adaptativo y comparativa entre decisiones y salida del filtro.

Referencias

  1. 1.0 1.1 1.2 1.3 Proakis, J.G. y Manolakis, D.G. (2007). Tratamiento digital de señales (4ª edición). Madrid: Pearson Educación.
This website only uses its own cookies for technical purposes; it does not collect or transfer users' personal data without their knowledge. However, it contains links to third-party websites with third-party privacy policies, which you can accept or reject when you access them.