You are on page 1of 19

7__

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.

FIGURA 7.1. Estructura de filtro adaptativa básica.

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.

Conceptualmente, el esquema adaptativo es bastante simple. La mayoría de los esquemas


adaptativos se pueden describir mediante la estructura que se muestra en la Figura 7.1. Esta es
una estructura básica de filtro adaptativo en la que la salida del filtro adaptativo y se compara
con una señal deseada d para producir una señal de error e, que se retroalimenta al filtro
adaptativo. La señal de error se ingresa al algoritmo adaptativo, que ajusta la filtro variable para
satisfacer algunos criterios o reglas predeterminados. La señal deseada suele ser la más difícil
de obtener. Una de las primeras preguntas que probablemente viene a la mente es: ¿por qué
intentamos generar la señal deseada en y si ya la conocemos? Sorprendentemente, en muchas
aplicaciones, la señal deseada existe en algún lugar del sistema o se conoce a priori.
El desafío en la aplicación de técnicas adaptativas es averiguar dónde obtener la señal deseada,
qué hacer la salida y, y qué hacer el error e.
Los coeficientes del filtro adaptativo se ajustan u optimizan usando un algoritmo LMS basado en
la señal de error. Aquí solo discutimos el algoritmo de búsqueda LMS con un combinador lineal
(filtro FIR), aunque hay varias estrategias para realizar el filtrado adaptativo. La salida del filtro
adaptativo en la Figura 7.1 es

donde wk (n) representa N ponderaciones o coeficientes para un tiempo específico n. La


ecuación de convolución (7.1) se implementó en el Capítulo 4 junto con el filtrado FIR. Es una
práctica común utilizar la terminología de ponderaciones w para los coeficientes asociados con
los temas en el filtrado adaptativo y las redes neuronales.
Se necesita una medida de rendimiento para determinar qué tan bueno es el filtro. Esta medida
se basa en la señal de error

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.

7.2 ESTRUCTURAS ADAPTATIVAS

Se han utilizado varias estructuras adaptativas para diferentes aplicaciones en el filtrado


adaptativo.

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),

FIGURA 7.4. Estructura de predicción adaptativa

FIGURA 7.5. Estructura de muesca adaptable con dos pesos.


El LMS es muy adecuado para una serie de aplicaciones, incluidas la cancelación y el eco
adaptativo, la ecualización y la predicción del ruido.
Se han empleado otras variantes del algoritmo LMS, como el LMS de error de señalización, el
LMS de datos de señalización y el LMS de señalización.

1. Para el algoritmo LMS de error de signo, (7.3) se convierte

donde sgn es la función signum,

2. Para el algoritmo LMS de datos de signos, (7.3) se convierte

3. Para el algoritmo LMS de signo y signo, (7.3) se convierte

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.

La implementación de estas variantes no explota las características de la tubería del procesador


TMS320C6x. La velocidad de ejecución en el TMS320C6x para estas variantes puede ser más
lenta que para el algoritmo LMS básico debido a las instrucciones de tipo de decisión adicionales
requeridas para las condiciones de prueba que implican el signo de la señal de error o la muestra
de datos.

El algoritmo LMS ha sido bastante útil en ecualizadores adaptativos, canceladores telefónicos,


etc. Otros métodos, como el algoritmo de mínimos cuadrados recursivos (RLS) [4], pueden
ofrecer una convergencia más rápida que el LMS básico, pero a expensas de más cálculos. El RLS
se basa en comenzar con la solución óptima y luego usar cada muestra de entrada para actualice
la respuesta de impulso para mantener esa optimalidad. El tamaño y la dirección del paso
correctos se definen en cada muestra de tiempo.

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

El caso de entradas múltiples se describe en la Figura 7.6. La configuración consiste en K señales


de entrada independientes, cada una de las cuales está ponderada por w (k) y combinada para
formar la salida,

La entrada se puede representar como un vector de (K + 1) -dimensional,

FIGURA 7.6. Combinador lineal con múltiples entradas.

FIGURA 7.7. Combinador lineal adaptativo con entrada simple.


donde n es el índice de tiempo y la transposición T se usa para que el vector se pueda escribir
en una línea.

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,

La entrada simple y los pesos también se pueden escribir como vectores,

donde n es el índice de tiempo, que con frecuencia se eliminará de la notación para w y x.


Usando la notación vectorial, (7.11) se lanza como

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.

Ejercicio 7.1: Dos pesos

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

Para K = 1, la ecuación (7.11) se reduce a

o con el índice de tiempo n implícito en los pesos,


FIGURA 7.8. Combinador lineal de dos pesas.

La ecuación anterior también se puede obtener usando (7.14),

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.

7.4 FUNCIÓN DE RENDIMIENTO

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 la función instantánea de error cuadrado. En términos de los pesos, se convierte

donde el índice de tiempo en el W ha sido eliminado. La ecuación (7.17) representa una


superficie cuadrática en W, lo que significa que la potencia más alta de los pesos es la potencia
cuadrada. La estrategia será ajustar los pesos para que la función de error cuadrado sea mínima.

Para comprender la ecuación de la superficie de rendimiento (7.17), considere el caso de un


peso. La superficie de error se convierte en

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

donde A, B y C son constantes.

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.

FIGURA 7.9. Curva de rendimiento de un solo peso.

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.

7.5 BUSCANDO LO MÍNIMO

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

FIGURA 7.10. Búsqueda mínima en un peso

de la derivada y la iteración para los pesos se puede expresar como

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.

La derivada de la función utilizada en la búsqueda unidimensional puede extenderse a una


superficie N-dimensional al reemplazarla con el gradiente de la función. El gradiente es un vector
de primeras derivadas con respecto a cada uno de los pesos:

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.

Similar. el mínimo de la curva de rendimiento N-dimensional ocurre cuando el gradiente


desaparece,
o cuando la derivada parcial con respecto a cada peso desaparece,

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}:

Para obtener una expresión funcional, permítanos realizar la operación de gradiente en la


función de error cuadrado,

dónde

Rendimientos de sustitución

Expandir el término de gradiente da

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.

7.6 EJEMPLOS DE PROGRAMACIÓN PARA LA CANCELACIÓN DE RUIDO E IDENTIFICACIÓN DEL


SISTEMA

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.

El archivo fuente se compiló con el compilador C / C ++ de Borland. Ejecute este programa. La


figura 7.12 muestra un gráfico de la salida del filtro adaptativo (y_out) que converge a la señal
coseno deseada. Cambie la tasa de adaptación o convergencia b a 0.02 y verifique una tasa de
adaptación más rápida.
Adaptación interactiva

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.11. Programa de filtro adaptativo compilado con Borland C / C ++ (adaptc.c).


FIGURA 7.12. Gráfico de la salida de un filtro adaptable que converge a la señal de coseno
deseada utilizando adaptc.c.

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:

1. dplusn: seno (1500 Hz) + seno (312Hz)

2. refnoise: coseno (312 Hz)

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

La constante beta determina la tasa de convergencia.

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

#include "DSK6713_AIC23.h" //codec-DSK support file


Uint32 fs= DSK6713_AIC23_FREQ_8KHZ; //set sampling rate
#include "refnoise.h" //cosine 312 Hz
#include "dplusn.h" //sin(1500) + sin(312)
#define beta 1E-10 //rate of convergence
#define N 30 //# of weights (coefficients)
#define NS 128 //# of output sample points
float w[N]; //buffer weights of adapt filter
float delay[N]; //input buffer to adapt filter
short output; //overall output
short out_type = 1; //output type for slider

interrupt void c_int11() //ISR


{
short i;
static short buffercount=0; //init count of # out samples
float yn, E; //output filter/"error" signal
delay[0] = refnoise[buffercount]; //cos(312Hz) input to adapt FIR
yn = 0; //init output of adapt filter
for (i = 0; i < N; i++) //to calculate out of adapt FIR
yn += (w[i] * delay[i]); //output of adaptive filter
E = dplusn[buffercount] - yn; //"error" signal=(d+n)-yn
for (i = N-1; i >= 0; i--) //to update weights and delays
{
w[i] = w[i] + beta*E*delay[i]; //update weights
delay[i] = delay[i-1]; //update delay samples
}
buffercount++; //increment buffer count
if (buffercount >= NS) //if buffercount=# out samples
buffercount = 0; //reinit count
if (out_type == 1) //if slider in position 1
output = ((short)E*10); //"error" signal overall output
else if (out_type == 2) //if slider in position 2
output=dplusn[buffercount]*10; //desired(1500)+noise(312)
output_sample(output); //overall output result
return; //return from ISR
}
void main()
{
short T=0;
for (T = 0; T < 30; T++)
{
w[T] = 0; //init buffer for weights
delay[T] = 0; //init buffer for delay samples
}
comm_intr(); //init DSK, codec, McBSP
while(1); //infinite loop
}

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

desired(i) = round(100*sin(2*pi*(i-1)*1500/8000)); %sin(1500)


addnoise(i) = round(100*sin(2*pi*(i-1)*312/8000)); %sin(312)
refnoise(i) = round(100*cos(2*pi*(i-1)*312/8000)); %cos(312)
end

dplusn = addnoise + desired; %sin(312)+sin(1500)

fid=fopen('sin1500.h','w'); %desired sin(1500)


fprintf(fid,'short sin1500[128]={');
fprintf(fid,' %d, ' ,desired(1:127));
fprintf(fid,' %d' ,desired(128));
fprintf(fid,'};\n');
fclose(fid);

% fid=fopen('dplusn.h','w'); %desired + noise


% fid=fopen('refnoise.h','w'); %reference noise

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

#include "DSK6713_AIC23.h" //codec-DSK support file


Uint32 fs=DSK6713_AIC23_FREQ_48KHZ; //set sampling rate
#define beta 1E-13 //rate of convergence
#define N 30 //# of weights (coefficients)
#define LEFT 0 //left channel
#define RIGHT 1 //right channel
float w[N]; //weights for adapt filter
float delay[N]; //input buffer to adapt filter
short output; //overall output
short out_type = 1; //output type for slider
volatile union{unsigned int uint; short channel[2];}AIC23_data;

interrupt void c_int11() //ISR


{
short i;
float yn=0, E=0, dplusn=0, desired=0, noise=0;
AIC23_data.uint = input_sample(); //input 32-bit from both channels
desired =(AIC23_data.channel[LEFT]); //input left channel
noise = (AIC23_data.channel[RIGHT]); //input right channel
dplusn = desired + noise; //desired+noise
delay[0] = noise; //noise as input to adapt FIR
for (i = 0; i < N; i++) //to calculate out of adapt FIR
yn += (w[i] * delay[i]); //output of adaptive filter
E = (desired + noise) - yn; //"error" signal=(d+n)-yn
for (i = N-1; i >= 0; i--) //to update weights and delays
{
w[i] = w[i] + beta*E*delay[i]; //update weights
delay[i] = delay[i-1]; //update delay samples
}
if(out_type == 1) //if slider in position 1
output=((short)E); //error signal as overall output
else if(out_type==2) //if slider in position 2
output=((short)dplusn); //output (desired+noise)
output_sample(output); //overall output result
return;
}
void main()
{
short T=0;
for (T = 0; T < 30; T++)
{
w[T] = 0; //init buffer for weights
delay[T] = 0; //init buffer for delay samples
}
comm_intr(); //init DSK, codec, McBSP
while(1); //infinite loop

FIGURA 7.17. Programa de filtro adaptativo para cancelación de ruido utilizando entradas
externas (adaptnoise_2IN.c).

Cree este proyecto como adaptnoise_2IN.

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.

FIGURA 7.18. (Continuado)

You might also like