Está en la página 1de 2

#include "DSK6713_AIC23.

h" //Libreria para conectar con el DSK

Uint32 fs=DSK6713_AIC23_FREQ_48KHZ; //Define frec de muestreo

#define beta 0.00000000002 //taza de convergencia

#define N 30 //# de coeficientes

#define LEFT 0 //canal izquierdo

#define RIGHT 1 //canal derecho

float w[N]; //coeficientes para el filtro


adaptativo

float delay[N]; //buffer de las entradas para el filtro


adaptativo

short output; //variable de salida

short out_type = 1; //variable de seleccion de salida

volatile union{unsigned int uint; short channel[2];}AIC23_data;

interrupt void c_int11() //ISR

short i;

float yn=0, E=0, dplusn=0, noise=0;

AIC23_data.uint = input_sample(); //entrada de 32bits de ambos canales

dplusn =(AIC23_data.channel[LEFT]); //entrada de canal izquierdo por dplusn

noise = (AIC23_data.channel[RIGHT]); //entrada de canal derecho suma de señal


original mas ruido

delay[0] = noise; //ruido como entrada


para adaptar el FIR (coeficientes)

for (i = 0; i < N; i++) //para calcular la salida adaptada FIR

yn += (w[i] * delay[i]); //salida del filtro adaptativo

E = (dplusn) - yn; //"error" signal=(d+n)-


yn cambiamos por dplus

for (i = N-1; i >= 0; i--) //para actualizar los coeficientes

w[i] = w[i] + beta*E*delay[i]; //actualizar coeficientes del filtro

delay[i] = delay[i-1]; //actualizar muestras de entrada


}

if(out_type == 1) //si la bandera esta en 1

output=((short)E); //muestra la señal de error

else if(out_type==2) //si la bandera esta en 2

output=((short)dplusn); //muestra la señal mas el ruido

output_sample(output); //muestra el resultado segun la bandera

return;

void main()

short T=0;

for (T = 0; T < 30; T++)

w[T] = 0; //inicializa el buffer de coeficientes del filtro

delay[T] = 0; //inicializa el buffer de las muestras de entrada

comm_intr(); //inicializa DSK, codec, McBSP

while(1); //bucle infinito

También podría gustarte