Transformada Discreta de Fourier (II) 1
Más problemas...ahora computacionales La DFT de orden de una señal x(n) viene definida por la siguiente expresión #1 % X(k) = x(n) "e n= 0 # j"2"$ "k"n Para cada término de la DFT se necesitan las siguientes operaciones multiplicaciones que, en principio, podrían ser complejas depende de x(n). Estas multiplicaciones complejas se transforman en 4 multiplicaciones reales. Este coste computacional es demasiado alto cuando es alto; hay que buscar alternativas a la solución directa. Existen un gran número de variantes rápidas de la DFT conocidas con las siglas FFT correspondientes a Fast Fourier Transform. sumas de números complejos. Para calcular los términos tenemos que hacer veces las anteriores operaciones; coste computacional proporcional a 2 La base de todas ellas radica en las propiedades de simetría de la exponencial compleja que aparece en la definición de la DFT. " j#2#$ W = e W k+/2 W k+ = W k = W k 2
FFT. Algoritmo de decimación temporal X[k] = 1 x[n]w kn Se puede dividir este sumatorio en términos pares e impares. /2 1 x[2r]w 2rk r=0 }{{} n = 2r + /2 1 x[2r + 1]W 2rk+k r=0 }{{} n = 2r + 1 = /2 1 x[2r]w rk /2 r=0 } {{ } G[k] /2 1 +W k r=0 }{{} }{{} H[k] G[k] G[k] + W k H[k] x[2r + 1]W rk /2 x[0] x[2] x[4] 4-Point DFT G[0] G[1] G[2] 0 1 X[0] X[1] X[2] Se ha dividido la DFT de orden en dos de orden /2. El numero de multiplicaciones queda reducido de 2 x[6] x[1] G[3] H[0] 3 4 X[3] X[4] a (/2) 2 + Si se toma potencia de 2 podemos aplicar este procedimiento de forma iterativa hasta la DFT de orden 2 x[3] x[5] x[7] 4-Point DFT H[1] H[2] H[3] 5 6 7 X[5] X[6] X[7] 3
FFT.Algoritmo de decimación temporal Ejemplo para =8 x[0] X[0] x[4] x[2] x[6] x[1] X[1] X[2] X[3] X[4] Si no se tienen suficientes datos para tomar =2 k se puede aplicar la técnica del zero padding ; añadir ceros. x[5] W 1 8 X[5] x[3] X[6] x[7] W 3 8 X[7] 4
FFT. Algoritmo de decimación frecuencial Se plantea un procedimiento análogo al anterior pero ahora en el dominio frecuencial. Considerando la DFT de x(n) de orden Los términos pares de X(k) quedan definidos como X[2r] = 1 x[n]w 2rn /2 1 x[n]w 2rn + X[k] = 1 n=/2 1 x[n]w kn x[n]w 2rn Si se realiza un cambio de índices n=m+(/2) /2 1 /2 1 x[n]w 2rn + m=0 x[m + /2]W 2r(m+/2) Aplicando propiedades de simetría y agrupando términos se llega a = /2 1 (x[n] + x[n + /2])W rn /2 De forma análoga se tiene para los términos impares lo siguiente X[2r + 1] = /2 1 W n (x[n] x[n + /2])W rn /2 HEMOS COSEGUIDO USAR LA DFT DE ORDE /2 PARA CALCULAR LOS TÉRMIOS DE LA DFT DE ORDE 5
FFT. Algoritmo de decimación frecuencial x[0] g[0] X[0] x[1] x[2] g[1] g[2] point 2 DFT X[2] X[4] x[3] g[3] X[6] x[4] x[5] x[6] x[7] h[0] 1 h[1] 1 h[2] 1 h[3] 1 0 W 1 W 2 W 3 W point 2 DFT X[1] X[3] X[5] X[7] x[0] X[0] Tanto en la decimacion temporal como en la frecuencial el coste de la DFT queda reducido de x[1] x[2] x[3] x[4] X[4] X[2] X[6] X[1] 2 a log 2 (). x[5] W 1 8 X[5] x[6] X[3] x[7] W 3 8 X[7] 6
Convolución usando la FFT (I) La aplicación más común de la DFT es para implementar de manera óptima la operación básica en procesado de la señal como es la convolución lineal (recordemos que hay una convolución circular). La manera de hacerlo es muy sencilla; dadas dos secuencias de longitud 1 y 2 la convolución lineal va a tener de longitud 1 + 2. Lo que se hace es rellenar con ceros las dos secuencias hasta que las dos tengan 1 + 2 términos; evidentemente si se van a usar las FFT comentadas anteriormente se buscará la potencia de 2 más cercana a ese valor 1 + 2. Seguidamente se calculan las DFT, se multiplican para, posteriormente, calcular la DFT inversa del producto; el resultado es la convolución lineal de las dos secuencias. 1 2 1 2 min{ 1, 2 } 2 + 1.5 log 2 2 5 8 8 52 10 15 32 140 304 50 80 256 3,950 3,584 50 1000 2048 49,950 37,888 512 10000 16384 5,119,488 376,832 7
Convolución usando la FFT (II) Se ha comentado el método a seguir cuando se quiere usar la DFT para determinar la convolución lineal de dos secuencias finitas y, en principio, no muy largas qué ocurre si no se da esta circunstancia?. Supondremos, para hacerlo más gráfico que se quiere convolucionar una respuesta impulsional h(n) de un sistema discreto de longitud M con una secuencia de entrada x(n). Empezaremos por el método de solapamiento y suma Los datos de entrada se tomarán en bloques de longitud L. A cada uno de los bloques se añadirán M ceros. Se calculan las DFT de orden de la nueva secuencia y de h(n), evidentemente hay que añadir L ceros a h(n). Se multiplican y se calcula la DFT inversa del producto. Finalmente hay que tener en cuenta el efecto de añadir los ceros; los M últimos términos de la salida para cada bloque deben sumarse a los M primeros términos del siguiente bloque. 8
Convolución usando la FFT (III) El método que expondremos en esta diapositiva es el método de solapamiento y almacenamiento Aquí la señal de entrada en cada bloque está solapada con el bloque anterior en los M primeros términos. Además los M últimos términos se solapan (añaden) a los del siguiente bloque. En el primer bloque, evidentemente, hay que añadir M ceros. Se calculan las DFT de orden de la nueva secuencia y de h(n), evidentemente hay que añadir L ceros a h(n). Se multiplican y se calcula la DFT inversa del producto. Finalmente hay que tener en cuenta los efectos del aliasing temporal por lo que los primeros M términos de la salida para cada bloque no deben ser tenidos en cuenta. 9
Algoritmo de Goertzel (I) Este algoritmo es apropiado cuando no se quieren calcular todos los términos de la DFT de orden. Una aplicación típica de este caso es la conocida como DTMF X(k) = (Dual Tone Multi-Frequency). 1 x(n)w kn X(k) = W k 1 m=0 1 x(m)w km = Se utiliza cuando se cumple que M log 2 () siendo M el número de términos a determinar y el orden de la DFT. m=0 x(m)w k( m) Sólo hemos multiplicado por 1!!!!! si se define la secuencia y k (n) = 1 m=0 x(m)w k( m) Se observa entonces que esta secuencia es la salida de un filtro de entrada x(n) y respuesta impulsional h k (n) con h k (n) = W kn u(n) Conclusión importante a destacar es que X(k)=y k () Tomando Transformadas Z se llega a H k (z) = 1 1 W k z 1 dónde tiene los polos/ceros H(z)? 10
Algoritmo de Goertzel (II) Si determinamos la ecuación en diferencias a partir de H(z) llegaríamos a y k (n) = W k y k(n 1) + x(n), y k ( 1) = 0 Esta ecuación en diferencias no es eficiente por 2 razones fundamentales; tenemos que calcular todos los y k (n) ya que nos interesa el último y aparecen multiplicaciones complejas (donde cada una de ellas equivalen a 4 reales) en todos los paso intermedios La solución pasa por multiplicar numerador/denominador de H(z) por la expresión: H k (z) = 1 W k z 1 Se llega entonces a la siguiente expresión. 1 W k z 1 1 2cos(2πk/)z 1 + z 2 Si se plantea una estructura canónica las ecuaciones en diferencias son: v k (n) = 2cos(2πk/)v k (n 1) v k (n 2) + x(n) y k (n) = v k (n) W k v k (n 1) Donde la última ecuación sólo se calcula para n=. x[n] 2 cos 2 k z 1 k W y k [n] z 1 1 11