Professional Documents
Culture Documents
Filtros adaptativos
• Estructuras adaptativas
• El combinador adaptativo lineal
• Algoritmo de mínimos cuadrados medios (LMS)
• Ejemplos de programación para cancelación de ruido e identificación del sistema usando el
código C
Los filtros adaptativos se usan mejor en casos donde las condiciones de la señal o los parámetros
del sistema cambian lentamente y el filtro se debe ajustar para compensar este cambio. Un filtro
muy simple pero potente se llama combinador adaptativo lineal, que no es más que un filtro FIR
ajustable. El criterio LMS es un algoritmo de búsqueda que se puede utilizar para proporcionar
la estrategia para ajustar los coeficientes del filtro. Se incluyen ejemplos de programación para
proporcionar una comprensión básica e intuitiva de los filtros adaptativos.
7.1 INTRODUCCIÓN
En los filtros digitales FIR e IIR convencionales, se supone que los parámetros del proceso para
determinar las características del filtro son conocidos. Pueden variar con el tiempo, pero se
supone que la naturaleza de la variación es conocida. En muchos problemas prácticos, puede
haber una gran incertidumbre en algunos parámetros debido a datos de prueba previos
inadecuados sobre el proceso. Es probable que algunos parámetros cambien con el tiempo, pero
la naturaleza exacta del cambio no es predecible. En tales casos, es muy conveniente diseñar el
filtro para que sea autoaprendizaje, de modo que pueda adaptarse a la situación que se tenga
entre manos.
Los coeficientes de un filtro adaptativo se ajustan para compensar los cambios en la señal de
entrada, la señal de salida o los parámetros del sistema. En lugar de ser rígido, un sistema
adaptativo puede aprender las características de la señal y rastrear los cambios lentos. Un filtro
adaptativo puede ser muy útil cuando hay incertidumbre sobre las características de una señal
o cuando estas características cambian.
que es la diferencia entre la señal deseada d (n) y la salida del filtro adaptativo y (n). Los pesos
o coeficientes wk (n) se ajustan de tal manera que se minimiza una función de error cuadrático
medio. Esta función de error cuadrático medio es E [e2 (n)], donde E representa el valor
esperado. Como hay k pesos o coeficientes, se requiere un gradiente de la función de error
cuadrático medio. En su lugar, se puede encontrar una estimación usando el gradiente de e2 (n),
produciendo
que representa el algoritmo LMS [1-3]. La ecuación (7.3) proporciona un medio simple pero
poderoso y eficiente de actualizar los pesos o coeficientes, sin la necesidad de promediar o
diferenciar, y se usará para implementar filtros adaptativos. La entrada al filtro adaptativo es x
(n), y la tasa de convergencia y precisión del proceso de adaptación (tamaño de paso adaptativo)
es b.
Para cada tiempo específico n, cada coeficiente o peso, wk (n) se actualiza o reemplaza por un
nuevo coeficiente, basado en (7.3), a menos que la señal de error e (n) sea cero. Después de la
salida del filtro y (n), la señal de error e (n) y cada uno de los coeficientes wk (n) se actualizan
durante un tiempo específico n, se adquiere una nueva muestra (de un ADC) y se repite el
proceso de adaptación para un tiempo diferente. Tenga en cuenta que a partir de (7.3), los pesos
no se actualizan cuando e (n) se convierte en cero.
El combinador adaptativo lineal es una de las estructuras de filtro adaptativo más útiles y es un
filtro FIR ajustable. Mientras que los coeficientes del filtro FIR selectivo de frecuencia discutido
en el Capítulo 4 son fijos, los coeficientes, o pesos, del filtro FIR adaptativo pueden ser ajustado
en función de un entorno cambiante, como una señal de entrada. Los filtros adaptables IIR (no
discutidos aquí) también se pueden usar. Un problema importante con un filtro IIR adaptativo
es que sus polos pueden actualizarse durante el proceso de adaptación a valores fuera del
círculo unitario, lo que hace que el filtro sea inestable.
Los ejemplos de programación desarrollados posteriormente harán uso de las ecuaciones (7.1)
- (7.3). En (7.3) simplemente usamos la variable b en lugar de 2b.
Para la cancelación de ruido. La Figura 7.2 muestra la estructura adaptativa de la Figura 7.1
modificada para una aplicación de cancelación de ruido. La señal deseada d está corrompida por
ruido aditivo no relacionado n. La entrada al filtro adaptativo es un ruido n ¢ correlacionado con
el ruido n. El ruido n ¢ podría provenir de la misma fuente que n pero modificado por el entorno.
La salida y del filtro adaptativo está adaptada al ruido n. Cuando esto sucede, la señal de error
se aproxima a la señal deseada d. La salida general es esta señal de error y no la salida y del filtro
adaptativo. Si d no está correlacionado con n, la estrategia es minimizar E (e2),
que se reduce a
que es más conciso desde un punto de vista matemático porque no se requiere una operación
de multiplicación para este algoritmo.
Los algoritmos adaptativos para restaurar las propiedades de señal se vuelven útiles cuando una
señal de referencia apropiada no está disponible. El filtro está adaptado de tal manera que
restaure alguna propiedad de la señal perdida antes de alcanzar el filtro adaptativo. En lugar de
la forma de onda deseada como plantilla, como en los algoritmos LMS o RLS, esta propiedad se
usa para la adaptación del filtro. Cuando la señal deseada está disponible, se puede usar un
enfoque convencional como el LMS; de lo contrario, se utiliza un conocimiento a priori sobre la
señal.
7.3 COMBINADOR LINEAL ADAPTABLE
Consideraremos una de las estructuras de filtro adaptativo más útiles: el combinador adaptativo
lineal. Se producen dos casos cuando se utiliza el combinador lineal: (1) entradas múltiples y (2)
una sola entrada.
Entradas múltiples
Entrada simple
En el caso de una entrada única, la estructura se reduce a un filtro FIR (K + 1) -tap con coeficientes
ajustables como se muestra en la Figura 7.7. Cada entrada retrasada se pondera y se suma para
producir la salida,
Las ecuaciones (7.9), (7.11) y (7.14), así como las figuras 7.6 y 7.7, contienen la misma
información. Para familiarizarnos con la notación, examinemos un filtro con dos pesos y una sola
entrada.
Verifique que las ecuaciones (7.11) y (7.14) y la Figura 7.8 den la misma y para un filtro de dos
estrellas.
Solución
que se reduce a
que también se puede obtener sumando las señales en el nodo del diagrama de dos pesos que
se muestra en la Figura 7.8.
Como se puede ver en la Figura 7.8, el combinador lineal con una sola entrada es solo un filtro
FIR con coeficientes ajustables. Aunque esta es una configuración muy simple, puede manejar
muchas de las aplicaciones adaptativas.
En la sección anterior proporcionamos una estructura para el filtro cuyas características pueden
cambiarse ajustando los pesos. Sin embargo, todavía necesitamos una forma de juzgar qué tan
bien está funcionando el filtro, se necesita una medida de rendimiento. La función de
rendimiento se basará en el error, que se obtiene del diagrama de bloques en la Figura 7.1, con
el índice de tiempo incorporado:
El cuadrado de esta función es
que es una función de segundo orden en w (0). Para encontrar el mínimo, establezca la derivada
de (7.18) con respecto a w (0) igual a cero, o
Resultando en
que es el valor de w (0) que produce el mínimo deseado. Como las señales d y x son funciones
del tiempo, la superficie mínima y la superficie de rendimiento también fluctúan con las señales.
Esto no es deseable; nos sentiríamos más cómodos con una función de rendimiento rígida. Para
eliminar este problema, podemos tomar el valor esperado de la función de error cuadrado, que
para un peso se convierte en
Esta función de rendimiento se llama error cuadrático medio. Tenga en cuenta que el valor
esperado de cualquier suma es la suma de los valores esperados. El valor esperado de un
producto es el producto de los valores esperados solo si las variables son estadísticamente
independientes. Las señales d (n) yx (n) generalmente no son estadísticamente independientes.
Si las señales d y x son estadísticamente invariantes en el tiempo, los valores esperados de los
productos de señal de dy x son constantes, y (7.21) se reescribe como
El uso de (7.21) como la función de rendimiento para un peso da como resultado un punto
mínimo fijo en una función de rendimiento rígida,
En la figura 7.9 se muestra un gráfico de la función de error unidimensional con respecto a w
(0). Esta es una curva simple de segundo orden en dos dimensiones (E [e2], w (0)) con un mínimo
simple en w (0) = B / C. Si examinamos dos pesos, se obtendrá una superficie de segundo orden
tridimensional que se asemeja a un recipiente. Con más pesos, se obtendrá una superficie de
segundo orden de mayor dimensión que los humanos no podrán visualizar. En la práctica, los
pesos (el peso en este caso) comenzarán en algún valor inicial wi y se ajustarán en incrementos
hacia el valor mínimo de la función de rendimiento. El procedimiento para ajustar los pesos es
un tema de la siguiente sección.
Tomando la media de la función general de error al cuadrado, (7.17), da como resultado una
función de rendimiento de error cuadrático medio general:
Nuevamente note que el valor medio de cualquier suma es la suma de los valores medios. Los
valores del producto de dy X y X con XT no pueden reducirse aún más, ya que el valor medio de
un producto es el producto de valores medios solo cuando las dos variables son
estadísticamente independientes; d y X generalmente no son independientes. Esta sigue siendo
la misma superficie de rendimiento de segundo orden que antes, pero ahora no está fluctuando
con dy X, pero es rígida. Sin embargo, si d y X son estadísticamente variables en el tiempo, la
superficie de error se moverá a medida que cambien las estadísticas de d y X.
En esta sección abordamos cómo se deben ajustar los pesos para encontrar el mínimo de una
manera razonablemente eficiente. Por supuesto, los pesos se pueden ajustar al azar, pero la vida
es demasiado corta. Dado que trataremos con eventos en tiempo real y cambios que deben
seguirse, necesitamos una forma relativamente rápida de alcanzar el mínimo.
Considere nuevamente el sistema de un peso para tener una idea de cómo se puede llevar a
cabo esta búsqueda. Inicialmente, el peso será igual a algún valor arbitrario w (0, n), y se ajustará
paso a paso hasta que se alcance el mínimo (Figura 7.10). El tamaño y la dirección del paso son
las dos cosas que deben elegirse al hacer un paso. Cada paso consistirá en agregar un incremento
a w (0, n). Observe que si el valor actual de w (0, n) está a la derecha del mínimo, el paso debe
ser negativo (pero la derivada de la curva es positiva); de manera similar, si el valor actual está
a la izquierda del mínimo, el incremento debe ser positivo (pero la derivada es negativa). Esta
observación lleva a la conclusión de que la negación de la derivada indica la dirección correcta
del incremento. Como la derivada desaparece como mínimo, también se puede usar para ajustar
el tamaño del paso. Con estas observaciones, concluimos que el tamaño y la dirección del paso
pueden hacerse proporcionales al negativo
donde b es una constante positiva arbitraria. Como se muestra en la Figura 7.10, la aplicación
repetida de (7.25) hará que w (0) se mueva por pasos desde su valor inicial hasta que alcance el
mínimo.
El gradiente apunta en la dirección en que la función, en este caso P, aumenta más rápidamente.
Por lo tanto, el tamaño y la dirección del paso se pueden hacer proporcionales al gradiente de
la función de rendimiento.
Reemplazar el peso individual con un vector de pesos y la derivada con el gradiente en (7.25) da
la regla de iteración de peso múltiple,
El único problema que queda por resolver es cómo encontrar grad {P}. Para obtener una forma
simple pero práctica de encontrar grad {P}, utilizaremos un cálculo aproximado en lugar del
gradiente exacto. En lugar de usar el gradiente del error cuadrado esperado, lo aproximaremos
con el grad {e2}:
dónde
Rendimientos de sustitución
Sustituir este resultado por grad {P} en la ecuación (7.29) da como resultado
El índice de tiempo n se ha incluido en las últimas dos ecuaciones, lo que implica que e se
actualizará cada vez de muestra. Observe que si e va a cero, entonces W (n + 1) = W (n) y los
pesos permanecen constantes.
La ecuación (7.36) constituye el resultado más importante de este capítulo y es la base del
algoritmo LMS. Esta ecuación permite que los pesos se actualicen sin cuadrar, promediar o
diferenciar, pero es potente y eficiente. Esta ecuación, como en (7.3), se usará en los siguientes
ejemplos.
Los siguientes ejemplos de programación ilustran el filtrado adaptativo usando el algoritmo LMS.
Es instructivo leer el primer ejemplo aunque no use el DSK, ya que ilustra los pasos en el proceso
de adaptación.
Ejemplo 7.1: Filtro adaptativo usando código C compilado con Borland C / C ++ (Adaptc)
Este ejemplo aplica el algoritmo LMS usando un programa codificado en C compilado con
Borland C / C ++. Ilustra los siguientes pasos para el proceso de adaptación usando la estructura
adaptativa en la Figura 7.1:
1. Obtenga una nueva muestra para cada uno, la señal deseada d y la entrada de referencia
para el filtro adaptativo x, que representa una señal de ruido.
2. Calcule la salida y del filtro adaptativo FIR, aplicando (7.1) como en el Capítulo 4 con un
filtro FIR. En la estructura de la figura 7.1, la salida general es la misma que la salida y
del filtro adaptable.
3. Calcule la señal de error aplicando (7.2).
4. Actualice / reemplace cada coeficiente o peso aplicando (7.3).
5. Actualice las muestras de datos de entrada para la próxima vez n con el esquema de
movimiento de datos utilizado en el Capítulo 4. Tal esquema mueve los datos en lugar
de un puntero.
6. Repita todo el proceso de adaptación para el siguiente punto de muestra de salida.
La figura 7.11 muestra una lista del programa adaptc.c, que implementa el algoritmo LMS para
la estructura de filtro adaptativo en la figura 7.1. Una señal deseada se elige como 2 cos (2nπf /
Fs), y una entrada de ruido de referencia para el filtro adaptativo se elige como sin (2nπf / Fs),
donde f es 1 kHz y Fs = 8kHz. La tasa de adaptación, orden de filtro, y el número de muestras es
0.01, 22 y 40, respectivamente.
La salida total es la salida y del filtro adaptable, que se adapta o converge a la señal deseada del
coseno d.
Una versión del programa adaptc.c en la Figura 7.11, con gráficos y capacidades interactivas para
trazar el proceso de adaptación para diferentes valores de b, se encuentra en el CD adjunto
como adaptive.c, compilado con Borland C / C ++. El archivo ejecutable también está en el CD.
Utiliza una señal de coseno deseada con una amplitud de 1 y un orden de filtro de 31. Ejecute
este programa, ingrese un valor b de 0.01 y verifique los resultados en la Figura 7.13. Tenga en
cuenta que la salida converge a la señal del coseno deseada. Presione F2 para ejecutar este
programa nuevamente con un valor beta diferente.
//Adaptc.c - Adaptation using LMS WITHOUT TI compiler
#include <stdio.h>
#include <math.h>
#define beta 0.01 //convergence rate
#define N 21 //order of filter
#define NS 40 //number of samples
#define Fs 8000 //sampling frequency
#define pi 3.1415926
#define DESIRED 2*cos(2*pi*T*1000/Fs) //desired signal
#define NOISE sin(2*pi*T*1000/Fs) //noise signal
main()
{
long I, T;
double D, Y, E;
double W[N+1] = {0.0};
double X[N+1] = {0.0};
FILE *desired, *Y_out, *error;
desired = fopen ("DESIRED", "w++"); //file for desired samples
Y_out = fopen ("Y_OUT", "w++"); //file for output samples
error = fopen ("ERROR", "w++"); //file for error samples
for (T = 0; T < NS; T++) //start adaptive algorithm
{
X[0] = NOISE; //new noise sample
D = DESIRED; //desired signal
Y = 0; //filter'output set to zero
for (I = 0; I <= N; I++)
Y += (W[I] * X[I]); //calculate filter output
E = D - Y; //calculate error signal
for (I = N; I >= 0; I--)
{
W[I] = W[I] + (beta*E*X[I]); //update filter coefficients
if (I != 0)
X[I] = X[I-1]; //update data sample
}
fprintf (desired, "\n%10g %10f", (float) T/Fs, D);
fprintf (Y_out, "\n%10g %10f", (float) T/Fs, Y);
fprintf (error, "\n%10g %10f", (float) T/Fs, E);
}
fclose (desired);
fclose (Y_out);
fclose (error);
}
FIGURA 7.13. Trazado de una salida de filtro adaptable que converge a la señal de coseno
deseada utilizando la capacidad interactiva con el programa adaptable.c.
Ejemplo 7.2: filtro adaptativo para la cancelación de ruido sinusoidal (adaptnoise)
Este ejemplo ilustra la aplicación del criterio LMS para cancelar un ruido sinusoidal indeseable.
La Figura 7.14 muestra una lista del programa adaptnoise.c, que implementa un filtro FIR
adaptativo utilizando la estructura de la Figura 7.2.
Una onda sinusoidal deseada de 1500 Hz con un ruido de onda sinusoidal aditivo (no deseado)
de 312 Hz forma una de las dos entradas a la estructura de filtro adaptativo. Una señal de coseno
de referencia (plantilla), con una frecuencia de 312 Hz, es la entrada a un filtro FIR adaptativo
de 30 coeficientes. La señal de coseno de referencia de 312 Hz se correlaciona con el ruido
sinusoidal aditivo de 312 Hz, pero no con la señal sinusoidal deseada de 1500 Hz. Para cada
tiempo n, se calcula la salida del filtro FIR adaptativo y los 30 pesos o coeficientes se actualizan
junto con las muestras de retardo. La señal E de "error" es la salida total deseada de la estructura
adaptativa. Esta señal de error es la diferencia entre la señal deseada y el ruido aditivo (dplusn)
y la salida del filtro adaptativo, y (n).
Todas las señales utilizadas provienen de una tabla de búsqueda generada con MATLAB. No se
usan entradas externas en este ejemplo. La figura 7.15 muestra un programa MATLAB adaptado.
m (una versión más completa está en el CD) que calcula los valores de datos para la señal
sinusoidal deseada de 1500Hz, el ruido aditivo como un seno de 312Hz y la señal de referencia
como un coseno de 312Hz.Los archivos apropiados generados (en el CD) son:
La Figura 7.16 muestra el archivo sin1500.h con valores de datos sinusoidales que representan
la señal de onda sinusoidal de 1500 Hz deseada. La frecuencia generada asociada con sinl500.h
es
Cree y ejecute este proyecto como adaptnoise. Verifique el siguiente resultado de salida: la señal
sinusoidal de 312 Hz no deseada se reduce gradualmente (cancela), mientras que la señal
deseada de 1500 Hz permanece. Tenga en cuenta que en esta aplicación, la salida deseada es la
señal de error E, que se adapta (converge) a la señal deseada. Se puede observar una tasa de
cancelación más rápida con un mayor valor de beta. Sin embargo, si beta es demasiado grande,
no se observará el proceso de adaptación ya que la salida se mostraría como la señal de 1500
Hz. Con el control deslizante en la posición 2, la salida es (dplusn), la señal sinusoidal deseada
de 1500 Hz con la señal de ruido aditiva de 312 Hz.
//Adaptnoise.c Adaptive FIR filter for noise cancellation
FIGURA 7.14. Programa de filtro FIR adaptativo para la cancelación de ruido sinusoidal
(adaptnoise.c).
%Adaptnoise.m Generates: dplusn.h, refnoise.h, and sin1500.h for i=1:128
FIGURA 7.15. Programa MATLAB para generar valores de datos para seno (1500), seno (1500) +
seno (312) y coseno (312) (adaptnoise.m).
short sin1500[128]={0, 92, 71, -38, -100, -38, 71, 92, 0, -92, -71, 38,
100, 38, -71, -92, 0, 92, 71, -38, -100, -38, 71, 92, 0, -92, -71, 38,
100, 38, -71, -92, 0, 92, 71, -38, -100, -38, 71, 92, 0, -92, -71, 38,
100, 38, -71, -92, 0, 92, 71, -38, -100, -38, 71, 92, 0, -92, -71, 38,
100, 38, -71, -92, 0, 92, 71, -38, -100, -38, 71, 92, 0, -92, -71, 38,
100, 38, -71, -92, 0, 92, 71, -38, -100, -38, 71, 92, 0, -92, -71, 38,
100, 38, -71, -92, 0, 92, 71, -38, -100, -38, 71, 92, 0, -92, -71, 38,
100, 38, -71, -92, 0, 92, 71, -38, -100, -38, 71, 92, 0, -92, -71, 38,
100, 38, -71, -92};
FIGURA 7.16. Archivo de encabezado de MATLAB generado para seno (1500Hz) con 128
puntos (sin1500.h).
Ejemplo 7.3: Filtro FIR adaptativo para la cancelación de ruido mediante entradas externas
(adaptnoise_2IN)
Este ejemplo amplía el anterior para cancelar un ruido sinusoidal indeseable usando entradas
externas. La Figura 7.17 muestra el programa fuente adaptnoise_2IN.c que permite dos entradas
externas: una señal deseada y una interferencia sinusoidal. El programa usa la estructura sindical
presentada en el Capítulo 2 con el ejemplo de proyecto loop_stereo. Se captura una señal de 32
bits utilizando esta estructura que permite una señal de entrada externa de 16 bits a través de
cada canal. La señal deseada de 16 bits se introduce a través del canal izquierdo y la señal
indeseable de 16 bits a través del canal derecho. Un adaptador con dos conectores en un
extremo para cada señal de entrada y un conector en el otro extremo, que se conecta al DSK, se
introdujo en el Capítulo 2 con el proyecto loop_stereo y es necesario para implementar este
ejemplo. La estructura adaptativa básica en la figura 7.2 se aplica aquí junto con el algoritmo
LMS.
//Adaptnoise_2IN.c Adaptive FIR for sinusoidal noise interference
FIGURA 7.17. Programa de filtro adaptativo para cancelación de ruido utilizando entradas
externas (adaptnoise_2IN.c).
1. Deseado: 1.5kHz; no deseado: 2kHz. Ingrese una señal sinusoidal deseada (con una
frecuencia tal como 1.5 kHz) en el canal izquierdo y una señal de ruido sinusoidal no
deseada de 2 kHz en el canal derecho. Ejecuta el programa. Verifique que la señal de
ruido de 2 kHz se esté cancelando gradualmente. Puede ajustar la tasa de convergencia
cambiando la beta por un factor de 10 en el programa. Acceda / cargue el programa
deslizante adaptnoise_2IN.gel y cambie la posición del control deslizante de 1 a 2.
Verifique la salida como las dos señales sinusoidales originales a 1.5 y a 2kHz.
2. Deseado: ruido aleatorio de banda ancha; no deseado: 2kHz. Ingrese ruido aleatorio (de
un generador de ruido, Goldwave, etc.) como la señal de banda ancha deseada en el
canal de entrada izquierdo y la señal de ruido sinusoidal de 2 kHz no deseada en el canal
de entrada derecho. Reinicie / ejecute el programa. Compruebe que la señal de ruido
sinusoidal de 2 kHz se cancela gradualmente, con la señal de ruido aleatorio de banda
ancha restante. Con el control deslizante en la posición 2, observe que las señales de
entrada no deseadas y deseadas son como se muestra en la Figura 7.18 a. La figura 7.18b
muestra solo la señal de ruido aleatorio de banda ancha deseada después del proceso
de adaptación.
FIGURA 7.18. Gráficos que ilustran el proceso de adaptación obtenido con un analizador de señal
utilizando adaptnoise_2IN.c; (a): interferencia sinusoidal no deseada de 2 kHz y señal deseada
de ruido de banda ancha antes de la adaptación; (b) cancelación de la interferencia de 2 kHz
después de la adaptación.