Está en la página 1de 25

Algoritmos de aplicacin

Transformada
Rpida/Discreta de Fourier.
Procesamiento Digital de Seales.
UNIVERSIDAD POLITCNICA DEL ESTADO DE MORELOS

Alumno:
Lzaro Garca Carlos Arturo
Moran Martnez Jos Luis
Rivera Alonso Abel
Snchez Miranda Gustavo

LGCO126320
MMJO126540
RAAO115680
SMGO114984

Carrera:
Ingeniera en Electrnica y Telecomunicaciones
8vo Cuatrimestre
Profesor:
Felipe de Jess Sorcia.

Fecha de Entrega:
14/04/2015

Contenido
Introduccin. ....................................................................................................................................... 2
Marco Terico ..................................................................................................................................... 2
La Transformada Rpida de Fourier ................................................................................................ 2
Transformada Discreta de Fourier .................................................................................................. 6
Desarrollo ............................................................................................................................................ 8
Transformada Discreta de Fourier en Algoritmo de Goertzel......................................................... 8
De dnde sale el algoritmo de Goertzel? .................................................................................. 9
Ejemplo de Implementacin en la deteccin de tonos DMFT .................................................. 13
Ejemplo comparativo del cdigo utilizado en Matlab .............................................................. 15
Algoritmo de aplicacin de Transformada Rapida de Fourier .......................................................... 17
Anlisis espectral bsico................................................................................................................ 17
Interpolacin de datos .................................................................................................................. 21
Conclusiones ..................................................................................................................................... 23
Bibliografa ........................................................................................................................................ 24

Introduccin.
La nocin de seal es bastante amplia y aparece en diferentes situaciones en las cuales ciertas
cantidades varan en el tiempo o el espacio de una magnitud fsica o de otra naturaleza. Por
tanto est ligada al concepto de funcin.
El procesamiento de seales es una disciplina de las ciencias de la ingeniera que desarrolla
las tcnicas de procesamiento, anlisis e interpretacin de seales. Entre las operaciones
posibles con las seales tenemos control, filtrado, compresin de datos, deconvolucin,
prediccin etc.
Se pueden procesar seales analgicas o seales digitales. En el procesamiento de seales
existen diferentes ramas dependiendo de la naturaleza de las seales consideradas (audio,
voz, imagen, video).
El procesamiento de seales puede tener diferentes objetivos:

Deteccin de una seal


Compresin para su almacenamiento y transmisin.

La teora de seales es la rama matemtica que estudia las seales y los sistemas que los
transmiten e involucra herramientas del anlisis armnico (generalizacin del Anlisis de
Fourier).

Marco Terico
La Transformada Rpida de Fourier
La Transformada Rpida de Fourier (Fast Fourier Transform) es una herramienta
fundamental en el procesado digital de seales. Su origen es relativamente reciente puesto
que fueron J.W.Cooley y J.W Tukey, quienes hacia 1965 abordaron por primera vez el
problema de la programacin de un algoritmo para el clculo de series complejas.
Ante todo debe quedar claro que la FFT no es una nueva transformada sino que se trata de
un algoritmo para el clculo de la Transformada Discreta de Fourier (DFT). Su importancia
radica en el hecho que elimina una gran parte de los clculos repetitivos a que est sometida
la DFT, por lo tanto se logra un clculo ms rpido. Adems, la FFT generalmente permite
una mayor precisin en el clculo de la DFT disminuyendo los errores de redondeo.
La implementacin del algoritmo de la FFT puede realizarse de dos formas distintas:
1.- Mediante un programa que pueda ejecutarse tanto en un PC como en una tarjeta que
posea un microprocesador especfico para este tipo de operaciones (DSP).
2.- Mediante el desarrollo de una tarjeta (HARDWARE) en la cual se emplean circuitos
integrados especficos. Tal es el caso de los modernos analizadores de espectro.
2

Por lo tanto el objetivo de este apartado es mostrar la redundancia implcita en el clculo


de la DFT, para luego comprobar cmo un determinado algoritmo de la FFT elimina esta
redundancia. La DFT de una serie de muestras x[n] para 0 n N se define:

donde:

0 k

Antes de entrar en detalles sobre la FFT comprobemos la naturaleza peridica del trmino
, de hecho la periodicidad y simetra de

contribuyen a la redundancia de la DFT.

En la siguiente tabla se evala

Desarrollo intuitivo Para mostrar el algoritmo de la FFT empecemos por elegir un nmero
de muestras N = 2m donde m es un nmero entero. Estudiemos el caso de N= 4
{x[ 0] , x[ 1] , x[ 2] , x[ 3] } <---------- {X[ 0] , X[ 1] , X[ 2] , X[ 3] }

este clculo implica 12 sumas y 9 multiplicaciones complejas

Observando que
se expresa como:

es peridica, con un periodo igual a 4 , el clculo de X[2] y X[3]

y el anterior sistema de ecuaciones se puede reescribir como:

Cuyo clculo implica 12 sumas y 5 multiplicaciones complejas. El diagrama en bloques se


representa en la Figura 7.21.

Fig. 7.21.
Esta interpretacin de la FFT de 4 puntos sugiere que la organizacin de la FFT se obtuvo
dividiendo la DFT de 4 puntos en dos TDF de 2 puntos y combinando sus coeficientes.
Observar que en el desarrollo del algoritmo, el dato x[0] se empareja con x[2] , y x[1] con
x[3] . El algoritmo empleado se representa mediante el diagrama de flujo mostrado en la
Figura 7.22.

Fig. 7.22.
Esto implica que la organizacin de una FFT de 8 puntos se puede dividir en dos DFT de 4
puntos y a continuacin una combinacin de ambos conjuntos de coeficientes.

Transformada Discreta de Fourier


Es poco frecuente encontrar seales puramente peridicas en el procesado digital de seales.
Seales y datos no peridicos con un nmero finito de valores es el entorno ms comnmente
empleado en los sistemas LTI prcticos.
La Transformada Discreta de Fourier (DFT) de una seal x[n] definida en el rango
0
N-1 se define como:

X[k] =

;0

N-1 [1]

Donde:
y los valores espectrales X[k] se evalan en 0
N-1. Al trmino
WN se le denomina frecuentemente " twiddle factor" y es un conjunto de valores complejos.
La Transformada inversa de Fourier (IDFT), que permite generar la seal x[n] a partir de sus
muestras espectrales X[k], se define:

x[n] =
Donde los valores de x[n] son evaluados en el rango 0

;0

N-1 [2]

N-1

Si se emplea la ecuacin [1] para calcular valores adicionales de X[k] fuera del rango 0
N-1 encontraremos que se forma una secuencia espectral peridica, la DFT es peridica. Del
mismo modo, empleando la ecuacin [2] para calcular valores adicionales de x[n] fuera del
rango 0
(N-1) se obtiene una versin peridica de la seal x[n] . Por lo tanto la DFT e
IDFT representan una secuencia finita peridica dentro de una seal no peridica x[n]. En
efecto la DFT considera a una seal no peridica x[n] como si fuese peridica a efecto de
algoritmos de clculo. Tambin es importante saber que tanto una seal peridica de periodo
N y otra seal no peridica de la que se han tomado N muestras, ambas estn definidas por
N valores o muestras.
Tambin debemos darnos cuenta que la nica diferencia entre la DFT y la IDFT a efectos de
implementacin es el factor de escala 1/N y el cambio de signo en la funcin exponencial.
Por lo tanto si desarrollamos un algoritmo para calcular la DFT, el clculo de la IDFT es
inmediato. Este hecho es una consecuencia directa de la simetra existente entre los dominios
del tiempo y la frecuencia.

Cuando los N valores de x[n] son reales, X[k] se descompone en su parte real e imaginaria

R( X[k] ) =

; I(X[k] ) = -

A partir de los cuales se calcula el |X[k] | y la potencia media cuadrtica definida por la
expresin:
|X[k] |2 = |R(X[k] )|2 + |I(X[k] )|2
Las ecuaciones [1]y [2] son esencialmente las mismas que las ecuaciones de anlisis y
sntesis correspondientes a las series de Fourier correspondiente a una seal peridica x[n] ,
la nica diferencia es que ahora se ha incorporado el factor de escala 1/N en la ecuacin de
sntesis.
La similitud entre la DFT y la serie discreta de Fourier puede interpretarse de dos formas. Si
la seal x[n] es realmente peridica la ecuacin [1] proporciona una nueva forma de las series
discretas de Fourier; pero si x[n] es no peridica, y solamente es tratada como peridica a
efecto de clculos computacionales, la ecuacin [1] representa la DFT.
En principio parece redundante el estudio de la DFT puesto que ya desarrollamos una versin
discretizada de la Transformada de Fourier aplicable a tanto a seales discretizadas no
peridicas x[n] como a sistemas LTI. Podemos emplear lo anteriormente desarrollado para
describir la correspondiente funcin espectral X[k]sin hacer ninguna suposicin sobre la
periodicidad?. La respuesta es s y no. Por un lado es posible encontrar una versin
discretizada de las funciones espectrales continuas X(W) o H(W), si embargo las dificultades
surgen cuando necesitamos procesar o estimar la informacin. Un sistema digital no puede
operar con funciones continuas, todo lo que puede hacer es estimar el valor de la funcin
para un conjunto de valores discretos de la frecuencia digital W, - en otras palabras es
necesario generar una versin muestreada de X(W) o H(W). Este hecho operativo implica
responder a la siguiente pregunta; Cuntas muestras de X(W) o H(W), son necesarias?.
Pocas muestras originarn una respuesta inadecuada mientras que muestras en
exceso implican una gran cantidad de clculo redundante. En las siguientes pginas se
desarrollan estos conceptos.
Dominio del tiempo la frecuencia

La DFT y la IDFT nos permiten representar una seal x[n] o un sistema LTI en uno u otro
dominio sin prdida de informacin.

Desarrollo
Transformada Discreta de Fourier en Algoritmo de Goertzel
En el anlisis en frecuencia permite extraer informacin que no es evidente mediante la
simple observacin de una seal en el tiempo. Para esto la transformada discreta de Fourier
(DFT) la cual es la respuesta natural e inmediata a la transformada continua de Fourier en el
mundo digital. La transformada rpida de Fourier (FFT) resuelve esta limitacin en tiempo
mejorado de manera importante el tiempo de clculo consumido por la transformada discreta
(DFT).
El algoritmo que vamos a tratar es el de Goertzel, el cual es un filtro digital derivado de la
trasformada discreta de Fourier el cual es capaz de detectar las componentes de la frecuencia
especifica de una seal, de tal forma que no analiza todo el espectro, el cual lo hace en un
tiempo menor de ejecucin. El ejemplo que aqu se expondr es en el manejo de tonos DMFT
(Dual-Tone Multi-Frequency) los cuales son los ms usados por las compaas de servicios
a travs de telfonos fijos o celulares.
Pero ahora nos enfocaremos en el algoritmo de Goertzel el cual nos interesa, usado en el
procesamiento digital de seales (DSP) el cual se encarga de identificar las componentes de
frecuencia de una seal. Su historia data de 1958 ao en el que el Dr. Gerald Goertzel lo
pblico, este es un filtro digital derivado de la transformada discreta de Fourier, que se
encarga de detectar componentes de frecuencia especifica de una seal, y como ya habamos
mencionado el ejemplo que se expondr ms adelante, se usa en la conmutacin telefnica
digital con la cual se pueden identificar los tonos caractersticos generados cuando un numero
se marca en el sistema.
Ya que es una derivacin de la (DFT) hablaremos a cerca de esta, sabemos que la
transformada de Fourier descompone la seal como la suma de senos y cosenos los cuales
tienen diferentes frecuencias y amplitudes que se encuentran desfasadas en el tiempo. En las
aplicaciones de ingeniera este proceso se considera de manera discreta debido a que la
adquisicin de datos es de manera digital.
1

() = ()

2
)

=0

Ecuacin 1.- Definicin de la transformada discreta de Fourier.


Donde
N = Nmero total de muestras.
n = La ensima muestra original.
k = El ksimo trmino de la DTF.
8

De dnde sale el algoritmo de Goertzel?


Bien, este es parte de la definicin de la DFT, lo cual procede a realizar inicialmente una
reescritura de la ecuacin 1 para la DFT.

2
)

Por lo cual, la ecuacin 1 puede ser rescrita por la ecuacin 2.


1

() = ()
=0

Ecuacin 2.- Reescritura de la definicin de la DFT.

Ahora se desarrolla mediante la identidad de Euler.


(2) = cos(2) + sin(2) = 1
Se denota que:
= 1

Bien, ahora que ya tenemos las igualaciones y las sustituciones necesarias, de la ecuacin 3
volveremos a sustituir en la ecuacin 2.
1

() = ()[1]
=0
1

() = ()
=0
1

() = ()+
=0

Haciendo uso de la factorizacin tenemos la siguiente ecuacin:


1
()

() = ()
=0

Ecuacin 4.- Reescritura de la ecuacin de la DFT con la identidad de Euler.

Si desarrollamos la sumatoria de la ecuacin 4 y factorizando tendremos el siguiente


resultado:
() = {[(0) + (1)] + (2) + + ( 1)}

Ecuacin 5.- Expresin de la DFT como sumas, que llevan a una expresin general de
ecuacin en diferencias.

() = ( 1) + ()
Ecuacin 6.- Ecuacin en diferencias de la DFT.
Donde:
y(n) = Representa la salida.

y(n-1) = La salida anterior.


x(n) = La entrada.
Aplicando la transformada z a la ecuacin 6 obtenemos lo siguiente:
() = [1 1 ] = ()

Obtenemos su funcin de transferencia.


() =

()
1
=
() 1 1

Ecuacin 7.- Funcin de transferencia de la DFT con la transformada z.

10

Ahora, multiplicamos el numerador y el denominador de la funcin de transferencia de la


ecuacin 7 por 1 1 y obtendremos lo siguiente:
() =

1 1
2
1 [2(cos ) 1 + 2 ]

Ecuacin 8.- Funcin de transferencia de la DFT desarrollada.

Figura 1 Diagrama del filtro IIR del algoritmo de Goertzel.

Bien ya despus de haber obtenido las ecuaciones que nos llevan a la realizacin del filtro
IIR de Goertzel, aplicaremos este algoritmo en el software Matlab. El algoritmo de Goertzel
a diferencia de la DFT busca verificar la existencia de ciertas frecuencias previamente
conocidas sin realizar todos los clculos. Esta aplicacin es altamente til en la deteccin de
tonos DMFT usados en muchos sistemas telefnicos de servicio automtico de respuesta para
recargas de telefona mvil, transacciones bancarias y servicio al cliente.

Figura 2 Ecuaciones reescritas.

11

Las ecuaciones 12 y 13 son reescritas mediante el diagrama del filtro IIR de la figura 2. En
este caso la implementacin se debe considerar que los valores de Sk(-2) y Sk(-1) son iguales
a 0. Repetir hasta recorrer todos elementos N de la seal digital a explorar.

Figura 3 Implementacin del algoritmo de un filtro IIR de Goertzel en Matlab.

12

Ejemplo de Implementacin en la deteccin de tonos DMFT


Generador de tonos DMFT

Los tonos DMFT son la sumatoria de dos funciones cosenoidales de diferentes frecuencias.
En la figura 4 se representa la combinacin de frecuencias sobre un teclado digital. Todas las
teclas aunque no sean de uso comn tienen una frecuencia establecida. La ecuacin 14
muestra como la sumatoria de las funciones cosenoidales generan los tonos DMFT.

Ecuacin 14. Funcin generadora de tonos DMFT

Figura 4. Teclado con combinacin de frecuencias para la generacin de tonos.

En la figura 5 se muestra mediante una grfica el detalle de los primeros milisegundos del tono que
es generado por el teclado de la figura 4 para cuando la tecla 1 est presionada. Este ha sido
producido haciendo uso de la ecuacin 14 con una frecuencia de muestreo fm=8000Hz. De igual
forma en la figura 6, se muestra el cdigo en Matlab que permite la simulacin de un archivo de
audio que se genera, se es guardado con la extensin WAV y posteriormente reproduce el archivo
de dicho tono

Figura 5. Zoom al tono DMFT que es generado cuando la tecla 1 es presionada.

13

En la figura 6 se muestra el cdigo utilizado en Matlab.

Figura 6. Cdigo en Matlab.

14

Ejemplo comparativo del cdigo utilizado en Matlab


En la primera parte, se implementa el cdigo haciendo uso de la funcin llamada goertzelmio.m, en
ese ejemplo, se busca encontrar las frecuencias de 696 Hz, 770 Hz y1209 Hz, dos de los cuales
corresponden a la tecla 1, dentro de una seal. Si estas son encontradas, no se recibe informacin
sobre magnitud ni su fase, solamente sobre su existencia al presentar un pico ante su presencia.
Este hecho hace dramticamente importante la diferencia entre la FFT (Fast Fourier Transform) y el
algoritmo Goertzel.

Figura 7. Tonos detectados por el algoritmo Goertzielmio

En la figura 7 permite apreciar los tonos detectados por el algoritmo goertzelmio. En la


grfica se representan los picos solo alrededor de los 700 Hz y 1200 Hz. Si se realiza un
zoom de detalle sobres estos puntos, se pueden ver con mejor exactitud la lectura de las
frecuencias buscadas. En este ejemplo se ejecutan los algoritmos goertzelmio.m y goertzel.m.
Como ya se ha mencionado, el primero corresponde a la implementacin de los autores de
este artculo y el segundo es propietario del signal processing toolbox de Matlab.

15

En la figura 8 se muestra el cdigo en Matlab.

Figura 8.Cdigo Goertzel en Matlab

16

Como estudio de caso, se realiz un comparativo del tiempo de ejecucin entre el algoritmo
Goertzelmio y Goertzel de Matlab 7.6, el cual retorn los valores representados en la tabla 1.

Tabla 1. Comparacin en tiempo de los algoritmos de Goertzel.

Algoritmo de aplicacin de Transformada Rapida de Fourier


Anlisis espectral bsico
La FFT les permitir estimar eficientemente las componentes de frecuencia en la data a
partir de un conjunto discreto de valores muestreados a una tasa fija. Las cantidades
relevantes en un anlisis espectral estn listadas en la siguiente tabla. Para datos
basados en el espacio, remplace las referencias al tiempo con referencias al espacio.
Cantidad

Descripcin

Datos muestreados

m = length(x)

Longitud de la ventana (nmero de muestras)

fs

Muestras/unidad de tiempo

dt = 1/fs

Incremento de tiempo por muestra

t = (0:m-1)/fs

Rango del intervalo de tiempo para la data

y = fft(x,n)

Transformada de Fourier Discreta (DFT)

abs(y)

Amplitud de la DFT

(abs(y).^2)/n

Potencia de la DFT

fs/n

Incremento de frecuencia (resolucin)

f = (0:n-1)*(fs/n)

Rango del intervalo de frecuencia

fs/2

Frecuencia de Nyquist

17

Por ejemplo, considere la siguiente data de x con dos componentes de frecuencia de


diferentes amplitudes y fases contaminados con ruido:
fs = 100;

% Frecuencia de muestreo (Hz)

t = 0:1/fs:10-1/fs;

% 10 segundos de muestra

x = (1.3)*sin(2*pi*15*t) ...

% Componente de 15 Hz

+ (1.7)*sin(2*pi*40*(t-2)) ...

% Componente de 40 Hz

+ (2.5)*randn(size(t));

% Ruido Gaussiano;

Usemos la

fft para calcular la DFT y la potencia de y:

m = length(x);

% Longitud de la ventana

n = pow2(nextpow2(m));

% Longitud de la transformada

y = fft(x,n);

% DFT

f = (0:n-1)*(fs/n);

% Rango de frecuencia

power = y.*conj(y)/n;

% Potencia de la DFT

nextpow2 halla el exponente de la potencia de 2 ms cercana mayor o igual a la longitud de


la ventana (ceil(log2(m))), y pow2 calcula la potencia. Usando una potencia de dos para la
longitud de la transformada optimiza el algoritmo de la FFT, aunque en la prctica exista
usualmente una pequea diferencia en el tiempo de ejecucin al usar n = m.
Para visualizar la DFT, las grficas de abs(y), abs(y).^2, y log(abs(y))son todas comunes.
Una grafica de la potencia versus frecuencia es denominada un periodograma:
plot(f,power)
xlabel('Frequency (Hz)')
ylabel('Power')
title('{\bf Periodogram}')

18

La primera mitad del rango e frecuencia (de 0 a la frecuencia de Nyquist fs/2) es suficiente
para identificar las componentes de frecuencia en la data, desde que la segunda mitad es justo
un reflejo de la primera mitad.
En muchas aplicaciones es tradicional centrar el periodograma en 0. La funcin fftshift re
arregla la salida de la fft con un desplazamiento circular para producir un periodograma
centrado en cero:
y0 = fftshift(y);

% Re arregla los valores de y

f0 = (-n/2:n/2-1)*(fs/n);

% Rango de frecuencia centrado en 0

power0 = y0.*conj(y0)/n;

% Potencia centrado en 0

plot(f0,power0)
xlabel('Frequency (Hz)')
ylabel('Power')
title('{\bf 0-Centered Periodogram}')

19

El re arreglo hace uso de la periodicidad en la definicin de la DFT (Ver Discrete Fourier


Transform (DFT)).
Use las funciones de MATLAB angle y unwrap para crear una grfica de la fase de la DFT:
phase = unwrap(angle(y0));
plot(f0,phase*180/pi)
xlabel('Frequency (Hz)')
ylabel('Phase (Degrees)')
grid on

20

Las componentes de frecuencias son en su mayora ocultos por la aleatoriedad en la fase en


valores adyacentes. La tendencia al alza en la grfica se debe a la funcin desenvolver, que
en este caso suma a la fase 2 con ms frecuencia de lo que resta.

Interpolacin de datos
Este ejemplo demuestra la FFT en un contexto diferente al del anlisis espectral la
estimacin de los coeficientes de un polinomio trigonomtrico que interpola un conjunto de
datos espaciados regularmente. Esta aproximacin de interpolacin de datos es descrito en .
Varias personas descubrieron algoritmos rpidos DFT de forma independiente, y muchas
personas han contribuido a su desarrollo. Un documento de 1965 por John Tukey y John
Cooley es generalmente reconocido como el punto de partida para el uso moderno de la FFT.
Sin embargo, un trabajo de Gauss publicado pstumamente en 1866 (y fechado en 1805)
contiene el uso indiscutible de la tcnica de separacin que forma la base de los modernos
algoritmos FFT.
Gauss se interes en el problema de calcular con exactitud las rbitas de los asteroides a partir
de observaciones de sus posiciones. Su artculo contiene 12 puntos de datos sobre la posicin
del asteroide Pallas, a travs del cual desea interpolar un polinomio trigonomtrico con 12
coeficientes. En lugar de resolver el sistema resultante de 12 por 12 de ecuaciones lineales a
mano, Gauss busc un atajo. Descubri cmo separar las ecuaciones en tres subproblemas
que eran mucho ms fciles de resolver, y luego cmo se recombinan las soluciones para
obtener el resultado deseado. La solucin es equivalente a la estimacin de la DFT de los
datos con un algoritmo FFT.
21

Aqu est la data que apareci en el artculo de Gauss:


asc = 0:30:330;
dec = [408 89 -66 10 338 807 1238 1511 1583 1462 1183 804];
plot(asc,dec,'ro','Linewidth',2)
xlim([0 360])
xlabel('Ascension (Degrees)')
ylabel('Declination (Minutes)')
title('{\bf Position of the Asteroid Pallas}')
grid on

Gauss deseaba interpolar un polinomio trigonomtrico de la forma:

El siguiente cdigo usa la fft para realizar un equivalente clculo de Gauss:


d = fft(dec);
m = length(dec);
M = floor((m+1)/2);
a0 = d(1)/m;
an = 2*real(d(2:M))/m;

22

a6 = d(M+1)/m;
bn = -2*imag(d(2:M))/m;
Graficando lo interpolado con la data:
hold on
x = 0:0.01:360;
n = 1:length(an);
y = a0 + an*cos(2*pi*n'*x/360) ...
+ bn*sin(2*pi*n'*x/360) ...
+ a6*cos(2*pi*6*x/360);
plot(x,y,'Linewidth',2)
legend('Data','DFT Interpolant','Location','NW')

Conclusiones
En esta investigacin se analiz el algoritmo de Goertzel de la transformada de Fourier para
optimizar la limitacin en tiempo mejorando el tiempo de clculo de la DFT basados en el
manejo de tonos DMFT, as mismo se analizaron 2 diferentes casos de la aplicacin dela
transformada rpida de Fourier para ver el comportamiento que presentaba para realizar
transformadas discretas de Fourier de una manera ms eficiente en menos paso que a fin de
cuentas es lo que busca esta transformada dando como resultado el aprendizaje de como a
partir de muestreos se pueden obtener cada una de las transformadas requeridas.
23

Bibliografa

24

También podría gustarte