Filtro FIR

4
//Filtro FIR – Método 1: Registro de corrimiento #include <dsk6713.h> // Soporte del chip #include <dsk6713_dip.h> // Soporte de los DIPs #include <dsk6713_led.h> // Soporte de los LEDs #include "DSK6713_AIC23.h" // Archivo de soporte del codec-DSK #include "PasaBajas.h" // Coeficientes de los filtros Uint32 fs=DSK6713_AIC23_FREQ_44KHZ; // Frecuencia de muestreo union {short canal[2]; Uint32 estereo;} entrada,salida; // Union para envío/Recepción de datos // entrada.estereo, salida.estereo contiene ambos canales // entrada.canal[0], salida.canal[0] contiene el canal izquierdo para entrada y salida, respectivamente // entrada.canal[1], salida.canal[1] contiene el canal derecho para entrada y salida, respectivamente short x_I[BL]={0}, x_D[BL]={0}; // Registro de la señal de entrada (como registro de corrimiento) interrupt void c_int11() // Rutina de servicio de interrupción { int k; // Variable para índices de los arreglos float y_I=0, y_D=0; // Variables temporales para cálculo de la salida entrada.estereo=input_sample(); // Captura de la señal de entrada x_I[0]=entrada.canal[0]; // Canal izquiero y derecho son almacenados x_D[0]=entrada.canal[1]; // al inicio del registro de corrimiento y_I=0; // Inicialización de variables para algoritmo y_D=0; // FIR de musltiplicaicón - acumulación for (k=0;k<BL;k++) { y_I += x_I[k]*B[k]; // Algoritmo FIR para y_D += x_D[k]*B[k]; // ambos canales } for (k=BL-1;k>0;k--) // Corrimiento de los datos para registro { // de corriemiento x_I[k] = x_I[k-1]; x_D[k] = x_D[k-1]; } salida.canal[0]=(short)y_I; // Captura de la salida para salida.canal[1]=(short)y_D; // ambos canales con conversión forzada a short output_sample(salida.estereo); // Envío de los dos canales a la salida de la tarjeta return; // Retorno de la interrupción } void main() // Programa principal { comm_intr(); // Inicializa el DSK, codec, McBSP while(1); // Ciclo infinito }

description

ipds

Transcript of Filtro FIR

//Filtro FIR Mtodo 1: Registro de corrimiento

#include // Soporte del chip#include // Soporte de los DIPs#include // Soporte de los LEDs#include "DSK6713_AIC23.h"// Archivo de soporte del codec-DSK

#include "PasaBajas.h"// Coeficientes de los filtros

Uint32 fs=DSK6713_AIC23_FREQ_44KHZ;// Frecuencia de muestreo

union {short canal[2]; Uint32 estereo;} entrada,salida; // Union para envo/Recepcin de datos// entrada.estereo, salida.estereo contiene ambos canales// entrada.canal[0], salida.canal[0] contiene el canal izquierdo para entrada y salida, respectivamente// entrada.canal[1], salida.canal[1] contiene el canal derecho para entrada y salida, respectivamente

short x_I[BL]={0}, x_D[BL]={0};// Registro de la seal de entrada (como registro de corrimiento)

interrupt void c_int11()// Rutina de servicio de interrupcin{int k;// Variable para ndices de los arreglosfloat y_I=0, y_D=0;// Variables temporales para clculo de la salida entrada.estereo=input_sample();// Captura de la seal de entrada

x_I[0]=entrada.canal[0];// Canal izquiero y derecho son almacenadosx_D[0]=entrada.canal[1];// al inicio del registro de corrimiento

y_I=0;// Inicializacin de variables para algoritmoy_D=0;// FIR de musltiplicaicn - acumulacinfor (k=0;k0;k--)// Corrimiento de los datos para registro {// de corriemientox_I[k] = x_I[k-1];x_D[k] = x_D[k-1];}

salida.canal[0]=(short)y_I;// Captura de la salida parasalida.canal[1]=(short)y_D;// ambos canales con conversin forzada a short

output_sample(salida.estereo);// Envo de los dos canales a la salida de la tarjeta

return;// Retorno de la interrupcin} void main()// Programa principal{

comm_intr(); // Inicializa el DSK, codec, McBSPwhile(1); // Ciclo infinito}

// Filtro FIR Mtodo 2: Buffer Circular

#include // Soporte del chip#include // Soporte de los DIPs#include // Soporte de los LEDs#include "DSK6713_AIC23.h"// Archivo de soporte del codec-DSK

#include "PasaBajas.h"// Coeficientes de los filtros

Uint32 fs=DSK6713_AIC23_FREQ_44KHZ;// Frecuencia de muestreo

union {short canal[2]; Uint32 estereo;} entrada,salida; // Union para envo/Recepcin de datos// entrada.estereo, salida.estereo contiene ambos canales// entrada.canal[0], salida.canal[0] contiene el canal izquierdo para entrada y salida, respectivamente// entrada.canal[1], salida.canal[1] contiene el canal derecho para entrada y salida, respectivamente

short x_I[BL]={0}, x_D[BL]={0};// Registro de la seal de entrada (como registro de corrimiento)int n=0;// Indice para buffer circular

interrupt void c_int11()// Rutina de servicio de interrupcin{int k,a;// Variable para ndices de los arreglosfloat y_I=0, y_D=0;// Variables temporales para clculo de la salida entrada.estereo=input_sample();// Captura de la seal de entrada

x_I[n]=entrada.canal[0];// Canal izquiero y derecho son almacenadosx_D[n]=entrada.canal[1];// en la posicin n-sima del buffer circular

y_I=0;// Inicializacin de variables para algoritmoy_D=0;// FIR de musltiplicaicn - acumulacin

a=n;for (k=0;k