L ABORATORIO DE R EDES
Software analizador de espectro
Desarrollo de software analizador de espectro en lenguaje C/C++
J. Antonio Sarco Giannini CI 17067201 J. Alberto Sarco Giannini CI 17067243 23 de abril de 2010
23 de abril de 2010
Contenido
INTRODUCCIN I. II. OBJETIVO DE LA PRCTICA MARCO TERICO 1. El espectro de frecuencia 2. El analizador de espectro 2.1. El analizador de espectro analgico 2.2. El analizador de espectro digital 3. Transformada de Fourier 3.1. Reglas de la sntesis aditiva (o sntesis de Fourier) 3.2. Tipos de transformadas de Fourier 3.2.1. Transformada continua de Fourier 3.2.2. Transformada discreta de Fourier METODOLOGA PROCEDIMIENTOS RESULTADOS
III. IV. V.
23 de abril de 2010
Introduccin
En lo extenso del estudio de las seales nos podemos encontrar con diversos tipos de ondas. Peridicas No peridicas. Senoidales. Cuadradas. Triangulares. etc. Para poder caracterizar una onda, y posteriormente extraer las debidas conclusiones sobre lo que queremos hacer con ella, se dispone de multitud de instrumentos. Osciloscopio. Frecuencmetros. etc. Ahora bien, si estamos trabajando con seales peridicas y queremos conocer las componentes en frecuencia de las mismas, sus niveles de potencia, etc, necesitaremos un instrumento de medida que se denomina analizador de espectro.
23 de abril de 2010
I. Objetivo de la Prctica
Crear un software en lenguaje C++ capaz de graficar el espectro de la onda de sonido as como mostrar la frecuencia de la onda fundamental que se obtiene.
23 de abril de 2010
2. El analizador de espectro
Un analizador de espectro es un equipo de medicin electrnica que permite visualizar en una pantalla las componentes espectrales en un espectro de frecuencias de las seales presentes en la entrada, pudiendo ser sta cualquier tipo de ondas elctricas, acsticas u pticas.
23 de abril de 2010
23 de abril de 2010
3. Transformada de Fourier
Toda seal peridica, sin importar cun complicada parezca, puede ser reconstruida a partir de sinusoides cuyas frecuencias son mltiplos enteros de una frecuencia fundamental, eligiendo las amplitudes y fases adecuadas.
3.2.1.
Sea x(t) una seal continua. Se define la transformada de Fourier de x, denotada con X(w), como la funcin:
()
que est definida en y toma valores complejos. Para que la transformada de Fourier de una seal x(t) exista (en forma ordinaria no como funcin generalizada), x debe satisfacer las siguientes propiedades denominadas condiciones de Dirichlet:
23 de abril de 2010
1)
| | <
3.2.2.
La transformada discreta de Fourier de tiempo discreto se aplica a seales muestreadas en el tiempo, no peridicas y de duracin infinita.
=
=0
2 []
Donde cada elemento se define como: N: Nmero de Samplers en x[n] x[n]: Seal de prueba discreta (con ndice n) X[k]: Espectro en funcin de la frecuencia discreta (con ndice k)
2
La transformada rpida de Fourier o FFT (Fast Fourier Transform) es un algoritmo que permite calcular de manera rpida la transformada discreta de Fourier (DFT).
23 de abril de 2010
III. Metodologa
I. II. III. IV. V. Realizar un marco terico acerca de lo que es un analizador de espectro y ms especficamente un analizador de espectro digital. A manera de Norte en la creacin de la aplicacin, conseguir un software ya implementado para reconocer las facultades de un software analizador de espectro digital. Investigar en internet la implementacin de los diferentes algoritmos necesarios en la creacin de la aplicacin que servirn de referencia en nuestra implementacin. Implementar las funciones necesarias en lenguaje C++ sobre el proyecto que se ha venido trabajando hasta conseguir los resultados buscados. Por ltimo, calibrar nuestra aplicacin con el software propietario conseguido en el paso II y realizar las pruebas y ajustes pertinentes hasta conseguir el mejor resultado posible.
23 de abril de 2010
IV. Procedimiento
El cdigo del analizador de espectro se introduce al cdigo usado para el osciloscopio. Este cdigo toma un vector idntico al generado por el capturador de muestras usado para el osciloscopio y lo transforma en un vector que se usa para graficar como un analizador de espectro.
2. Algoritmo de Fourier
1. Se toma una muestra discreta de 2^n muestras. 2. Teniendo estos datos se procede a calcular la FFT. La FFT se calcula en dos partes: 2a. Se transforma la muestra (vector de datos) original en un conjunto de bits orden inverso mediante la aplicacin del mtodo inversin de bit (bit-reversal). Esto hace que los clculos matemticos de la segunda parte "mucho ms fcil". 2b. En la segunda parte procesamos los datos en N*log2(N) operaciones aplicaciones del algoritmo Danielson-Lanzcos.
23 de abril de 2010
10
23 de abril de 2010
V. Resultados
El resultado para este analizador de espectro fue una grfica para el estudio del espectro de sonido y un cuadro que nos indica el valor de la onda fundamental obtenida en tiempo real
La lnea amarilla de abajo representa el valor de la fundamental y sus armnicos respectivos. El cuadro de texto (que tiene en ese momento el valor de 440) indica el valor en Herz de la onda fundamental.
11
23 de abril de 2010
Conclusin
El analizador de espectro es una de las herramientas ms usadas en el mundo de la comunicacin, ya sea de manera directa o indirecta. En nuestro caso la importancia de esta prctica radica en conocer el proceso de convertir algo que no podemos ver, en datos que se convierten en informacin acerca de la onda, informacin que es usada en el proceso de envi y recepcin de mensajes analgicos o digitales usando la modulacin en frecuencia. Este aparato tiene la capacidad de mostrar en pantalla una cantidad razonable de armnicos de una frecuencia de entrada, cuyo estudio lo realiza con una funcin llamada transformada rpida de Fourier, tambin muestra en pantalla la fundamental de la frecuencia de entrada en el espectro de frecuencias y la misma frecuencia fundamental como un nmero natural.
12
23 de abril de 2010
Recomendaciones
Utilice un generador de ondas para ingresar una onda continua y as verificar su espectro. Tome la seal desde un cable que reciba la seal peridica en vez de un micrfono ya que con el cable se asla el sonido y el ruido obtenido es el mnimo.
13
23 de abril de 2010
Bibliografa
Wikipedia Disponible: http://es.wikipedia.org/wiki/Analizador_de_espectro Free article directory - your knowledge encyclopedia Disponible: http://www.content4reprint.com/view/spanish-25488.htm Disponible:http://www.finaltest.com.mx/Analizadores_de_espectro_s/22.ht m Disponible:http://www.codeproject.com/KB/recipes/howtofft.aspx Disponible:http://www.elo.utfsm.cl/~elo241/exp/LCOMEX1.pdf Disponible:http://www.tecnun.es/asignaturas/tratamiento%20digital/tema6 .pdf Disponible:http://neutron.ing.ucv.ve/electronica/materias/c2515/temas1_ar chivos/tema9.pdf
14
23 de abril de 2010
Anexo:
Cdigo fuente
15
23 de abril de 2010
void capturador::Fourier(float *data, unsigned long number_of_samples, unsigned int sample_rate, int sign) { //VARIABLES DEL ALGORITMO FFT PARA SACAR LA TRANSFORMADA unsigned long n,mmax,m,j,istep,i; double wtemp,wr,wpr,wpi,wi,theta,tempr,tempi; /*En este algoritmo tendremos un vector complejo, donde las posiciones pares va a estar almacenado los valores reales arrojador por este algoritmo y el valor complejo asociado a ese real va a estar guardado en la posicion impar o sea una posicion hacia adelane de la posicion del real*/ //nuevo vector complejo de tamao n=2*sample_rate if(vector!=NULL) delete [] vector; vector=new float [2*sample_rate]; //colocar el arreglo de real(*data) en un arreglo de complejos(*vector) //la parte compleja es inicializada en 0's //Las posiciones del vector que quedan sin datos se llenas con 0's for(n=0; n<sample_rate;n++){ if(n<number_of_samples) vector[2*n]=data[n]; else vector[2*n]=0; vector[2*n+1]=0; } //inversion binaria (nota que los indices //comenzaron desde 0 la cual significa que la //parte real del complejo esta en los limites de los indices
23 de abril de 2010
//y la parte compleja estan en los indices impares n=sample_rate << 1; j=0; for (i=0;i<n/2;i+=2) { if (j > i) { SWAP(vector[j],vector[i]); SWAP(vector[j+1],vector[i+1]); if((j/2)<(n/4)){ SWAP(vector[(n-(i+2))],vector[(n-(j+2))]); SWAP(vector[(n-(i+2))+1],vector[(n-(j+2))+1]); } } m=n >> 1; while (m >= 2 && j >= m) { j -= m; m >>= 1; } j += m; } //final del algoritmo de orden invertido por bit //Rutina Danielson-Lanzcos mmax=2; while (n > mmax) { istep=mmax << 1; theta=sign*(2*pi/mmax); wtemp=sin(0.5*theta); wpr = -2.0*wtemp*wtemp; wpi=sin(theta);
23 de abril de 2010
wr=1.0; wi=0.0; for (m=1;m<mmax;m+=2) { for (i=m;i<=n;i+=istep) { j=i+mmax; tempr=wr*vector[j-1]-wi*vector[j]; tempi=wr*vector[j]+wi*vector[j-1]; vector[j-1]=vector[i-1]-tempr; vector[j]=vector[i]-tempi; vector[i-1] += tempr; vector[i] += tempi; } wr=(wtemp=wr)*wpr-wi*wpi+wr; wi=wi*wpr+wtemp*wpi+wi; } mmax=istep; } } //Finalizacin del algoritmo