You are on page 1of 8

Clculo de la transformada rpida de Fourier Implementando el Algoritmo Decimacin en tiempo en lenguaje C

26 de noviembre de 2013

INSTITUTO POLITECNICO NACIONAL


ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA

MATERIA: PROCESAMIENTO DIGITAL DE SEALES

PROFESOR: MIRA GONZALEZ CARLOS NOMBRE DEL ALUMNO: MYFRED MARCIAL MENDEZ

REPORTE: REPORTE DE PROYECTO (CLCULO DE LA TRANSFORMADA RPIDA DE FOURIER IMPLEMENTANDO EL ALGORITMO DECIMACIN EN TIEMPO EN LENGUAJE C)

GRUPO: 7CM5

TURNO: MATUTINO

Transformada Rpida de Fourier: Decimacin en Tiempo

Calculo de la transformada rpida de Fourier Implementando el Algoritmo Decimacin en el tiempo en lenguaje C. Marcial Mndez Myfred
Escuela Superior de Ingeniera Mecnica y Elctrica Unidad Zacatenco, Av. Instituto Politcnico Nacional s/n, Unidad Profesional Adolfo Lpez Mateos, Edif. 1, 2, 3, 4, 5, Col. Lindavista, Del. Gustavo A. Madero, Mxico, D.F. C.P. 07738 E-mail: myfredm21@gmail.com Durante este proyecto, con el uso del algoritmo de decimacion en el tiempo se calculara la transformada rpida de Fourier implementado en lenguaje C, se utilizara Borland para compilar el cdigo necesario para el clculo, en particular se construir un analizador de espectros empleando la transformada rpida de Fourier (FFT) y los resultados se visualizaran en un archivo ejecuctable.EXE.

I.

INTRODUCCIN Objetivos:

FFT es la abreviatura usual de un eficiente algoritmo que permite calcular la transformada de Fourier discreta (DFT) y su inversa. La FFT es de gran importancia en una amplia variedad de aplicaciones, desde el tratamiento digital de seales y filtrado digital en general a la resolucin de ecuaciones en derivadas parciales o los algoritmos de multiplicacin rpida de grandes enteros. Sin embargo, existen algunas limitaciones en el algoritmo por ejemplo pone ciertas limitaciones en la seal y en el espectro resultante, la seal de la que se tomaron muestras que se va a transformar debe consistir de un nmero de muestras igual a una potencia de dos. La mayora de los analizadores TRF permiten la transformacin de 512, 1024, 2048 o 4096 muestras. El rango de frecuencias cubierto por el anlisis TRF depende de la cantidad de muestras recogidas y de la proporcin de muestreo. La transformada rpida de Fourier es uno de los algoritmos ms ampliamente usados ya que es un medio eficaz de ejecutar un clculo matemtico bsico y de frecuente empleo. La transformada rpida de Fourier es de importancia fundamental en el anlisis matemtico y ha sido objeto de numerosos estudios. La aparicin de un algoritmo eficaz para esta operacin fue una piedra angular en la historia de la informtica. Las aplicaciones de la transformada rpida de Fourier son mltiples. Es la base de muchas operaciones fundamentales del procesamiento de seales, donde tiene amplia utilizacin. Adems, proporciona un medio oportuno para mejorar el rendimiento de los algoritmos para un conjunto de problemas aritmticos comunes. [1]
2

General. Calculo de una transformada rapida de fourier de un coseno usando lenguaje C,con posibilidad de utilizar e implementar el codigo en un dispositivo o precesador para PDS. Especficos. Aplicacin del algoritmo Decimacin en el tiempo, ya que este reduce de gran manera el numero de adicciones y multiplicaciones en el clculo directo de una transformada discreta de Fourier (DFT). II. MARCO TERICO

Transformada de Fourier discreta en el tiempo. Supongamos que una seal contina en el tiempo se le hace un muestreo con periodo o frecuencia de muestreo para obtener una seal discreta en el tiempo Se definir la transformada discreta de Fourier de como la siguiente sumatoria, si es que existe:

La transformada de la seal es obtenida haciendo la sustitucin .Se puede notar que tiene periodo ya que la sumatoria es una serie de Fourier. La seal discreta en el tiempo puede determinarse a partir de su transformada discreta de Fourier a travs de la integral inversa:

Transformada Rpida de Fourier: Decimacin en Tiempo

As, x[n] puede ser considerada como la suma de ondas senoidales a las que se les hace un muestreo en un continuo de frecuencias en la banda de Nyquist con amplitudes complejas dadas por el espectro de frecuencia de la seal. Transformada Discreta de Fourier y su inversa. Se tiene que sea una seal que es cero para fuera del conjunto {0,1,, -1}.A esto se le llama una secuencia de N puntos [2].Suponemos que

algoritmos conocidos como transformadas rpidas de Fourier (FFT) que calculan la DFT indirectamente. Por ejemplo con la FFT reduce los requerimientos computacionales por un factor y la mejora aumenta con .

Un algoritmo de FFT tiene el nombre de algoritmo de Decimacin en el tiempo. A continuacin presento un breve desarrollo como referencia. Para simplificar la notacin, hice que , as que (1) se convierte en

es la transformada discreta de Fourier de


definida anteriormente. Entonces la transformada discreta de Fourier (DFT) de esa secuencia se define como la nueva secuencia de N puntos:

Este algoritmo asume que es una potencia de 2. Dividiendo la sumatoria en una suma sobre las pares y una suma sobre impares da

(1)
+ La DFT es simplemente conjunto de N muestras de tomadas en frecuencias separadas por en la banda de Nyquist. Se puede notar que si se permite que tome valores fuera del conjunto {0,1,, -1}, el valor calculado por (1) se repite con periodo N. La secuencia original de N puntos puede ser determinada empleando la formula da la transformada directa de Fourier inversa (IDFT)

(2)
Haciendo que los puntos pares sean la secuencia de puntos

y que los puntos impares sean la secuencia de puntos Transformada Rpida de Fourier. El clculo directo de un solo punto de la DFT empleando (1) requiere adiciones y multiplicaciones, ignorando el hecho de que, para alguna , las exponenciales son 1 o -1.Entonces, el clculo directo de todos los puntos requiere adiciones complejas y multiplicaciones complejas. La complejidad computacional puede ser reducida en un orden de mediante

Tambin se puede notar que (2) puede ser escrita como

. Entonces

Transformada Rpida de Fourier: Decimacin en Tiempo

III.

DESARROLLO Y ANLISIS.

Asumiendo que las DFT de puntos y son conocidas, se requiere multiplicaciones complejas para calcular , adiciones complejas para calcular , y sustracciones complejas para calcular para las adiciones y sustracciones puede ser consideradas como iguales en trminos de complejidad computacional. Entonces, la DFT completa de puntos fue calculada con multiplicaciones complejas y adicciones complejas a partir del par de DFT de puntos. Se empleo el mismo procedimiento para calcular las DFT de puntos a partir de DFT de puntos. El clculo de las mediante estos mtodos requiere multiplicaciones complejas y adicciones complejas. Encontrar las requerira de la misma cantidad de clculos. Por lo que la cantidad total de clculos para determinar tanto como son multiplicaciones y adiciones, que es lo mismo que el clculo de a partir de y . A partir de este anlisis se implemento se implemento una funcin en C para calcular la FFT compleja de Decimacin en el tiempo, de raz 2.Toma el arreglo complejo de entrada en orden natural y lo acomoda en orden de bit- invertido. La salida se encuentra en orden natural.

Haciendo que y sean las DFT de puntos de y de tal forma que estas DFT tengan periodo . Con estas definiciones (2) se convierte en

el siguiente paso resulta en las ecuaciones clave para la FFT de Decimacin en el tiempo. Primero se puede notar que .Entonces la ecuacin anterior puede separase en dos ecuaciones:

(3)

(4)
Las ecuaciones (3) y (4) muestran como calcular una DFT de N puntos mediante la combinacin de un par de DFT de .En la siguiente figura se muestra un diagrama para este par de ecuaciones .Este clculo es llamado mariposa de FFT debido a la forma del diagrama.

Las exponenciales complejas recursivamente.

son calculadas

Transformada Rpida de Fourier: Decimacin en Tiempo

La salida de este programa de este programa debe ser toda 0 excepto para =8.La salida genera lneas espectrales en K=5 y 11 de altura 8.

La funcin principal calcula una FFT de 16 puntos de .

IV. CONCLUSIONES En este proyecto estudie sobre la transformada rpida de Fourier utilizando el algoritmo de Decimacin en el tiempo, ya que me llamo mucho la atencin puesto es una herramienta muy til para el clculo de la DFT minimizando el numero de clculos, implementndolo particularmente en este lenguaje es posible darle uso en un procesadores especficos para PDS. Se procede a compilar REFERENCIAS
[1]http://es.wikipedia.org/wiki/Transformada_r%

C3%A1pida_de_Fourier
[2] Jos G. viveros talavera, Fedro E. Ponce de len Luengas, Miguel ngel pjaro Martnez, Diseo de sistemas de comunicaciones utilizando algoritmos de DSP (editorial UAM,2001).

Transformada Rpida de Fourier: Decimacin en Tiempo

/*archivo de encabezado complex.h ---*/ /*archivo de encabezado que define la estructura de datos complex*/ struct cmpx { double real; double imag; }; typedef struct cmpx complejo;

//CODIGO #include <stdio.h> #include "complejos.h" #include <math.h> #include <conio.h> #include <iostream.h> extern void fft(complejo *X, int M); void main(void) { complejo X[16]; /*declara el arreglo de entrada */ int i; /*indice para los cilos */ int M=4; /*log2(16)*/ double PI=3.141592653589; int N=16; /* numero de puntos de la FFT*/ /*inicializar el arreglo de entrada */ /*generar lineas espectrales en k=5 y 11 de altura 8 */ for (i=0;i<N;i++) { (X[i]).real=cos((i*5*2.0*PI)/N); (X[i]).imag=0.0; } fft(X,M); /* realiza el fft*/

Transformada Rpida de Fourier: Decimacin en Tiempo

/*despliega resultados en la pantalla */ for (i=0;i<N;i++) { printf("%4d%15.5f\t%15.5f\n", i,(X[i]).real, (X[i]).imag); } getch(); /*Retiene pantalla*/ }

void fft(complejo *X, int M) /*X es un arreglo de 2 ala M puntos complejos*/

{ complejo temp1;/*Variable compleja de almacenamiento temporal*/ complejo W; /*e a la (-j2PI/N)*/ complejo U; /*Factor Twiddle W ala k*/ int i,j,k; /* indices para ciclos*/ int id; /*indice del punto menor en la mariposa */ int N=1<<M; /*Numero de puntos para la FFT*/ int N2=N/2; int L; /*Etapa de la FFT*/ int LE; /*Numero de puntos en la sub DFTen la etapa L de la mariposa*/ /*y desplazamiento para la proxima etapa del DFT*/ int LE1; /*Tambien el desplazamiento al punto menor en la */ /*mariposa en la etapa L*/ double PI=3.1415926535897; /*Acomoda el arreglo de entrada en orden de Bit-invertido:*/ /*el indice j es el indice del bit invertido de i. ya que 0->0 y*/ /*N-1 -> N-1 en el modo de bit invertido , estas dos inversiones son */ /*ignoradas*/ j=0; for(i=1;i<(N-1);i++) { /*incrementa el contador de bit-invertidopara j aadiendo 1*/ /*y propagando acarreos de la izquierda ala derecha al msb*/ k=N2; /*k es 1 en msb, 0 en cualquier otro*/ /*propagar el acarreo de la derecha ala izquierda*/ while(k<=j) /*propagar el acarreo si el bit es 1*/ { j -=k; /*el bit revisado es 1,asi que borrarlo*/ k /=2; /*colocar en 1 el siguiente bit a la derecha*/ }

Transformada Rpida de Fourier: Decimacin en Tiempo

j +=k; /*cambiar el primer 0 de la izquierda a 1*/ /*intercambiar las muestras en las localidades i y j si no se ha hecho*/ if(i<j) /*revisar si ya se habian intercambiado*/ { temp1.real=(X[j]).real; temp1.imag=(X[j]).imag; (X[j]).real=(X[i]).real; (X[j]).imag=(X[i]).imag; (X[i]).real=temp1.real; (X[i]).imag=temp1.imag; } } /*ejecutar M etapas de Mariposa*/ for(L=1;L<=M;L++) { LE=1<<L; LE1=LE/2; U.real=1.0; U.imag=0.0; W.real=cos(PI/LE1); W.imag=-sin(PI/LE1); /*ejecutar las mariposas para la L-esima etapa */ for(j=0;j<LE1;j++) /*ejecutar las LE1 mariposas de cada sub */ /*DFT*/ { /*Calcular las mariposas que emplean la misma W ala k*/ for(i=j;i<N;i +=LE) { id=i+LE1; temp1.real=(X[id]).real*U.real-(X[id]).imag*U.imag; temp1.imag=(X[id]).imag*U.real+(X[id]).real*U.imag; (X[id]).real=(X[i]).real-temp1.real; (X[id]).imag=(X[i]).imag-temp1.imag; (X[i]).real +=temp1.real; (X[i]).imag +=temp1.imag; } /*calculo recursivo*/ temp1.real=U.real*W.real-U.imag*W.imag; U.imag=U.real*W.imag+U.imag*W.real; U.real=temp1.real; } } return; }