You are on page 1of 5

1.

Respuesta en Amplitud del Filtro Diseñado


El filtro es pasaaltas de orden 42
2. Certificación de las Especificaciones

Imagen de banda de supresión a -70dB (Astop) y Fstop de 2400 Hz.

Imagen de banda pasante a 2dB (Apass) y Fpass de 3200 Hz.


2.1 Comprobación por Código en Matlab
3. Programa del Archivo Main, FILTRO_FIR
#include "dsk6713_aic23.h"
Uint32 fs=DSK6713_AIC23_FREQ_16KHZ;
#define N 43
float h[N] = {
0.00254779368171533,-0.0169300811667772,0.0309187206600111,
-0.0118404650561180,-0.0167344487991312,0.00162031232310781,
0.0156755555043832,0.0101335396230718,-0.00931834499519528,
-0.0201247706413481,-0.00600949714479663,0.0204615833690272,
0.0262367337821716,-0.00349520942640835,-0.0391276016759077,
-0.0319064312867497,0.0267620989868635,0.0767840570676716,
0.0358158486710738,-0.114607387320575,-0.291743410703288,
0.629465560724279,-0.291743410703288,-0.114607387320575,
0.0358158486710738,0.0767840570676716,0.0267620989868635,
-0.0319064312867497,-0.0391276016759077,-0.00349520942640835,
0.0262367337821716,0.0204615833690272,-0.00600949714479663,
-0.0201247706413481,-0.00931834499519528,0.0101335396230718,
0.0156755555043832,0.00162031232310781,-0.0167344487991312,
-0.0118404650561180,0.0309187206600111,-0.0169300811667772,
0.00254779368171533
};
float yn;
float dly[N];
short a,b;
interrupt void c_int11()
{
int i;
b = input_sample();
dly[0]=(float)(b);
for (i = 0; i< N; i++)
yn += (h[i] * dly[i]);
for (i = N-1; i > 0; i--)
dly[i] = dly[i-1];
a=(short)(yn);
output_sample(a);
return;
}
void main()
{
comm_intr();
while(1);
}
4. Descripción Del Programa:
#include "dsk6713_aic23.h"
Uint32 fs=DSK6713_AIC23_FREQ_16KHZ; //* frecuencia de muestreo dada por el trabajo 16khz.
#define N 43 //* número de coeficientes dados por el matlab
float h[N] = {
0.00254779368171533,-0.0169300811667772,0.0309187206600111,
-0.0118404650561180,-0.0167344487991312,0.00162031232310781,
0.0156755555043832,0.0101335396230718,-0.00931834499519528,
-0.0201247706413481,-0.00600949714479663,0.0204615833690272,
0.0262367337821716,-0.00349520942640835,-0.0391276016759077,
-0.0319064312867497,0.0267620989868635,0.0767840570676716,
0.0358158486710738,-0.114607387320575,-0.291743410703288,
0.629465560724279,-0.291743410703288,-0.114607387320575,
0.0358158486710738,0.0767840570676716,0.0267620989868635,
-0.0319064312867497,-0.0391276016759077,-0.00349520942640835,
0.0262367337821716,0.0204615833690272,-0.00600949714479663,
-0.0201247706413481,-0.00931834499519528,0.0101335396230718,
0.0156755555043832,0.00162031232310781,-0.0167344487991312,
-0.0118404650561180,0.0309187206600111,-0.0169300811667772,
0.00254779368171533
}; //* coeficientes dados por el matlab
float yn; //* se crea yn que es la variable donde se guarda respuesta en float.
float dly[N]; //* se crea para mover los datos a una siguiente muestra.
short a,b; //* variables a de entrada y b de salida.
interrupt void c_int11()
{
int i; //* variable creada para los "for".
b = input_sample(); //* muestra de entrada guardado en b.
dly[0]=(float)(b); //* supongo que es para el procesamiento en "float" para más defini-
ción pues b es "short".
yn = 0; //* se inicializa la salida yn en cero para que el procesamiento sea el mismo
para cada muestra.
for (i = 0; i< N; i++) //* for para la cantidad de coeficientes, pues hay que sumar cada
uno de estos para la salida yn.
yn += (h[i] * dly[i]);//* comparable a yn = yn + (h[i] * dly[i]); quiere decir que guarda
la suma de cada solución de cada cooeficiente para tener la suma total en yn.
for (i = N-1; i > 0; i--) //* for para mover los datos de una siguiente muestra,
para usar los datos correctos es la ec. en diferencias.
dly[i] = dly[i-1]; //* se cambian los lugares una muestra.
a=(short)(yn); //* se almacena el dato en a, que es la salida en short para el DAC.
output_sample(a); //* puerto de salida del DSK.
return;
}
void main()
{
comm_intr(); // Iniciar DSK, codec, McBSP
while(1); // Esperar que ocurra una interrupción
}
Se basa en el uso de la ecuación en diferencias, pues se usan los coeficientes para generar el filtro FIR pasaaltas
en este caso, genera un vector con la cantidad del número de orden del sistema + 1, se resuelven cada uno de los
valores de cada suma de productos de cada uno de los coeficientes y lo van agregando a
“yn” “yn += (h[i] * dly[i])”, y para los siguientes valores cambiará, pues ahora estarán un valor pasado
más, para arreglar eso es el segundo “for” “dly[i] = dly[i-1]” pues se mueve una posición, es decir una
muestra, y “yn” se envía mediante “a” a la salida

You might also like