You are on page 1of 13

Filtro FIR en la tarjeta de desarrollo DSK6713

1) Introduccin

La tarjeta de desarrollo TMS320C6713 es una excelente plataforma de desarrollo inicial


de aplicaciones, pues brinda herramientas muy sofisticadas para la ejecucin de
algoritmos muy complejos disponibles para diseadores con una gran experiencia en el
rea de procesamiento digital de seales. Adems provee de herramientas esenciales
para desarrollar aplicaciones bsicas para aquellos que son principiantes en esta rea.
Una aplicacin simple pero significativa es la de generar seales peridicas presentes
en cualquier generador de funciones comercial: sinusoidales, cuadradas, etc. Adems
de stas, la tarjeta de desarrollo C6713 DSK puede generar seales mucho ms
complejas como exponenciales, logartmicas, tangenciales, etc., dada su gran potencia
computacional, pues integra uno de los procesadores de seales de la familia C6000 de
Texas Instruments considerada una de sus series ms completas.

2) Objetivos
Objetivo general.
El alumno implementar y comprobar experimentalmente la funcin de
transferencia de un filtro FIR en la tarjeta de desarrollo C6713 DSK.
Objetivos particulares.
Disear filtros de respuesta finita al impulso (FIR) en Matlab.
Implementar filtros digitales FIR en el DSK de TI TMS320C6713.
Caracterizar con un generador de funciones y un osciloscopio la respuesta en
frecuencia del filtro diseado.
Realizar el filtrado digital de una seal de sonido.

3) Planteamiento del problema


Se desea disear e implementar cuatro filtros digitales del tipo FIR en un solo programa
que cumpla con los requisitos de frecuencia especificados a continuacin:
El diseo de los filtros debe realizarse utilizando cualquier funcin de diseo de
filtros FIR de Matlab.
La frecuencia de muestreo para todos los casos ser de 44.1KHz.
El filtro debe funcionar para ambos canales.
Los interruptores dip0 y dip1 seleccionarn cada uno de los siguientes filtros:
1) Filtro pasa-bajas: dip1=0,dip0=0
a. Fpass= 3.2 kHz
b. Fstop= 4.8 kHz
c. Rizo en la banda de paso menor o igual a 1dB.
d. Atenuacin mnima en la banda de rechazo de 60dB.
2) Filtro pasa-altas: dip1=0,dip0=1
a. Fstop1= 4.8 kHz
b. Fpass1= 6.4 kHz
c. Rizo en la banda de paso menor o igual a 3dB.
d. Atenuacin mnima en la banda de rechazo de 60dB.
3) Filtro pasa-banda: dip1=1,dip0=0
a. Fstop1= 1.6 kHz
b. Fpass1= 3.2 kHz
c. Fpass2= 6.4 kHz
d. Fstop2= 8 kHz
e. Rizo en la banda de paso menor o igual a 1dB.
f. Atenuacin mnima en las bandas de rechazo de 60dB.

4) Filtro pasa-banda: dip1=1,dip0=1


a. Fpass1= 1.6 kHz
b. Fstop1= 3.2 kHz
c. Fstop2= 6.4 kHz
d. Fpass2= 8 kHz
e. Rizo en las bandas de paso menor o igual a 3dB.
f. Atenuacin mnima en la banda de rechazo de 60dB.

4) Marco Terico

Filtros FIR

FIR es un acrnimo en ingls para Finite Impulse Response o Respuesta finita al


impulso. Se trata de un tipo de filtros digitales cuya respuesta a una seal impulso
como entrada tendr un nmero finito de trminos no nulos.
La ecuacin en diferencias de un filtro FIR de orden M-1 est dada por:
M i

y ( n )= bk x (nk )=b 0 x (n)+b 1 x (n1)+ b 2 x (n2)+ .. .+b M 1 x (n(M 1))


k =0

Su funcin de transferencia se puede obtener de la transformada Z de la ecuacin


anterior como:
M i

H ( z )= b k zk =b0 +b1 z1 +b 2 z2 ++b M1 z (M1)


k=0

En las ecuaciones anteriores, se puede notar que M es el nmero de coeficientes, y M-1


es el orden del filtro.
A partir de la ecuacin anterior se puede implementar un sistema, por medio de la
siguiente estructura:

Donde h ( 0 )=b0 , h ( 1 ) =b1 , h (2 )=b2 , , h ( M 1 )=b M1 son los valores de la respuesta


al impulso, o los coeficientes del filtro, que logran satisfacer sus especificaciones.
Hay que mencionar que los filtros FIR son de fase lineal, tienen coeficientes reales y
simtricos, y son inherentemente estables debido a que todos sus polos se encuentran
en z = 0 (en el origen del plano complejo z y dentro del crculo unitario); por lo tanto,
son fciles de implementar utilizando hardware o software en un DSP.
Mtodos de diseo

Mtodo de ventanas

El espectro de esta ventana tiene las siguientes caractersticas:


1) El ancho de su lbulo principal es 4/M y por lo tanto si M aumenta, ste

disminuye.
El ancho de la banda de transicin es directamente proporcional al ancho del
lbulo principal: si el ancho del lbulo principal disminuye, ms abrupta ser
la banda de transicin, es decir, ms cercano al ideal ser la respuesta en
frecuencia del filtro.
2) Los lbulos laterales son altos y no decrecen con M.
Los lbulos laterales de la ventana rectangular producen rizado en la
respuesta en frecuencia.
Para disminuir el rizado, se usan ventanas que no provoquen truncamientos abruptos.
Otras ventanas (adems de la rectangular):
Hanning, Hamming, Blackman, Kaiser, etc.
Estas ventanas tienen las siguientes caractersticas:
Disminuyen el rizado. Este suavizado disminuye con M.
Comparadas con la ventana rectangular, tienen lbulos laterales ms bajos pero
la anchura del lbulo principal es mayor.
En la convolucin proporcionan un mayor suavizado pero la regin de transicin
es ms amplia; para disminuirla se requiere aumentar la longitud de la ventana
lo que implica un filtro ms largo.
La funcin fir1 de Matlab emplea el mtodo de ventanas.

Mtodo de muestreo en frecuencia

Consiste en muestrear la respuesta en frecuencia deseada (con M puntos, el orden del


filtro ser M-1) y aplicar la Transformada Inversa de Fourier Discreta para obtener la
respuesta al impulso (discreta y finita).
Matlab implementa este mtodo en la funcin fir2() la cual debemos incluir nuestros
valores.
b = fir2(n,f,m)
Donde devuelve una fila vector b que contiene los n + 1 coeficientes de un filtro FIR de
orden n. Las caractersticas de frecuencia y magnitud de este filtro se ajustan a las
dadas por los vectores F y M, las frecuencias se colocan de forma normalizada y no en
Hz.

Mtodo ptimo

El problema fundamental de los dos mtodos de diseo anteriores es que no se tiene


un control preciso de las frecuencias de corte y supresin.

En el mtodo que se plantea en este caso, se aplica el criterio de diseo ptimo:


Como se sabe, la aproximacin de la respuesta en frecuencia produce un error. La
optimizacin se realiza en el sentido de distribuir equitativamente este error de
aproximacin a lo largo de las bandas de paso y de rechazo del filtro.
La solucin de esta funcin de optimizacin se debe a ParksMcClellan y se basa en el
teorema de la alternancia de la teora de aproximacin de Chebyshev.
Matlab implementa este algoritmo en las funciones:

[N, Fo, Ao, W]=firpmord(F,A,DEV,Fs)


Determina el orden del filtro, N (entre otros parmetros), a diferencia de las funciones
fir1() y fir2().
F es un vector de frecuencias de corte (define bandas de paso y rechazo). Por
cada banda se especifican dos frecuencias de corte en orden ascendente,
aunque no se incluyen las frecuencias 0 y Fs/2.
A es un vector de ganancias. Define la ganancia de cada banda definida en el
vector F.
DEV es un vector de desviaciones en cada banda de F.
Fs es la frecuencia de corte.
b=firpm(N, Ao, DEV, Fs): Calcula los coeficientes del filtro [b] usando los parmetros
obtenidos con firpmord().

5) Desarrollo del problema

Para el diseo de los filtros implementados en el DSP nos ayudamos con matlab y la
herramienta Filter Desing & Analysis Tools. Como sabemos accedemos a esta
herramienta escribiendo en la ventana de comandos fdatool. Se nos abre una nueva
ventana en la cual, realmente es muy intuitiva y como lo aprendimos en Procesamiento
de Seales 1, dentro de esa ventana seleccionaremos el tipo de de respuesta del filtro
que deseamos como lo es pasa bajas, pasa altas, pasa bandas y rechaza bandas.
Primero lo dejamos con el orden mnimo, colocamos las especificaciones de frecuencia
y por ltimo las especificaciones de magnitud. Las caractersticas usadas son las dadas
en el planteamiento de la prctica.
Una vez colocados los datos correspondientes hacemos clic sobre disear filtro y
comprobamos en la parte de los grficos de respuesta de magnitud si cumplen con las
caractersticas, en caso contrario ahora diseamos un nuevo filtro con igual
caractersticas pero mayor orden de filtro.

Una vez obtenida la respuesta que queremos, lo que sigue es generar las cabeceras
que contendrn los valores de los coeficientes que forman al filtro. Despendiendo del
orden del filtro ser la cantidad de coeficientes que se genere. Los coeficientes sern
del orden del filtro ms uno.

Para generar la cabecera nos vamos en la misma ventana de mens de fdatool en la


que dice Targets damos clic y despus damos clic en Generate C hearders.

Se nos abre una nueva ventana en donde colocamos los nombres que queremos que
aparezcan en el header para el nombre del numerador y la longitud del numerador.
Dejamos como punto flotante de doble precisin. Y finalmente damos en generar, nos
pedir una ubicacin donde quedar guardado el header y con esto se termina el
proceso en matlab.
Las respuestas de magnitud de los filtros implementados con matlab fueron las
siguientes, mientras que las cabeceras se anexan en el apndice.

Respuestas de magnitud (dB) de los 4 filtros diseados.

Como se menciono se crearon los archivos cabecera con los coeficientes de los
filtros.

Creacin del programa


Para poder resolver el problema se uso una tcnica la cual consista en un buffer
circular, con el objetivo de optimizar el proceso, el cual consiste en un arreglo en la
memoria de todos los coeficientes de la ecuacin de diferencias del filtro que se desea
implementar.
El cdigo que se implemento fue el siguiente:
entrada.estereo=input_sample();

x_I0[n]=entrada.canal[0];
x_D0[n]=entrada.canal[1];
y_I=0;y_D=0;
m=n;
for (k=0; k<=n; k++){
y_I+=B_0[k]*x_I0[m];
y_D+=B_0[k]*x_D0[m];
m--;}
m=M_0-1;
for (k=n+1; k<=M_0-1; k++){
y_I+=B_0[m]*x_I0[k];
y_D+=B_0[m]*x_D0[k];
m--;}
salida.canal[0]=(short)y_I;
salida.canal[1]=(short)y_D;
salida.canal[1]=entrada.canal[0];
output_sample(salida.estereo);

//Salida
del
canal
izquierdo
ya
//Salida del canal derecho ya filtrada

filtrada

//Salida

El cdigo lo que hace es que cuando ocurra una interrupcin del cdec, se guarda la
muestra actual en la variables X, se inicializan las salidas para evitar cualquier
informacin basura que pueda haber en la memoria, el ciclo FOR implementa el
algoritmo que hace que los elementos del buffer circular, donde el apuntador k
apunta a la direccin de memoria el vector de coeficientes del filtro; entonces
inicialmente m tiene el valor de cero debido a que n se inicializo con cero,
entonces para el primer ciclo solo se har una multiplicacin de entre el B[0] y X[0],
despus de eso se reinicia el valor de m con el orden del filtro a implementar, e
inicia el siguiente ciclo FOR donde se hacen las dems multiplicaciones y
acumulaciones para el resto de los factores del vector de coeficientes de la ecuacin
de diferencias , donde cada factor del vector de coeficientes se va multiplicando por
la entrada actual, esto provoca que la muestra actual se vaya recorriendo por todo
el buffer, dando como resultado la salida.
Finalmente con las ultimas 5 lneas de cogido la seal de salida y ya procesada se
mandaba a la salida por ambos canales, izquierdo y derecho, por medio de una
unin.
El cdigo anterior se hizo para los cuatro filtros, ya que los filtro que diseamos eran
todos de orden distinto, y por medio de un SWICH-CASE y los dip-swich de la tarjeta,
se eligiera el filtro que se deseaba, por lo tanto tuvimos 4 casos dentro del programa
con los diferentes tamaos de la matriz B (matriz de coeficientes de la ecuacin de
diferencias) .

Procedimos a compilar, depurar y cargar el programa a la tarjeta.

6) Anlisis de resultados
Una vez que se implementaron los circuitos, se revisaron primero con los archivos de
audio que descargamos desde ning, sin embargo ese era muy superficial y no nos daba
una certeza real de que se tratara del filtro deseado y mucho menos que tuviera la
respuesta esperada, por lo que fe necesario caracterizarlos con ayuda de un generador
de funciones.
Se coloc una seal senoidal con amplitud de 500 mV RMS como entrada y se fue
variando la frecuencia. Se modific el cdigo de tal forma que a la salida se viera en
un canal la seal de entrada y en el otro la seal filtrada. Los datos y sus grficos
obtenidos se muestran a continuacin.

Filtro Pasa Bajas


Vin
(mV)

Filtro Pasa Altas

Frecuenci
a
(Hz)
1000

Vsal
(mV)

AV
(dB)

Frecuenci
a
(Hz)

256

242

0.48849199

2000

9.36

242

-28.2507903

2000

230

242

-0.4417506

3000

9.9

241

-27.727637

3000

250

241

0.31845932

4000

10

240

-27.6042248

3200

230

240

-0.36966811

4600

10.4

240

-27.263558

3400

193

241

-1.92919467

4800

12

239

-25.9843331

3600

150

240

-4.08239965

5000

13

239

-25.289091

3800

104

239

-7.22729123

5400

25

239

-19.6091578

4000

66.9

240

-11.0957025

5800

82

238

-9.25526209

4200

35.5

338

-19.5737669

6000

113

241

-6.57877198

4400

17.5

239

-22.707197

6200

172

241

-2.92977191

4600

5.2

240

-33.284158

6400

212

241

-1.11362363

4800

240

-38.0617997

6600

246

241

0.17836129

5000

2.7

237

-38.8676916

6800

267

241

0.88988438

5500

2.7

235

-38.794082

7500

235

241

-0.21898361

8000

218

240

-0.83509496

8500
Filtro Pasa Banda
Frecuenci
a
(Hz)

Vsal
(mV)

Vin
(mV)

AV
(dB)

Frecuenci
a
(Hz)

Vsal
(mV)

Vin
(mV)

AV
(dB)

252
240
Filtro Rechaza Banda
Vsal
(mV)

Vin
(mV)

0.42378598

AV
(dB)

1000

8.46

242

-29.1289001

1000

350

317

0.86017564

1400

10

242

-27.6763073

1200

347

320

0.70358993

1600

11

242

-26.8484536

1400

324

320

0.10790064

1800

12

242

-26.0926824

1600

280

320

-1.15983894

2000

14

242

-24.7537466

1800

230

310

-2.59267716

2400

42

242

-15.2113215

2000

180

310

-4.72178377

2800

96

242

-8.03088266

2200

130

310

-7.54836683

3000

127

241

-5.56426643

2400

90

310

-10.7423837

3200

163

241

-3.39658876

2600

60

310

-14.2642089

3400

199

241

-1.66327932

2800

22

310

-22.9787803

3600

232

240

-0.29446514

3000

11

310

-28.9993802

3800

262

240

0.76180099

3400

10

310

-29.8272339

4000

286

240

1.52309583

3800

10

310

-29.8272339

4200

300

240

1.93820026

4600

10

310

-29.8272339

4400

314

240

2.33436813

5100

10

310

-29.8272339

4600

319

240

2.47158883

5500

10

310

-29.8272339

4800

320

240

2.49877473

5800

10

273

-28.7232529

5400

294

239

1.79898859

6000

10

310

-29.8272339

5800

254

238

0.56513519

6200

16

270

-24.5448756

6200

199

241

-1.66327932

6400

16

270

-24.5448756

6400

164

241

-3.34346389

6800

20

265

-22.4443176

6800

97.5

241

-7.86024854

7000

32

265

-18.3619179

7200

44.3

241

-14.7122663

7200

63

261

-12.3459992

7600

16.6

241

-23.2381791

7400

99

260

-8.38676307

8000

9.6

240

-27.9588002

7600

160

258

-4.14999447

8400

7.8

240

-29.7623328

7800

204

256

-1.97219596

8000

247

255

-0.27686454

8200

274

253

0.69260083

8400

282

251

1.01150774

8600

270

249

0.70328834

8800

250

248

0.06976656

9000

228

246

-0.6600052

9500

221

244

-0.85995105

10000

264

240

0.8278537

Resultados graficados del comportamiento real de los filtros.

7) Conclusiones
Logramos completar el objetivo de implementar 4 filtros digitales tipo FIR en la tarjeta
de desarrollo. La respuesta obtenida mediante la caracterizacin de los filtros cumple
en parte con lo esperado, sin embargo se puede notar que no tenemos en ninguno de

los 4 filtros tenemos una atenuacin de -60 dB como era esperado y de aqu tenemos
una observacin. Notamos que como la seal de entrada est en el orden de 250
milivolts en promedio, ya el osciloscopio para las seales atenuadas no se notaba
diferencia de amplitudes del orden de 10 mlivolts as que el osciloscopio se volvi un
inconveniente debido a que cuando se trata de atenuacin de 60 dB la seal sera del
orden de microvolts y eso ya no era posible ver en el osciloscopio, la seal se vea
como ruido. Sin embargo el comportamiento si fue el esperado. Las frecuencias de
corte y frecuencias de paso se cumplen, y el rizado en la banda de paso si estn en el
orden de 1 dB.

8) Referencias
[1] Rulph Chassaing, Digital Signal Processing and Applications with the
C6713 and
C6417 DSK, Ed. John Wiley & Sons.
[2] Vinay K. Ingle, John G. Proakis, Digital Signal Processing Using MATLAB,
Ed. Bookware Companion Series.
[3] Ricardo A. Losada, Digital Filters with MATLAB, The MAthWork Inc.
[4] John G. Proakis, Dimitris G. Manolakis, Tratamiento Digital de Seales,
Principios y Algoritmos, Ed. Prentice Hall, 3 Edicin.

9) Apndice
Cdigo Primera Parte
#include "fda_pl.h"
// soporte para el filtro
en matlab
#include "fda_ph.h" // soporte para el filtro
en matlab
#include "fda_pb.h" // soporte para el filtro en
matlab
#include "fda_rb.h" // soporte para el filtro
en matlab
#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

dip =
2*DSK6713_DIP_get(1)+DSK6713_DIP_get(0);
switch (dip){
case 0: //PASA BAJAS
entrada.estereo=input_
sample();
x_I0[n]=entrada.canal[0
];
x_D0[n]=entrada.canal[
1];
y_I=0;y_D=0;
m=n;
for (k=0; k<=n; k++)
{
y_I+=B_0[k]*x_I0[m];

Uint32 fs=DSK6713_AIC23_FREQ_44KHZ; //
Frecuencia de muestreo
int
dip, n=NULL;
float y_I , y_D ;
float x_I0[61] = {0}, x_D0[61] = {0};
//PASA BAJAS
float x_I1[51] = {0}, x_D1[51] = {0};
//PASA ALTAS
float x_I2[45] = {0}, x_D2[45] = {0};
//PARSA BANDA
float x_I3[51] = {0}, x_D3[51] = {0};
//RECHAZA BANDA
union {Uint32 estereo; short canal[2];}
entrada, salida;
interrupt void c_int11(){
register short m,k;

y_D+=B_0[k]*x_D0[m];
m--;
}
m=M_0-1;
for (k=n+1; k<=M_0-1;
k++)
{
y_I+=B_0[m]*x_I0[k];
y_D+=B_0[m]*x_D0[k];
m--;
}
y_I;

salida.canal[0]=(short)
//Salida del canal izquierdo ya filtrada

salida.canal[1]=(short)
y_D;
//Salida del canal derecho ya
filtrada(descomentarla)

y_D +=
B_2[k]*x_D2[m];
m--;

output_sample(salida.es
tereo);

m = M_2-1;

//Salida
for ( k=n+1; k<=M_2if(++n > (M_0-1)){
n=0;}

1; k++ ){
y_I +=
B_2[m]*x_I2[k];

break;
case 1: //PASA altas
entrada.estereo =
input_sample();
x_I1[n] =
entrada.canal[0];
x_D1[n] =
entrada.canal[1];
m = n;
y_I = 0;
y_D = 0;

y_D +=
B_2[m]*x_D2[k];
m--;
}
salida.canal[0] =
(short)y_I;
salida.canal[1] =
(short)y_D;
output_sample(salida.es
tereo);
if ( ++n>M_2-1 ){

for ( k=0 ; k<=n; k++ )

n=

0; }

break;
y_I +=

default : //RECHAZA

B_1[k]*x_I1[m];

BANDA
y_D +=

entrada.estereo =

B_1[k]*x_D1[m];

input_sample();
m--;

x_I3[n] =
entrada.canal[0];

m = M_1-1;

x_D3[n] =
entrada.canal[1];

for ( k=n+1; k<=M_1-

m = n;
y_I = 0;
y_D = 0;

1; k++ ){
y_I +=
B_1[m]*x_I1[k];
y_D +=
B_1[m]*x_D1[k];

for ( k=0 ; k<=n; k++ )


{

m--;
}
salida.canal[0] =
(short)y_I;

y_I +=
B_3[k]*x_I3[m];
y_D +=
B_3[k]*x_D3[m];

salida.canal[1] =

m--;

(short)y_D;
output_sample(salida.es

m = M_3-1;

tereo);
for ( k=n+1; k<=M_3if(++n > (M_1-1)){
n=0;}
break;
case 2: //PASA BANDAS
entrada.estereo =

1; k++ ){
y_I +=
B_3[m]*x_I3[k];
y_D +=
B_3[m]*x_D3[k];

input_sample();

m--;
x_I2[n] =

}
salida.canal[0] =

entrada.canal[0];
x_D2[n] =

(short)y_I;

m = n;
y_I = 0;
y_D = 0;

(short)y_D;

entrada.canal[1];

salida.canal[1] =
output_sample(salida.es
tereo);

for ( k=0 ; k<=n; k++ )


{

if ( ++n>M_3-1 ){
0; };

y_I +=
B_2[k]*x_I2[m];

}
}

n=

void main(){
// Programa principal
DSK6713_DIP_init();
DIP
comm_intr();
codec, McBSPwhie(1);
while(1){
}
}

// Inicializa los
// Inicializa el DSK,

Headers
// Pasa Altas

define int M 51;


define float B[51] = {
-0.003496073580974, 0.0280524202293, -0.03833669906311,-0.004697699665362,
0.01495548712826, 0.01554020257224, 0.005415194245083,-0.007243567863508,
-0.01490452661276, -0.01290076665058,-0.001571356628237, 0.01275808599648,
0.0204707139111, 0.01457487424962,-0.003654744595886, -0.02370326097763,
-0.03106126758056, -0.0164998539973, 0.01593165725014, 0.04780237160983,
0.05430036148182, 0.01780703299553, -0.0603723719511, -0.1573316958023,
-0.2373406104533, 0.731710180391, -0.2373406104533, -0.1573316958023,
-0.0603723719511, 0.01780703299553, 0.05430036148182, 0.04780237160983,
0.01593165725014, -0.0164998539973, -0.03106126758056, -0.02370326097763,
-0.003654744595886, 0.01457487424962, 0.0204707139111, 0.01275808599648,
-0.001571356628237, -0.01290076665058, -0.01490452661276,-0.007243567863508,
0.005415194245083, 0.01554020257224, 0.01495548712826,-0.004697699665362,
-0.03833669906311, 0.0280524202293,-0.003496073580974
};

//Pasa Bajas

define int M 55;


const float B[55] = {
0.0002224299800365,-0.001415715443123,-0.003011558045573,-0.005404439859984,
-0.008094895039049, -0.01040842136127, -0.01152299739928, -0.01067652667544,
-0.007450498249763, -0.00201540853336, 0.004734586277115, 0.01125154279125,
0.01563553953955, 0.0161228882808, 0.0116611875422, 0.002408832799884,
-0.01000760317487, -0.02259864019182, -0.03151633919823, -0.03288175690212,
-0.0237620128817,-0.003049057214195, 0.02800309769399, 0.06575697316249,
0.1047419247469, 0.1386833535793, 0.1617871334811, 0.1699773693711,
0.1617871334811, 0.1386833535793, 0.1047419247469, 0.06575697316249,
0.02800309769399,-0.003049057214195, -0.0237620128817, -0.03288175690212,
-0.03151633919823, -0.02259864019182, -0.01000760317487, 0.002408832799884,
0.0116611875422, 0.0161228882808, 0.01563553953955, 0.01125154279125,
0.004734586277115, -0.00201540853336,-0.007450498249763, -0.01067652667544,
-0.01152299739928, -0.01040842136127,-0.008094895039049,-0.005404439859984,
-0.003011558045573,-0.001415715443123,0.0002224299800365
};

//Pasa Banda

define int M 74;


define float B[74] = {
-0.0009564311899482,-0.0008597977258192,-0.0003460023156908,0.0005189160117922,
0.0009437108129382,0.0005268408232208,-9.438889604537e-06, 0.000766999391035,
0.003418725743864, 0.006342804529009, 0.006446433540937, 0.001847649607558,
-0.005658094865938, -0.01115288271298, -0.01054626555382,-0.004723935097368,
0.0004106856388873,-0.0009002081828433,-0.008031334682152, -0.01296712997867,
-0.006887971814144, 0.01065744655926, 0.02887492945267, 0.03359941729459,
0.02037312212019,0.0006204366192867,-0.006901177109389, 0.00589763589212,
0.02490438758624, 0.02187855227553, -0.0208529987301, -0.08860416487024,
-0.1364278109176, -0.1186093047722, -0.02558127490101, 0.1011802934823,
0.1912925789227, 0.1912925789227, 0.1011802934823, -0.02558127490101,
-0.1186093047722, -0.1364278109176, -0.08860416487024, -0.0208529987301,
0.02187855227553, 0.02490438758624, 0.00589763589212,-0.006901177109389,
0.0006204366192867, 0.02037312212019, 0.03359941729459, 0.02887492945267,
0.01065744655926,-0.006887971814144, -0.01296712997867,-0.008031334682152,
-0.0009002081828433,0.0004106856388873,-0.004723935097368, -0.01054626555382,
-0.01115288271298,-0.005658094865938, 0.001847649607558, 0.006446433540937,
0.006342804529009, 0.003418725743864, 0.000766999391035,-9.438889604537e-06,
0.0005268408232208,0.0009437108129382,0.0005189160117922,-0.0003460023156908,
-0.0008597977258192,-0.0009564311899482

};

//Rechaza Banda

define int M 51;


define float B[51] = {
0.02029278785453, -0.0412663390496, 0.009034708953064, 0.01429756858468,
-0.001537217875769, -0.01873376948737, -0.02438036497634, -0.01618566794445,
-0.003817739436783,-0.001314352760284, -0.01401843293522, -0.03100139287881,
-0.03343573706689, -0.01295789945134, 0.01688522065888, 0.03100210018564,
0.0176888830526,-0.005148338999993,-0.001865840295888, 0.04595612095991,
0.1133937811401, 0.1420570200377, 0.08546862518079, -0.04639425529779,
-0.1837086742531, 0.7579939757744, -0.1837086742531, -0.04639425529779,
0.08546862518079, 0.1420570200377, 0.1133937811401, 0.04595612095991,
-0.001865840295888,-0.005148338999993, 0.0176888830526, 0.03100210018564,
0.01688522065888, -0.01295789945134, -0.03343573706689, -0.03100139287881,
-0.01401843293522,-0.001314352760284,-0.003817739436783, -0.01618566794445,
-0.02438036497634, -0.01873376948737,-0.001537217875769, 0.01429756858468,
0.009034708953064, -0.0412663390496, 0.02029278785453
};