Diseño de un filtro digital FIR pasabanda

Informática. Método de Fourier. Líneas de código. Pantallas. Lenguaje C

  • Enviado por: Ariel Oliva Ramirez
  • Idioma: castellano
  • País: México México
  • 35 páginas
publicidad
publicidad

Indice

Tema Pagina

Objetivo: 1

Justificación: 1

Introducción:

Método de fourier: 2

Ventanas: 2

Rectangular: 2

Hamming: 2

Blackman: 3

Filtros: 4

Convolución: 5

Diseño del filtro: 7

Líneas de código 8

Función TDF 9

Función FFT 10

Función calculos_rechazabanda 11

Código en lenguaje C 14

Pantallas 23

Carátula 23

Señal de entrada 23

Grafica del seno 24

TDF 24

FFT 27

Ventana rectangular 30

Ventana hamming 34

Ventana blackman 38

OBJETIVO:

El presente trabajo desarrolla el programa de un filtro digital FIR de orden impar, del tipo pasabanda implementado con el software “Turbo C++” versión 3.0.

El programa filtra una señal seno, con frecuencia, amplitud y frecuencia de muestreo a seleccionar, e incluye los algoritmos de la Transformada Discreta de Fourier, así como la Transformada Rápida de Fourier. Los diferentes parámetros del filtro digital se pueden proponer al correr el programa.

JUSTIFICACION:

Podemos darnos cuenta que la tendencia actual es la migración de la tecnología analógica a la digital, en nuestro caso el filtrado digital ofrece varias ventajas con respecto a los filtrados analógicos:

  • El ancho de banda de un filtro digital esta limitado por la frecuencia de muestreo, mientras que en un filtro analógico, este parámetro depende de las características de los componentes físicos.

  • Se pueden implementar tanto en software como en hardware.

  • Al no contener componentes físicos, no sufre desgaste ni limitaciones, propias de los elementos eléctricos.

INTRODUCCION:

Método de Fourier

La respuesta en frecuencia de un filtro digital es periódica. Del análisis de las series de Fourier sabemos que cualquier función periódica puede expresarse como una combinación lineal de exponentes complejas. Por lo tanto la respuesta deseada de un filtro digital FIR puede ser expresada por las series de Fourier.

Ventanas

El truncamiento de las series de Fourier produce los filtros FIR con oscilaciones indeseables en la banda de paso y en la banda de rechazo, las cuales resultan de la lenta convergencia de las series de Fourier. Para reducir estas oscilaciones, una clase particular de funciones son usadas para modificar los coeficientes de Fourier (respuesta al impulso), estas son llamadas ventanas El truncamiento de las series infinitas de Fourier es equivalente a la multiplicación de los coeficientes con la función ventana.

  • Rectangular

Es la más ineficiente:

La atenuación máxima de ventana rectangular es de 13 decibeles.

  • Hamming

La ecuación para calcular los coeficientes de una ventana de Hamming es:

La atenuación máxima de la ventana hamming es de 43 decibeles.

Diseño de un filtro digital FIR pasabanda

  • Blackman

Los coeficientes para la ventana blackman son:

Las ventanas de Blackman tienen lóbulos centrales levemente más anchos y menos

salida de la banda lateral que la longitud equivalente Hamming. La atenuación

máxima de la ventana blackman es de 58 decibeles

Diseño de un filtro digital FIR pasabanda

Filtros

El procesamiento de señales digitales es fundamental en muchas áreas de la

Informática Industrial relacionadas con el control y la regulación automática.

Los filtros son usados en muchas aplicaciones, algunas de las cuales se citan a

continuación:

o Filtro Paso Bajo.- Deja pasar frecuencias bajas, y atenúa lasaltas.

o Filtro Paso Alto.- Deja pasar frecuencias altas, y atenúa las bajas.

o Filtro Paso Banda.- Deja pasar las frecuencias que se encuentren dentro de un intervalo.

o Filtro RechazaBanda.- No deja pasar las frecuencias que se encuentren dentro de un intervalo.

Filtros recuperadores de señal:

Filtros basados en Funciones de Transferencia.

Filtros de convolución. Normalmente usados para el control en lazo cerrado de una planta lineal e invariante en el tiempo.

Filtros de Respuesta Finita al Impulso (Finite Impulse Response - FIR) y de Respuesta Infinita al Impulso (Infinite Impulse Response - IIR), y otro tipo de filtros avanzados basados en transformada Z.

Filtros para encontrar patrones, de análisis de la señal, etc.:

La Transformadas Rápidas de Fourier (Fast Fourier Transorm - FFT). Usados para obtener el espectro de la señal (la distribución de energías en diferentes frecuencias), o como base para construir correladores y filtros de convolución optimizados

en velocidad.

La posibilidad de realización de filtros digitales ha sido un factor fundamental en el desplazamiento de los clásicos filtros analógicos, que en lo relativo al control están ya relegados a un segundo plano. Por otra parte, los filtros digitales requieren de sistemas digitales complejos, y sólo se justifica su uso en aquellas aplicaciones en las que esto no sea un inconveniente.

La Convolución.

La convolución es una operación matemática que multiplica señales entre sí.

Dadas las señales h(t) y g(t) continuas de tiempo continuo, su convolución f(t)

estará expresada por:

Diseño de un filtro digital FIR pasabanda

Esta definición es válida para el tiempo continuo, sin embargo en el campo digital, se usa la siguiente:

Diseño de un filtro digital FIR pasabanda

Las dos expresiones asumen que h[n] = 0 para n < 0. En el caso de que esto no fuera así, el intervalo inferior podría ponerse como -8.

En la siguiente figura se muestra una representación gráfica de la multiplicación que realiza la convolución:

Diseño de un filtro digital FIR pasabanda

Los términos que aparecen vinculados con una fecha continua serían los que se multiplicasen. Si la flecha aparece discontinua, significa que a partir de ahí, alguno de los multiplicandos es 0, por lo que el resultado es 0.

En la figura, la función h[n] toma valores no todos 0 únicamente para el intervalo 0 = n < 10. A esta señal la llamaremos Función de Transferencia (FdT), cuyo significado es la respuesta que ofrece un sistema ante una entrada impulsiva de valor (energía) unidad.

El intervalo en el que g[n] toma valores no todos 0 lo consideraremos mucho más grande. Esta es la señal a filtrar, que proviene normalmente de la digitalización de alguna magnitud física.

DISEÑO DEL FILTRO:

En este apartado se mostrara el procedimiento de diseño del filtro basándose en el código del programa. Por tal motivo se numeraron las líneas del código fuente para su mejor ilustración.

A groso modo el programa realiza lo siguiente:

  • Pide los parámetros de la señal de entrada, frecuencia, amplitud y la frecuencia de muestreo.

  • Muestra la grafica de la señal de entrada.

  • Pide el número de muestras para el calculo de la TDF.

  • Aparecen los resultados de la TDF.

  • Muestra los resultados de la magnitud y fase de la TDF.

  • Grafica la magnitud de la TDF.

  • Grafica la fase de la TDF.

  • Pide el número de muestras para el calculo de la FFT

  • Muestra los resultados de la FFT

  • Grafica la magnitud de la FFT

  • Grafica la fase de la FFT

  • Pide los parámetros del filtro rechaza banda; fp1(frecuencia de paso 1), fs1(frecuencia de rechazo 1), fs2(frecuencia de rechazo 2), fp2(frecuencia de paso 2), as(atenuación en la banda de rechazo) y ap(atenuación en la banda de paso); también muestra la frecuencia de muestreo, el orden del filtro, la frecuencia mínima y las frecuencias centrales.

  • Muestra los coeficientes del filtro, dependiendo de la ventana.

  • Muestra los coeficientes de la ventana correspondiente

  • Muestra los coeficientes ventaneados correspondientes.

  • Aparecen las muestras de la señal seno.

  • Muestra los coeficientes obtenidos de la convolución

  • Grafica los coeficientes de la convolución.

  • Grafica la respuesta en frecuencia del filtro.

LÍNEAS DE CÓDIGO:

1-7.

Se colocan las distintas librerías a usar

8.

Declaración de la función modografico: Pasa al modo grafico

9.

Declaración de la función fft: Calcula la FFT, y grafica su magnitud y fase.

10.

Declaración de la función carátula: Carátula del programa

11.

Declaración de la función tipodeventana: Elección del tipo de ventana; rectangular, hamming o blackman.

12

Declaración de la función calculos_rechazabanda: Pide los parámetros del

filtro, y realiza los cálculos del filtro, para obtener el orden, los coeficientes

del filtro, de la ventana y el ventaneo.

13

Función seno: Pide los parámetros de la señal de entrada y grafica la señal.

14

Función senal: Calcula las muestras para la convolucion.

15

Función tdf: Calcula la TDF, la fase y la magnitud, muestra las graficas de la magnitud y la fase.

16

Función respuesta_frecuencia: Calcula la respuesta en frecuencia del filtro.

17

Función convolución: Multiplica los coeficientes ventaneados por las muestras de la señal de entrada.

18-29.

Declaración de la variables

30-48

Función principal main, llama a las distintas funciones y cuando termina pregunta si se desea correr el programa nuevamente.

49-51.

Ruta de los BGI necesarios para correr los gráficos en el programa

52-69.

Carátula del programa

70-109.

Función seno, pide los parámetros de la señal de entrada, frecuencia(frecsenal), amplitud(amplitud) y frecuencia de muestreo(paso). Grafica la señal seno de entrada.

110-187.

Función tdf, pide el numero de las muestras y calcula la TDF mediante la formula

Calcula la magnitud y la fase mediante.

188-269

Función FFT

Nodo simple:

Nodo dual:

Parámetro W a la P:

Para obtener P.

  • convertir k a binario

  • desplazar -l bits a la derecha

  • Invertir el resultado obtenido

  • convertir a decimal

  • 270-289

    Funcion tipodeventana: Simplemente pide que se seleccione el tipo de ventana que se va a utilizar.

    290-396

    Pide los siguientes parámetro: fp1.fr1,fr2,fp2,as y ap y realiza los siguientes cálculos:

    Parámetro D:

    Deltas:

    Delta f:

    Orden del filtro:

    Ord:

    Calculo de los coeficientes por el método de Fourier:

    1 para/f/"fc1

    H(ej2/T)= 0 para fc1< /f/ >fc2

    1 para para fc1" /f/" F/2

    Calculando tenemos:

    hd(n)=

    para n>0

    de la formula anterior tenemos que el

    Finalmente llegamos a:

    Los coeficientes de las ventanas seran:

    Para la ventana rectangular:

    Para la ventana hamming:

    Para la ventana blackman:

    El ventaneo resultara de:

    397-407.

    Muestrea la señal seno de entrada

    408-436

    Convoluciona la ventaneado con las muestras de la señal de entrada.

    437-473

    Respuesta en frecuencia del filtro:

  • #include<math.h>

  • #include<iostream.h>

  • #include<complex.h>

  • #include<conio.h>

  • #include<stdio.h>

  • #include<graphics.h>

  • #include<stdlib.h>

  • void modografico(void); //*****Entra al modo grafico***

  • void fft(void); //***Transformada Rapida de Fourier***

  • void caratula(void); //***Caratula***

  • void tipodeventana(void); //***Seleccion de la ventana***

  • void calculos_rechazabanda(void); //***Calculos para el filtro***

  • void seno(void); //***se¤al de entrada***

  • void senal(void);

  • void tdf(void); //***Transfomada Discreta de Fourier***

  • void respuesta_frecuencia(void);

  • void convolucion(void);

  • int num,a2,controlador, modo;

  • int n1f,q,n,nada,k,l,hf,salto,j,dfft[40][40],k1,contador,bfft[40][40],contador2[40],e,r;

  • float zz[40],z[40],temp,max,x1f,y1f,PI=3.141592654;

  • char flechafft[5], datofft[10],dato2fft[10];

  • double w;

  • complex x[40][40],hh,wp,xx[40];

  • float interval=0,yseno,xseno,x1,y1, fs1,fs2,fp1,fp2,f,ap,as,hPb[64],h[64],aw,

  • df1,df2,d,fc1,fc2,fmin,ord,n1,valor,coef[64],i,yy[312],sum[312],M[312],

  • signal[64],cont,a,t,ff;

  • int u,c,n2;

  • double total;

  • char flecha[10],datof[10],cs,graffrecuencia[20],grafamplitud[20];

  • void main(void){ //************menu principal*************

  • char cd;

  • caratula();

  • do{

  • seno();

  • tdf();

  • fft();

  • tipodeventana();

  • calculos_rechazabanda();

  • senal();

  • convolucion();

  • respuesta_frecuencia();

  • textbackground(4);

  • gotoxy(25,5);cprintf(" Desea realizar el calculo nuevamente ");

  • gotoxy(25,6);cprintf(" presione 's' ");

  • cd=getche();

  • }

  • while(cd=='s'||cd=='S');

  • }

  • void modografico(void){

  • controlador=DETECT;

  • initgraph(&controlador,&modo,"\\tc\\bgi");}

  • void caratula(void){ //**********funcion caratula*************

  • modografico();

  • settextjustify(CENTER_TEXT,CENTER_TEXT);

  • settextstyle(DEFAULT_FONT,HORIZ_DIR,3);

  • setcolor(4); outtextxy(320,90,"FILTRO RECHAZA BANDA");

  • gotoxy(20,11);printf("\tIntegrantes:\n "

  • "\n\t\t\t\t Aldana Cruz Ruben\n"

  • "\n"

  • "\t\t\t\t Oliva Ramirez Ariel\n"

  • "\n");

  • gotoxy(26,20);

  • setcolor(2); rectangle(190,300,475,340);

  • rectangle(187,297,478,343);

  • rectangle(10,10,629,469);

  • rectangle(15,15,624,464);

  • setcolor(4); printf("Presione una tecla para continuar");

  • getche();

  • closegraph();}

  • void seno(void){

  • textbackground(0); clrscr(); textbackground(1);

  • gotoxy(25,7);cprintf(" ");

  • gotoxy(25,8);cprintf(" LA SE¥AL A FILTRAR ES SENOIDAL ");

  • gotoxy(25,9);cprintf(" ¨Cual es el valor de la frecuencia?: ");

  • scanf("%f",&ff);

  • gotoxy(25,10);cprintf(" ¨Cual es valor de la amplitud?: ");

  • scanf("%f",&a);

  • salto:

  • gotoxy(25,11);cprintf(" ¨Cuanto vale la frecuencia de muestreo ");

  • scanf("%f",&interval);

  • if(interval<2*ff){

  • printf("\n\n\t\t\t\tNo es mayor que 2*f");

  • goto salto;}

  • interval=1/interval;

  • gotoxy(25,12);cprintf(" ");

  • textbackground(4);

  • gotoxy(30,14);cprintf(" Enter Para Continuar ");getche();

  • modografico();

  • line(50,240,640,240);

  • line(50,0,50,480);

  • setcolor(2); settextstyle(DEFAULT_FONT,1,0);

  • sprintf(grafamplitud,"Amplitud = %.0f [u]",a);

  • outtextxy(25,10,grafamplitud);

  • settextstyle(DEFAULT_FONT,0,0);

  • setcolor(2);

  • sprintf(graffrecuencia,"Frecuencia = %.0f [hz]",ff);

  • outtextxy(450,462,graffrecuencia);

  • setcolor(14);outtextxy(320,1,"Grafica del seno");

  • setcolor(15);

  • for(u=90;u<=545;u+=91){

  • line(51+u,235,51+u,245);}

  • for(u=45;u<=225;u+=45){

  • line(45,240+u,55,240+u);

  • line(45,240-u,55,240-u);}

  • outtextxy(36,237,"0");

  • for(xseno=0;xseno<=19*PI; xseno=xseno+0.009){

  • yseno=160*sin(xseno);

  • putpixel(50+(xseno*29),240-yseno,4);}

  • getche();}

  • void tdf(void){ //*********Transformada Discreta de Fourier******

  • int u1/*,num*/,muestra,i1,magnitud2[32];

  • float intervalo,t1,indice,yi[50],mag[32],fas[32],k1,x1,y1;

  • char dato[10],datof[10],numname[80],flecha[2], vertical[2],horizontal[2];

  • complex y_total=complex(0,0),z=complex(0,0),muestra2[32],

  • magnitud[32],fase[32];

  • for(i1=1; i1<=20; i1++){muestra2[i1]=complex(0,0);

  • magnitud[i1]=complex(0,0);

  • magnitud2[i1]=0;

  • fase[i1]=complex(0,0);

  • yi[i1]=0;}

  • float pi=3.1415926535897932384626433832795;

  • modografico();

  • restorecrtmode();

  • textbackground(0); clrscr(); textbackground(1);

  • gotoxy(20,7);cprintf(" ");

  • gotoxy(20,8);cprintf(" TRANSFORMADA DISCRETA DE FOURIER ");

  • gotoxy(20,9);cprintf(" %.0f*sen(2*%.0f*pi*t) ",a,ff);

  • gotoxy(20,10);cprintf(" ");

  • textbackground(4);

  • gotoxy(20,12);cprintf(" Introducir el numero de muestras: ");

  • scanf("%d",&num);

  • int increm=0;

  • for(t1=0; t1<=interval*(num-1)+interval; t1=t1+interval){

  • yi[increm]=(a*sin((2*ff*pi*t1)*PI/180)); //******calculo de muestras*****

  • printf("\t\t\t h%.0d(%.4f) = %.0f*sin(2*%.0f*pi*%.4f) = %.4f\n",increm,t1,a,ff,t1,yi[increm]);

  • increm++;}

  • getche();

  • textbackground(0); clrscr(); textbackground(1);

  • gotoxy(20,2);cprintf(" ");

  • gotoxy(20,3);cprintf(" Transformada Discreta de Fourier ");

  • gotoxy(20,4);cprintf(" \n");

  • printf("\n");

  • textbackground(4);

  • for(muestra=0; muestra<=(num-1); muestra++){ //*****TDF*****

  • y_total=complex(0,0);

  • for(k1=0; k1<=(num-1); k1++){

  • z=yi[k1]*exp(2*complex(0,-1)*pi*k1*muestra/num);

  • y_total=y_total+z;}

  • muestra2[muestra]=y_total;

  • printf("\t\t\ty(%d)=",muestra);

  • cout <<"" <<y_total<<"\n";}

  • getche();

  • textbackground(0); clrscr(); textbackground(1);

  • gotoxy(20,2);cprintf(" ");

  • gotoxy(20,3);cprintf(" Magnitud y fase de la TDF ");

  • gotoxy(20,4);cprintf(" \n");

  • printf("\n");

  • for(muestra=0; muestra<=(num-1); muestra++){ //***magnitud y fase***

  • y_total=complex(0,0);

  • for(k1=0; k1<=(num-1); k1++){

  • z=yi[k1]*exp(2*complex(0,-1)*pi*k1*muestra/num);

  • y_total=y_total+z;}

  • cout<<"\t\tmagnitud: " <<abs(y_total)<< "";

  • magnitud[muestra]=abs(y_total);

  • cout<<"\t fase: " <<(arg(y_total))*180/PI<< "\n";

  • fase[muestra]=arg(y_total);}

  • getche();

  • setgraphmode(getgraphmode()); //******grafica de la magnitud****

  • setcolor(15);

  • line(50,375,640,375);

  • line(50,0,50,480);

  • setcolor(2);

  • settextstyle(DEFAULT_FONT,1,0);

  • outtextxy(25,10,"Magnitud");

  • settextstyle(DEFAULT_FONT,0,0);

  • outtextxy(555,395,"Muestras");

  • settextstyle(DEFAULT_FONT,0,1);

  • outtextxy(118,20,"Magnitud de la transformada discreta de fourier");

  • setcolor(15);

  • for(u1=25;u1<=600;u1+=25){

  • line(50+u1,370,50+u1,380);}

  • for(u1=25;u1<=480;u1+=25){

  • line(45,u1,55,u1);}

  • outtextxy(35,374,"0");

  • for(muestra=0;muestra<=(num-1); muestra++){

  • mag[muestra]=real(magnitud[muestra]);

  • setcolor(4);

  • line(75+muestra*25,375,75+muestra*25,375-25*mag[muestra]);

  • x1=75+muestra*25;

  • y1=375-25*mag[muestra];

  • setcolor(4); sprintf(flecha,"_"); //*****flechas***

  • outtextxy(x1-3,y1-2, flecha);

  • setcolor(2); sprintf(dato,"%.2f",mag[muestra]);

  • outtextxy(x1-3,y1-10,dato);}

  • getche();

  • cleardevice();

  • setcolor(15); //*********grafica de la fase

  • line(50,240,640,240);

  • line(50,0,50,480);

  • setcolor(2);

  • settextstyle(DEFAULT_FONT,1,0);

  • outtextxy(25,10,"Fase");

  • settextstyle(DEFAULT_FONT,0,0);

  • outtextxy(555,255,"Muestras");

  • settextstyle(DEFAULT_FONT,0,1);

  • outtextxy(118,20,"Fase de la transformada discreta de fourier");

  • setcolor(15);

  • for(u1=25;u1<=600;u1+=25){

  • line(50+u1,235,50+u1,245);}

  • for(u1=15;u1<=480;u1+=25){

  • line(45,u1,55,u1);}

  • outtextxy(35,244,"0");

  • for(muestra=0;muestra<=(num-1); muestra++){

  • fas[muestra]=real((fase[muestra])*180/PI);

  • setcolor(4);

  • line(50+muestra*25,240,50+muestra*25,240-1*fas[muestra]);

  • x1=50+muestra*25;

  • y1=240-1*fas[muestra];

  • if(y1<=240){

  • sprintf(flecha,"_"); //*****flechas superiores******

  • outtextxy(x1-3,y1-2, flecha);

  • setcolor(2);sprintf(datof,"%.2f",fas[muestra]);

  • outtextxy(x1-3,y1-10,datof);}

  • if(y1>240){

  • sprintf(flecha,"_"); //*****flechas inferiores******

  • outtextxy(x1-3,y1-2, flecha);

  • setcolor(2); sprintf(datof,"%.2f",fas[muestra]);

  • outtextxy(x1-3,y1+10,datof);}}

  • getche();

  • closegraph();}

  • void fft(void){

  • a0:

  • textbackground(0);clrscr();textbackground(1);

  • gotoxy(22,6);cprintf(" TRANSFORMADA RAPIDA DE FOURIER ");

  • gotoxy(22,7);cprintf(" ¨Cuantas muestras son? ");

  • scanf("%d",&n);

  • if((n<=0)||(n>32)||(n!=2)&&(n!=4)&&(n!=8)&&(n!=16)&&(n!=32)) goto a0;

  • textbackground(4);

  • gotoxy(22,25);cprintf(" Enter Para Continuar ");getche();

  • if(n==2) nada=1;

  • if(n==4) nada=2;

  • if(n==8) nada=3;

  • if(n==16) nada=4;

  • if(n==32) nada=5;

  • textbackground(0);clrscr();textbackground(1);

  • int increm=0;

  • float h,t1;

  • textbackground(1);

  • gotoxy(24,1);cprintf(" Muestras de la se¤al ");

  • printf("\n");

  • for(t1=0; t1<=interval*(n-1)+interval; t1=t1+interval){

  • x[0][increm]=a*sin((2*ff*PI*t1)*PI/180); //******calculo de muestras*****

  • printf("\t\t\t h%.0d(%.4f) = %.4f\n",increm,t1,x[0][increm]);

  • increm++;

  • }

  • textbackground(4);

  • gotoxy(26,25);cprintf(" Enter Para Continuar ");getche();

  • for(k=0;k<=n-1;k++){

  • a2=k;

  • for(l=0;l<=nada-1;l++){

  • dfft[k][l]=a2 % 2;

  • a2=a2/2;}}

  • hf=nada-1;

  • for(l=1;l<=nada;l++){

  • salto=n/pow(2,l);

  • j=nada-l;

  • k1=0;

  • for(k=0;k+salto<=n-1;k++){

  • if(k1==salto){

  • k1=0;

  • k=k+salto;}

  • for(a2=0;a2<=nada-1;a2++){

  • contador=dfft[k][hf-a2+j]*pow(2,a2);

  • bfft[l][k]=bfft[l][k]+contador;

  • w=(-2*PI*bfft[l][k])/n;

  • hh=complex(0,w);

  • wp=exp(hh);}

  • x[l][k]=x[l-1][k]+wp*x[l-1][k+salto];

  • x[l][k+salto]=x[l-1][k]-wp*x[l-1][k+salto];

  • k1++;}}

  • textbackground(0);clrscr();textbackground(1);

  • for(k=0;k<=n-1;k++){

  • for(a2=0;a2<=nada-1;a2++){

  • contador=dfft[k][hf-a2]*pow(2,a2);

  • contador2[k]=contador2[k]+contador;}}

  • for(k=0;k<=n-1;k++){

  • xx[k]=x[nada][contador2[k]];}

  • gotoxy(20,1);cprintf(" FFT(Transformada Rapida de Fourier ");

  • for(k=0;k<=n-1;k++){

  • gotoxy(29,k+3);cout<<"x["<<k<<"]="<<xx[k];}

  • textbackground(4);

  • gotoxy(20,25);cprintf(" Enter Para Continuar ");getche();

  • modografico();

  • line(60,0,60,480); line(60,240,640,240); //***grafica de la magnitud**

  • settextstyle(DEFAULT_FONT,1,1);

  • setcolor(2);outtextxy(25,5,"|X(n)|");

  • settextstyle(DEFAULT_FONT,0,1);

  • outtextxy(570,250,"muestras");

  • outtextxy(290,10," Magnitud de la funcion FFT");

  • for(n1f=0;n1f<=n;n1f++){

  • z[n1f]=abs(xx[n1f]);

  • for(q=0;q<=n-1;q++){

  • zz[q]=z[q];}

  • for(r=0;r<=n-1;r++)

  • for(e=r+1;e<=n-1;e++)

  • if(zz[r]<zz[e]){

  • temp=zz[r];

  • zz[r]=zz[e];

  • zz[e]=temp;}

  • max=zz[0];

  • setcolor(4);

  • line(60+(n1f*(580/n)),240,60+(n1f*(580/n)),240-(z[n1f]*(220/max)));

  • x1f=(60+(n1f*(580/n)));

  • y1f=240-(z[n1f]*(220/max));

  • setcolor(4); sprintf(flechafft,"_"); //*****flechas***

  • outtextxy(x1f-3,y1f-2, flechafft);

  • setcolor(2); sprintf(datofft,"%.2f",z[n1f]);

  • outtextxy(x1f-3,y1f-10,datofft);}

  • getche();

  • cleardevice(); //****grafica de la fase*****

  • settextstyle(DEFAULT_FONT,1,1);

  • setcolor(2);outtextxy(25,5,"Fase");

  • settextstyle(DEFAULT_FONT,0,1);

  • outtextxy(570,250,"muestras");

  • outtextxy(290,10," Fase de la funcion FFT");

  • setcolor(15);

  • line(60,0,60,480);

  • line(60,240,640,240);

  • for(n1f=0;n1f<=n-1;n1f++){

  • z[n1f]=((arg(xx[n1f]))*180)/PI;

  • setcolor(4);

  • line(60+(n1f*(580/n)),240,60+(n1f*(580/n)),240-(z[n1f]));

  • x1f=(60+(n1f*(580/n)));

  • y1f=(240-(z[n1f]*1));

  • if(y1f<=240){

  • setcolor(4);sprintf(flechafft,"_"); //*****flechas superiores******

  • outtextxy(x1f-3,y1f-2, flechafft);

  • setcolor(2);sprintf(datofft,"%.2f",z[n1f]);

  • outtextxy(x1f-3,y1f-10,datofft); }

  • if(y1f>240){

  • setcolor(4);sprintf(flechafft,"_"); //*****flechas inferiores******

  • outtextxy(x1f-3,y1f-2, flechafft);

  • setcolor(2); sprintf(dato2fft,"%.2f",z[n1f]);

  • outtextxy(x1f-3,y1f+10,dato2fft);} }

  • getche();

  • closegraph();}

  • void tipodeventana(void){

  • textbackground(0); clrscr(); textbackground(1);

  • gotoxy(32,8);cprintf(" ");

  • gotoxy(32,9);cprintf(" TIPO DE VENTANA ");

  • gotoxy(32,10);cprintf(" a). Ventana rectangular ");

  • gotoxy(32,11);cprintf(" b). Ventana hamming ");

  • gotoxy(32,12);cprintf(" c). Ventana blackman ");

  • gotoxy(32,13);cprintf(" ");

  • gotoxy(32,14);cprintf(" ");

  • textbackground(4);

  • primero:

  • gotoxy(32,17);cprintf(" Eliga la opcion ");

  • cs=getche();

  • switch(cs){

  • case 'a':break;

  • case 'b':break;

  • case 'c':break;

  • case 's'||'S': exit(10);

  • default:;}

  • }

  • void calculos_rechazabanda(void){

  • textbackground(0); clrscr(); textbackground(1);

  • gotoxy(25,4);cprintf(" ");

  • gotoxy(25,5);cprintf(" PARAMETROS DEL FILTRO ");

  • gotoxy(25,6);cprintf(" Frecuencia de paso, 'Fp1' [Hz]: ");

  • scanf("%f",&fp1);

  • etiqueta1:

  • gotoxy(25,7);cprintf(" Frecuencia de rechazo, 'Fs1'>Fp1 [Hz]: ");

  • scanf("%f",&fs1);

  • if (fs1<=fp1){ gotoxy(30,7);delline();

  • goto etiqueta1;}

  • etiqueta2:

  • gotoxy(25,8);cprintf(" Frecuencia de rechazo, 'Fs2'>Fs1 [Hz]: ");

  • scanf("%f",&fs2);

  • if (fs2<=fs1){ gotoxy(30,8);delline();

  • goto etiqueta2;}

  • etiqueta3:

  • gotoxy(25,9);cprintf(" Frecuencia de paso, 'Fp2'>Fs2 [Hz]: ");

  • scanf("%f",&fp2);

  • if (fp2<=fs2){ gotoxy(25,9);delline();

  • goto etiqueta3;}

  • gotoxy(25,10);cprintf(" ");

  • f = 2*fp2;

  • gotoxy(25,12);printf(" Frecuencia de muestreo ");

  • gotoxy(25,14);printf(" F = (2*fp2) = %.0f ",f);

  • gotoxy(24,15);cprintf(" Atenuacion, banda de paso, Ap [dB]: ");

  • scanf("%f",&ap);

  • etiqueta4:

  • gotoxy(25,16);cprintf(" Atenuacion, banda de rechazo, As [dB]: ");

  • scanf("%f",&as);

  • if((cs=='a')&&(as>13)){gotoxy(23,18);

  • printf(" La ventana rectangular atenua maximo 13 dB ");

  • gotoxy(25,16);delline();

  • goto etiqueta4;}

  • if((cs=='b')&&(as>43)){gotoxy(23,18);

  • printf(" La ventana hamming atenua maximo 43 dB");

  • gotoxy(25,16);delline();

  • goto etiqueta4;}

  • if((cs=='c')&&(as>58)){gotoxy(23,18);

  • printf(" La ventana blackman atenua maximo 58 dB");

  • gotoxy(25,16);delline();

  • goto etiqueta4;}

  • if(as<=21){ //**** parametro D*****

  • d=0.92222;}

  • if(as>21){

  • d=(as-7.95)/14.36;}

  • printf("\n\t\t\t Valor del parametro D=%.4f",d);

  • df1=fs1-fp1; //****deltas****

  • df2=fp2-fs2;

  • if (df1<=df2) fmin=df1; //*****asignacion de la delta menor****

  • if (df1>df2) fmin=df2;

  • fc1=fp1+((fs1-fp1)/2); //*****frecuencias centrales

  • fc2=fs2+((fp2-fs2)/2);

  • printf("\n\t\t\t Valor de fmin=%.0f",fmin);

  • ord=((f*d)/fmin)+1; //*******orden del filtro******

  • n=ceil(ord);

  • c = n % 2;

  • switch(c){

  • case 0:ord=n+1; //********orden par*******

  • textbackground(1);

  • gotoxy(27,20);cprintf(" Orden del filtro: N = %.0f ",ord);

  • printf("\n\tValor de la frecuencias centrales fc1=%.0f [hz], fc2=%.0f [hz]",fc1,fc2);

  • gotoxy(25,25);cprintf(" Enter para continuar ");getche();break;

  • case 1:ord=n; //*********orden impar*****

  • gotoxy(27,20);cprintf(" Orden del filtro: N = %.0f ",ord);

  • printf("\n\n\t Valor de la frecuencias centrales fc1=%.0f [hz], fc2=%.0f [hz]",fc1,fc2);

  • gotoxy(25,25);cprintf(" Enter para continuar ");getche();break;}

  • textbackground(0); clrscr(); textbackground(1);

  • gotoxy(30,1);cprintf(" Coeficientes ");

  • hPb[0]=((2/f)*(fc1-fc2))+1;

  • gotoxy(30,3);printf("Hcoef[0] = %f",hPb[0]);

  • n2=1;

  • for(n1=1;n1<=((ord-1)/2);n1++){ //**metodo de fourier*****

  • hPb[n1]=(1/(n1*PI))*((sin((2*PI*n1*fc1)/f))-(sin((2*PI*n1*fc2)/f)));

  • gotoxy(30,3+n2);printf("Hcoef[%.0f] = %f",n1,hPb[n1]);

  • n2++;}

  • textbackground(4);

  • gotoxy(25,25);cprintf(" Enter para continuar ");getche();

  • if(cs=='a'){ //*******ventana rectangulara*******

  • textbackground(0); clrscr(); textbackground(1);

  • gotoxy(21,1);cprintf(" Coeficientes de la ventana rectangular ");

  • n2=3;

  • for(n1=0;n1<=(ord-1)/2;n1++){

  • coef[n1]=1;

  • gotoxy(31,n2);printf("rectangular[%.0f] = %f",n1,coef[n1]);

  • n2++;}

  • textbackground(4);

  • gotoxy(25,25);cprintf(" Enter para continuar ");getche();}

  • if(cs=='b'){ //******ventana hamming*****/

  • textbackground(0); clrscr(); textbackground(1);

  • gotoxy(23,1);cprintf(" Coeficientes de la ventana hamming ");

  • n2=3;

  • for(n1=0;n1<=(ord-1)/2;n1++){

  • coef[n1]=0.54+(0.46*cos((2*PI*n1)/(ord-1)));

  • gotoxy(30,n2);printf("hamming[%.0f] = %f",n1,coef[n1]);

  • n2++;}

  • textbackground(4);

  • gotoxy(25,25);cprintf(" Enter para continuar ");getche();}

  • if(cs=='c'){ //********ventana blackman*******

  • textbackground(0); clrscr(); textbackground(1);

  • gotoxy(22,1);cprintf(" Coeficientes de la ventana blackman ");

  • n2=3;

  • for(n1=0;n1<=(ord-1)/2;n1++){

  • coef[n1]=0.42+(0.5*cos((2*PI*n1)/(ord-1)))+(0.08*cos((4*PI*n1)/(ord-1)));

  • gotoxy(31,n2);printf("blackman[%.0f] = %f",n1,coef[n1]);

  • n2++;}

  • textbackground(4);

  • gotoxy(25,25);cprintf(" Enter para terminar ");getche();}

  • textbackground(0); clrscr(); textbackground(1); //**** ventaneo****/

  • gotoxy(28,1);cprintf(" Coeficientes ventaneados ");

  • n2=3;

  • for(n1=0;n1<=(ord-1)/2;n1++){

  • h[n1]=hPb[n1]*coef[n1];

  • gotoxy(31,n2);printf("HVent[%.0f] = %f",n1,h[n1]);

  • n2++;}

  • textbackground(4);

  • gotoxy(25,25);cprintf(" Enter para continuar ");getche();}

  • void senal(void){

  • float k;

  • int increm=0;

  • textbackground(0);clrscr();textbackground(1);

  • for(k=0;k<interval*(num-1);k=k+interval){

  • signal[increm] = a*sin((2*ff*PI*k)*PI/180);

  • printf("\n muestras de la se¤al seno h%d=%f:",increm,signal[increm]);

  • increm++;}

  • getche();}

  • void convolucion(void){

  • textbackground(0); clrscr(); textbackground(1);

  • gotoxy(25,1);cprintf(" Resultados en el dominio del tiempo ");

  • for(k=0;k<ord/2;k++){

  • for(i=0;i<ord/2;i++){

  • if((k-i)<0)

  • signal[k-i]=0;

  • yy[k] = h[i]*signal[k-i];

  • sum[k]=sum[k]+yy[k];}

  • gotoxy(35,k+3);printf("htiemp[%.0d] = %.2f",k,sum[k]);}

  • textbackground(4);

  • gotoxy(25,25);cprintf(" Enter para continuar ");getche();

  • modografico();

  • line(60,0,60,480); line(60,240,640,240);

  • for(q=60;q<=640;q=q+20){

  • line(q,235,q,245);}

  • setcolor(2); outtextxy(605,250,"k"); outtextxy(30,5,"Y(k)");

  • settextjustify(CENTER_TEXT,RIGHT_TEXT);

  • setcolor(2);

  • outtextxy(320,1,"Senal seno el domino del tiempo");

  • outtextxy(46,244,"0");

  • for(k=0;k<ord/2;k++){

  • setcolor(4); putpixel(60+(k*20),240-(sum[k]*40),2);

  • line(60+(k*20),240,60+(k*20),240-(sum[k]*40));

  • x1=60+(k*20);

  • y1=240-(sum[k]*40);

  • if(y1<=240){

  • sprintf(flecha,"_");

  • outtextxy(x1,y1-2, flecha);

  • setcolor(2); sprintf(datof,"%.2f",sum[k]);

  • outtextxy(x1-3,y1-12,datof);}

  • if(y1>240){

  • sprintf(flecha,"_");

  • outtextxy(x1,y1-2, flecha);

  • setcolor(2); sprintf(datof,"%.2f",sum[k]);

  • outtextxy(x1-3,y1+12,datof);}}

  • getche();

  • closegraph();}

  • void respuesta_frecuencia(void){

  • n2=0;

  • clrscr();

  • for(i=0;i<=0.5;i+=0.00125){

  • valor=0;

  • for(k=1;k<=(ord-1)/2;k++){

  • total=h[k]*cos(2*PI*i*k);

  • valor=valor+total;}

  • M[n2]=20*log10(fabs(h[0]+(2*valor))); //***absoluto

  • n2++;}

  • modografico();

  • rectangle(50,50,590,430);

  • setcolor(14);

  • setlinestyle(DOTTED_LINE, 1, 2);

  • outtextxy(36,47,"0"); line(50,145,590,145);

  • outtextxy(20,142,"-20");line(50,240,590,240);

  • outtextxy(20,237,"-40");line(50,335,590,335);

  • outtextxy(20,332,"-60");

  • outtextxy(20,427,"-80");line(158,50,158,430);

  • outtextxy(147,35,"0.1");line(266,50,266,430);

  • outtextxy(255,35,"0.2");line(374,50,374,430);

  • outtextxy(363,35,"0.3");line(482,50,482,430);

  • outtextxy(471,35,"0.4");

  • outtextxy(579,35,"0.5");

  • settextjustify(CENTER_TEXT,CENTER_TEXT);

  • settextstyle(DEFAULT_FONT,HORIZ_DIR,1);

  • setcolor(2);

  • outtextxy(320,450," Frecuencia ");

  • outtextxy(50,30,"dB");

  • settextjustify(CENTER_TEXT,LEFT_TEXT);

  • settextjustify(CENTER_TEXT,RIGHT_TEXT);

  • setcolor(4);outtextxy(320,1,"Respuesta en frecuencia del filtro");

  • for(n2=0;n2<=400;n2=n2+1){

  • aw=M[n2]*4.7;

  • circle(50+(n2*1.35),50-aw,2);

  • setcolor(2); putpixel(50+(n2*1.35),50-aw,4);}

  • getche();

  • closegraph();

  • }

  • VENTANAS

    Primera: Carátula

    Diseño de un filtro digital FIR pasabanda

    Segunda: Datos de la señal de entrada

    LA SEÑAL A FILTRAR ES SENOIDAL

    ¿Cual es el valor de la frecuencia?: 300

    ¿Cual es valor de la amplitud?: 5

    ¿Cuanto vale la frecuencia de muestreo? 1000

    Presione una tecla para continuar

    Tercera ventana: Grafica de la señal de entrada

    Diseño de un filtro digital FIR pasabanda

    Cuarta ventana: Numero de muestras

    TRANSFORMADA DISCRETA DE FOURIER

    5*sen(2*300*pi*t)

    Introducir el numero de muestras: 16

    h(0.0000) = 5*sin(2*300*pi*0.0000) = 0.0000

    h1(0.0010) = 5*sin(2*300*pi*0.0010) = 0.1645

    h2(0.0020) = 5*sin(2*300*pi*0.0020) = 0.3287

    h3(0.0030) = 5*sin(2*300*pi*0.0030) = 0.4927

    h4(0.0040) = 5*sin(2*300*pi*0.0040) = 0.6561

    h5(0.0050) = 5*sin(2*300*pi*0.0050) = 0.8188

    h6(0.0060) = 5*sin(2*300*pi*0.0060) = 0.9806

    h7(0.0070) = 5*sin(2*300*pi*0.0070) = 1.1413

    h8(0.0080) = 5*sin(2*300*pi*0.0080) = 1.3008

    h9(0.0090) = 5*sin(2*300*pi*0.0090) = 1.4589

    h10(0.0100) = 5*sin(2*300*pi*0.0100) = 1.6154

    h11(0.0110) = 5*sin(2*300*pi*0.0110) = 1.7702

    h12(0.0120) = 5*sin(2*300*pi*0.0120) = 1.9230

    h13(0.0130) = 5*sin(2*300*pi*0.0130) = 2.0738

    h14(0.0140) = 5*sin(2*300*pi*0.0140) = 2.2223

    h15(0.0150) = 5*sin(2*300*pi*0.0150) = 2.3685

    h16(0.0160) = 5*sin(2*300*pi*0.0160) = 2.5120

    Presione una tecla para continuar

    Quinta ventana: Resultados de la TDF

    Transformada Discreta de Fourier

    y(0)=(19.315602, 0)

    y(1)=(-1.403297, 6.359619)

    y(2)=(-1.294089, 3.0379)

    y(3)=(-1.274061, 1.881408)

    y(4)=(-1.267151, 1.256695)

    y(5)=(-1.264068, 0.839572)

    y(6)=(-1.262537, 0.520424)

    y(7)=(-1.261802, 0.249909)

    y(8)=(-1.261582, 1.652212e-06)

    y(9)=(-1.261803, -0.249905)

    y(10)=(-1.262538, -0.520421)

    y(11)=(-1.26407, -0.839568)

    y(12)=(-1.267155, -1.256692)

    y(13)=(-1.274067, -1.881405)

    y(14)=(-1.294098, -3.037898)

    y(15)=(-1.403314, -6.359621)

    Presione una tecla para continuar

    Sexta ventana: Magnitud y fase de la TDF

    Magnitud y fase de la TDF

    magnitud: 19.315602 fase: 0

    magnitud: 6.512603 fase: 102.443333

    magnitud: 3.302045 fase: 113.073108

    magnitud: 2.272208 fase: 124.105268

    magnitud: 1.784644 fase: 135.237361

    magnitud: 1.517481 fase: 146.408577

    magnitud: 1.365592 fase: 157.598274

    magnitud: 1.286312 fase: 168.797147

    magnitud: 1.261582 fase: 179.99992

    magnitud: 1.286312 fase: -168.797297

    magnitud: 1.365592 fase: -157.598424

    magnitud: 1.517481 fase: -146.408727

    magnitud: 1.784645 fase: -135.237511

    magnitud: 2.272208 fase: -124.105418

    magnitud: 3.302047 fase: -113.073258

    magnitud: 6.512609 fase: -102.443483

    Presione una tecla para continuar

    Séptima ventana:

    Diseño de un filtro digital FIR pasabanda

    Octava ventana:

    Diseño de un filtro digital FIR pasabanda

    Ventana nueve:

    TRANSFORMADA RAPIDA DE FOURIER

    ¿Cuantas muestras son? 16

    Presione una tecla para Continuar

    Ventana diez:

    Muestras de la señal

    h(0.0000) = 0.0000

    h1(0.0010) = 0.1645

    h2(0.0020) = 0.3287

    h3(0.0030) = 0.4927

    h4(0.0040) = 0.6561

    h5(0.0050) = 0.8188

    h6(0.0060) = 0.9806

    h7(0.0070) = 1.1413

    h8(0.0080) = 1.3008

    h9(0.0090) = 1.4589

    h10(0.0100) = 1.6154

    h11(0.0110) = 1.7702

    h12(0.0120) = 1.9230

    h13(0.0130) = 2.0738

    h14(0.0140) = 2.2223

    h15(0.0150) = 2.3685

    Presione una tecla para Continuar

    Ventana once:

    FFT(Transformada Rapida de Fourier

    x[0]=(19.315602, 0)

    x[1]=(-1.403297, 6.359619)

    x[2]=(-1.29409, 3.0379)

    x[3]=(-1.274062, 1.881408)

    x[4]=(-1.267152, 1.256695)

    x[5]=(-1.264068, 0.839571)

    x[6]=(-1.262537, 0.520423)

    x[7]=(-1.261802, 0.249907)

    x[8]=(-1.261582, 0)

    x[9]=(-1.261802, -0.249907)

    x[10]=(-1.262537, -0.520423)

    x[11]=(-1.264068, -0.83957)

    x[12]=(-1.267152, -1.256695)

    x[13]=(-1.274063, -1.881408)

    x[14]=(-1.294091, -3.0379)

    x[15]=(-1.403298, -6.35962)

    Presione una tecla para Continuar

    Ventana doce:

    Diseño de un filtro digital FIR pasabanda

    Ventana trece:

    Diseño de un filtro digital FIR pasabanda

    Ventana catorce:

    TIPO DE VENTANA

    a). Ventana rectangular

    b). Ventana hamming

    c). Ventana blackman

    Eliga la opcion

    Ventana quince a), Ventana rectangular

    PARAMETROS DEL FILTRO

    Frecuencia de paso, 'Fp1' [Hz]: 100

    Frecuencia de rechazo, 'Fs1'>Fp1 [Hz]: 1000

    Frecuencia de rechazo, 'Fs2'>Fs1 [Hz]: 4000

    Frecuencia de paso, 'Fp2'>Fs2 [Hz]: 8000

    Frecuencia de muestreo

    F = 16000

    Atenuacion, banda de paso, Ap [dB]: 3

    Atenuacion, banda de rechazo, As [dB]: 13

    Valor del parametro D=0.9222

    Valor de fmin=900

    Orden del filtro: N = 19

    Valor de la frecuencias centrales fc1=550 [hz], fc2=6000 [hz]

    Presione una tecla para continuar

    Ventana dieciséis a):

    Coeficientes

    Hcoef[0] = 0.318750

    Hcoef[1] = -0.156862

    Hcoef[2] = 0.225787

    Hcoef[3] = -0.010987

    Hcoef[4] = 0.060511

    Hcoef[5] = 0.101161

    Hcoef[6] = -0.001992

    Hcoef[7] = 0.077548

    Hcoef[8] = 0.039299

    Hcoef[9] = 0.007926

    Presione una tecla para continuar

    Ventana diecisiete a):

    Coeficientes de la ventana rectangular

    rectangular[0] = 1.000000

    rectangular[1] = 1.000000

    rectangular[2] = 1.000000

    rectangular[3] = 1.000000

    rectangular[4] = 1.000000

    rectangular[5] = 1.000000

    rectangular[6] = 1.000000

    rectangular[7] = 1.000000

    rectangular[8] = 1.000000

    rectangular[9] = 1.000000

    Presione una tecla para continuar

    Ventana dieciocho a):

    Coeficientes ventaneados

    HVent[0] = 0.318750

    HVent[1] = -0.156862

    HVent[2] = 0.225787

    HVent[3] = -0.010987

    HVent[4] = 0.060511

    HVent[5] = 0.101161

    HVent[6] = -0.001992

    HVent[7] = 0.077548

    HVent[8] = 0.039299

    HVent[9] = 0.007926

    Presione una tecla para continuar

    Ventana diecinueve a):

    Muestras de la señal seno

    muestra h0=0.000000

    muestra h1=0.164464

    muestra h2=0.328750

    muestra h3=0.492679

    muestra h4=0.656076

    muestra h5=0.818763

    muestra h6=0.980564

    muestra h7=1.141303

    muestra h8=1.300808

    muestra h9=1.458904

    muestra h10=1.615422

    muestra h11=1.770191

    muestra h12=1.923045

    muestra h13=2.073818

    muestra h14=2.222346

    Presione una tecla para continuar

    Ventana veinte a):

    Resultados en el dominio del tiempo

    htiemp[] = 0.00

    htiemp[1] = 0.05

    htiemp[2] = 0.08

    htiemp[3] = 0.14

    htiemp[4] = 0.20

    htiemp[5] = 0.28

    htiemp[6] = 0.36

    htiemp[7] = 0.45

    htiemp[8] = 0.55

    htiemp[9] = 0.65

    Presione una tecla para continuar

    Ventana veintiuno a):

    Diseño de un filtro digital FIR pasabanda

    Ventana veintidós a):

    Diseño de un filtro digital FIR pasabanda

    Para la ventana hamming:

    PARAMETROS DEL FILTRO

    Frecuencia de paso, 'Fp1' [Hz]: 100

    Frecuencia de rechazo, 'Fs1'>Fp1 [Hz]: 1000

    Frecuencia de rechazo, 'Fs2'>Fs1 [Hz]: 4000

    Frecuencia de paso, 'Fp2'>Fs2 [Hz]: 8000

    Frecuencia de muestreo

    F = 16000

    Atenuacion, banda de paso, Ap [dB]: 3

    Atenuacion, banda de rechazo, As [dB]: 30

    Valor del parametro D=1.5355

    Valor de fmin=900

    Orden del filtro: N = 29

    Valor de la frecuencias centrales fc1=550 [hz], fc2=6000 [hz]

    Presione una tecla para continuar

    Coeficientes

    Hcoef[0] = 0.318750

    Hcoef[1] = -0.156862

    Hcoef[2] = 0.225787

    Hcoef[3] = -0.010987

    Hcoef[4] = 0.060511

    Hcoef[5] = 0.101161

    Hcoef[6] = -0.001992

    Hcoef[7] = 0.077548

    Hcoef[8] = 0.039299

    Hcoef[9] = 0.007926

    Hcoef[10] = 0.058297

    Hcoef[11] = -0.000406

    Hcoef[12] = 0.013860

    Hcoef[13] = 0.025336

    Hcoef[14] = -0.020064

    Presione una tecla para continuar

    Coeficientes de la ventana hamming

    hamming[0] = 1.000000

    hamming[1] = 0.988467

    hamming[2] = 0.954446

    hamming[3] = 0.899642

    hamming[4] = 0.826805

    hamming[5] = 0.739587

    hamming[6] = 0.642360

    hamming[7] = 0.540000

    hamming[8] = 0.437640

    hamming[9] = 0.340413

    hamming[10] = 0.253195

    hamming[11] = 0.180358

    hamming[12] = 0.125554

    hamming[13] = 0.091533

    hamming[14] = 0.080000

    Presione una tecla para continuar

    Coeficientes ventaneados

    HVent[0] = 0.318750

    HVent[1] = -0.155053

    HVent[2] = 0.215501

    HVent[3] = -0.009884

    HVent[4] = 0.050031

    HVent[5] = 0.074817

    HVent[6] = -0.001279

    HVent[7] = 0.041876

    HVent[8] = 0.017199

    HVent[9] = 0.002698

    HVent[10] = 0.014761

    HVent[11] = -0.000073

    HVent[12] = 0.001740

    HVent[13] = 0.002319

    HVent[14] = -0.001605

    Presione una tecla para continuar

    Muestras de la señal seno

    muestra h0=0.000000

    muestra h1=0.164464

    muestra h2=0.328750

    muestra h3=0.492679

    muestra h4=0.656076

    muestra h5=0.818763

    muestra h6=0.980564

    muestra h7=1.141303

    muestra h8=1.300808

    muestra h9=1.458904

    muestra h10=1.615422

    muestra h11=1.770191

    muestra h12=1.923045

    muestra h13=2.073818

    muestra h14=2.222346

    Presione una tecla para continuar

    Resultados en el dominio del tiempo

    htiemp[] = 0.00

    htiemp[1] = 0.05

    htiemp[2] = 0.08

    htiemp[3] = 0.14

    htiemp[4] = 0.20

    htiemp[5] = 0.27

    htiemp[6] = 0.35

    htiemp[7] = 0.43

    htiemp[8] = 0.52

    htiemp[9] = 0.61

    htiemp[10] = 0.69

    htiemp[11] = 0.78

    htiemp[12] = 0.87

    htiemp[13] = 0.96

    htiemp[14] = 1.05

    Presione una tecla para continuar

    Diseño de un filtro digital FIR pasabanda

    Diseño de un filtro digital FIR pasabanda

    Para la ventana blackman tenemos:

    PARAMETROS DEL FILTRO

    Frecuencia de paso, 'Fp1' [Hz]: 100

    Frecuencia de rechazo, 'Fs1'>Fp1 [Hz]: 1000

    Frecuencia de rechazo, 'Fs2'>Fs1 [Hz]: 4000

    Frecuencia de paso, 'Fp2'>Fs2 [Hz]: 8000

    Frecuencia de muestreo

    F = 16000

    Atenuacion, banda de paso, Ap [dB]: 3

    Atenuacion, banda de rechazo, As [dB]: 30

    Valor del parametro D=1.5355

    Valor de fmin=900

    Orden del filtro: N = 29

    Valor de la frecuencias centrales fc1=550 [hz], fc2=6000 [hz]

    Presione una tecla para continuar

    Coeficientes

    Hcoef[0] = 0.318750

    Hcoef[1] = -0.156862

    Hcoef[2] = 0.225787

    Hcoef[3] = -0.010987

    Hcoef[4] = 0.060511

    Hcoef[5] = 0.101161

    Hcoef[6] = -0.001992

    Hcoef[7] = 0.077548

    Hcoef[8] = 0.039299

    Hcoef[9] = 0.007926

    Hcoef[10] = 0.058297

    Hcoef[11] = -0.000406

    Hcoef[12] = 0.013860

    Hcoef[13] = 0.025336

    Hcoef[14] = -0.020064

    Presione una tecla para continuar

    Coeficientes de la ventana blackman

    blackman[0] = 1.000000

    blackman[1] = 0.979541

    blackman[2] = 0.920364

    blackman[3] = 0.828717

    blackman[4] = 0.713943

    blackman[5] = 0.587063

    blackman[6] = 0.459183

    blackman[7] = 0.340000

    blackman[8] = 0.236662

    blackman[9] = 0.153179

    blackman[10] = 0.090453

    blackman[11] = 0.046886

    blackman[12] = 0.019395

    blackman[13] = 0.004614

    blackman[14] = 0.000000

    Presione una tecla par continuar

    Coeficientes ventaneados

    HVent[0] = 0.318750

    HVent[1] = -0.153653

    HVent[2] = 0.207806

    HVent[3] = -0.009105

    HVent[4] = 0.043202

    HVent[5] = 0.059388

    HVent[6] = -0.000915

    HVent[7] = 0.026366

    HVent[8] = 0.009301

    HVent[9] = 0.001214

    HVent[10] = 0.005273

    HVent[11] = -0.000019

    HVent[12] = 0.000269

    HVent[13] = 0.000117

    HVent[14] = -0.000000

    Presione una tecla para continuar

    Muestras de la señal seno

    muestra h0=0.000000

    muestra h1=0.164464

    muestra h2=0.328750

    muestra h3=0.492679

    muestra h4=0.656076

    muestra h5=0.818763

    muestra h6=0.980564

    muestra h7=1.141303

    muestra h8=1.300808

    muestra h9=1.458904

    muestra h10=1.615422

    muestra h11=1.770191

    muestra h12=1.923045

    muestra h13=2.073818

    muestra h14=2.222346

    Presione una tecla para continuar

    Resultados en el dominio del tiempo

    htiemp[] = 0.00

    htiemp[1] = 0.05

    htiemp[2] = 0.08

    htiemp[3] = 0.14

    htiemp[4] = 0.20

    htiemp[5] = 0.27

    htiemp[6] = 0.34

    htiemp[7] = 0.42

    htiemp[8] = 0.50

    htiemp[9] = 0.58

    htiemp[10] = 0.66

    htiemp[11] = 0.74

    htiemp[12] = 0.82

    htiemp[13] = 0.89

    htiemp[14] = 0.97

    Presione una tecla para continuar

    Diseño de un filtro digital FIR pasabanda

    Diseño de un filtro digital FIR pasabanda

    41