Informática
Diseño de un filtro digital FIR pasabanda
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.
-
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
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:
Esta definición es válida para el tiempo continuo, sin embargo en el campo digital, se usa la siguiente:
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:
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
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
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:
Octava ventana:
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:
Ventana trece:
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):
Ventana veintidós a):
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
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
41
Descargar
Enviado por: | Ariel Oliva Ramirez |
Idioma: | castellano |
País: | México |