Filtrado adaptativo
| 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

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 es la señal a la entrada del filtro, la señal a su salida, la señal deseada y es la respuesta al impulso del filtro de coeficientes .
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:
El error está determinado por , 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:
La optimización de esta función nos lleva al siguiente conjunto de ecuaciones lineales, conocido como la ecuación de Wiener-Hopf:[1]
En esta ecuación se consideran y como procesos aleatorios, siendo la función de autocorrelación de y la función de autocorrelación cruzada entre y . La solución a este ecuación da como resultado los coeficientes óptimos del filtro que minimizan el error cuadrático medio, pero desconocemos los valores estadísticos de y para poder resolverla. Sin embargo, podemos considerar una ecuación muy similar a partir de los valores reales de las señales:
Donde es la autocorrelación de la secuencia , y la correlación cruzada entre las secuencias y . 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 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:
Siendo:
- , el vector de coeficientes del filtro en el instante .
- , el vector de entrada deslizante de muestras de la señal en el instante .
- , el error en el instante . Siendo el valor deseado de la muestra, e el valor de la salida del filtro en ese instante, donde .
- , 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 . Donde es el autovalor máximo de (matriz de autocorrelación de la secuencia ) . Ante la dificultad de conocer , se suele utilizar la aproximación dada por , donde es el número de coeficientes del filtro y es la potencia media de la señal de entrada.[1]
El procedimiento del algoritmo se puede sintetizar en los siguientes pasos:
- Inicialización de los coeficientes del filtro . 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 .
- Entrada de datos. Se toma la muestra y se construye el vector .
- Cálculo de la salida estimada del filtro mediante .
- Cálculo del error mediante .
- Actualización del vector de coeficientes. Según la regla .
- Incremento del índice temporal 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:
Donde: es el instante actual; es el índice que recorre las muestras pasadas desde hasta , suponiendo para ; e 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 (, típicamente muy cercano a , por encima de ) 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 , con el que obtendremos el vector de coeficientes del filtro para cada instante , siendo la matriz de correlación de dimensión a partir de la secuencia , y el vector columna de dimensión dado por la correlación cruzada de las secuencias y .
Para ello, se emplea un método recursivo en el cuál la ecuación de actualización de los coeficientes viene dada por , donde es el error entre el valor de la muestra deseada y el valor a la salida del filtro en el instante , y es el vector de ganancia de Kalman, dado por la expresión:[1]
El procedimiento recursivo del cálculo de coeficientes según el algoritmo RLS se puede sintetizar como:
- Inicialización de y de ( número positivo pequeño, matriz identidad ).
- Entrada de datos. Se toma la muestra y se construye el vector .
- Cálculo de la salida estimada del filtro mediante .
- Cálculo del error mediante .
- Cálculo del vector de ganancia de Kalman. Según la expresión .
- Actualización de la inversa de la matriz de autocorrelación. Según .
- Actualización del vector de coeficientes. Según la regla .
- Incremento del índice temporal 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 y de la inversa de la matriz de correlación .
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.
