# Algoritmo LMS

El algoritmo LMS (del inglés, Least-Mean-Square algorithm) se usa en filtros adaptativos para encontrar los coeficientes del filtro que permiten obtener el valor esperado mínimo del cuadrado de la señal de error, definida como la diferencia entre la señal deseada y la señal producida a la salida del filtro.
Pertenece a la familia de los algoritmos de gradiente estocástico, es decir, el filtro se adapta en base al error en el instante actual únicamente. Fue inventado en 1960 por el profesor de la Universidad de Stanford Bernard Widrow y su primer estudiante de doctorado, Ted Hoff.
Su importancia radica en que es un algoritmo muy simple. No requiere medidas de las funciones de correlación, ni tampoco inversión de la matriz de correlación.
Un filtro es un proceso mediante el cual a una señal cualquiera se le modifica su contenido espectral. El algoritmo LMS es un algoritmo de filtrado lineal adaptativo que, en general, consiste de dos procesos básicos:
* Un proceso de filtrado, que involucra:
** el cómputo de la salida de un filtro lineal en respuesta a una señal de entrada, y
** la generación de una estimación del error mediante la comparación de esta salida con la señal deseada.
* Un proceso adaptativo, que involucra el ajuste automático de los parámetros del filtro de acuerdo al error estimado.
Cuando se habla de filtros adaptativos, está implícito que los parámetros que caracterizan al filtro, tales como el ancho de banda y frecuencias de los ceros, entre otros, cambian con el tiempo, esto es, los coeficientes de los filtros adaptativos cambian con el tiempo, en contraposición a los coeficientes de los filtros fijos que son, teóricamente, invariantes con el tiempo.

## Resumen del algoritmo LMS

El algoritmo LMS, para un filtro de orden $M$, puede resumirse de la siguiente manera:
| Parámetros: | $M=$ orden del filtro |
| | $\mu =$ tamaño del paso |
| Inicialización: | Si se dispone de información acerca del vector de coeficientes del filtro ${\hat {\mathbf {w} }}(n)$, usarla para elegir un valor apropiado para ${\hat {\mathbf {w} }}(0)$. En caso contrario, usar ${\hat {\mathbf {w} }}(0)=\mathbf {0}$ |
| Datos: |
| Dados: | $\mathbf {u} (n)=\left[u(n),u(n-1),\dots ,u(n-M+1)\right]^{T}$: señal de entrada en el instante $n$ |
| | $d(n)$: señal deseada a la salida del filtro |
| A calcular: | ${\hat {\mathbf {w} }}(n+1)=\left[{\hat {w}}_{0}(n+1),{\hat {w}}_{1}(n+1),\dots ,{\hat {w}}_{M-1}(n+1)\right]^{T}$: estimación del vector de coeficientes del filtro en el instante $n+1$ |
| Cómputo: | Para $n=0,1,2,\dots$, calcular: |
| | $e(n)=d(n)-{\hat {\mathbf {w} }}^{H}(n)\cdot \mathbf {u} (n)$: señal de error |
| | ${\hat {\mathbf {w} }}(n+1)={\hat {\mathbf {w} }}(n)+\mu \,e^{*}(n)\mathbf {u} (n)$: adaptación de los coeficientes del filtro |
El superíndice $T$ denota trasposición, el superíndice $H$ denota traspuesta conjugada, el asterisco denota conjugación y ${\hat {\mathbf {w} }}^{H}(n)\cdot \mathbf {u} (n)$ es la salida del filtro, que se calcula como el producto interno entre el vector de coeficientes del filtro ${\hat {\mathbf {w} }}(n)$, cuyos componentes suelen llamarse pesos o weighs, y el vector de datos de entrada al filtro $\mathbf {u} (n)$.