151
1/151 Transformada de Fourier y la librería de FFTW3

Transformada de Fourier y la librería de FFTW3

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Transformada de Fourier y la librería de FFTW3

1/151

Transformada de Fouriery la librería de FFTW3

Page 2: Transformada de Fourier y la librería de FFTW3

2/151

Transformada de Fourier

● En 1807, Fourier propuso una solución a una ecuación conocida como “La Ecuación de Calor”.

● Esta ecuación trataba de describir la manera en la que el calor se distribuía en una placa de metal, dada la existencia de fuentes de calor conocidas.

● Era una ecuación diferencial parcial parabólica, que en ese entonces no tenía solución.

Page 3: Transformada de Fourier y la librería de FFTW3

3/151

Transformada de Fourier

● Antes de Fourier, soluciones particulares para esta ecuación habían sido propuestas.

● Sólo aplicaban si la fuente de calor se comportaba como una onda.– Dícese, si se comportaba como una señal que

oscila a una única frecuencia, como una función de seno o coseno.

Page 4: Transformada de Fourier y la librería de FFTW3

4/151

Transformada de Fourier

● Fourier generalizó dichas soluciones de la siguiente manera:

● Varias ondas sumadas entre si pueden ser utilizadas para representar cualquier señal periódica.

● Y así, se inventaron las Series de Fourier.

Page 5: Transformada de Fourier y la librería de FFTW3

5/151

Page 6: Transformada de Fourier y la librería de FFTW3

6/151

Page 7: Transformada de Fourier y la librería de FFTW3

7/151

Page 8: Transformada de Fourier y la librería de FFTW3

8/151

Page 9: Transformada de Fourier y la librería de FFTW3

9/151

Page 10: Transformada de Fourier y la librería de FFTW3

10/151

Page 11: Transformada de Fourier y la librería de FFTW3

11/151

Page 12: Transformada de Fourier y la librería de FFTW3

12/151

Page 13: Transformada de Fourier y la librería de FFTW3

13/151

● F es la señal f transformada al dominio de la frecuencia.● ω

n son las frecuencias de las ondas que, al sumarse, representan a f.

● F(ωn) es la magnitud de la onda que oscila con frecuencia ω

n.

F̂ (ω1)

ω1

F̂ (ω2) F̂ (ω3) F̂ (ω4) F̂ (ω5) F̂ (ω6)ω2 ω3 ω4 ω5 ω6

Page 14: Transformada de Fourier y la librería de FFTW3

14/151

¿Para qué?

● Permite representar una señal, cualquier señal, en otro dominio.

● Es la misma señal, sólo que es vista de dos puntos de vista (o “dominio”) diferente.

Page 15: Transformada de Fourier y la librería de FFTW3

15/151

Page 16: Transformada de Fourier y la librería de FFTW3

16/151

t

ω

Page 17: Transformada de Fourier y la librería de FFTW3

17/151

Pero, podemos hacer muchas cosas en el dominio del tiempo... es cómodo y bonito.

¿Para qué necesitamos irnos al dominio de la frecuencia?

Page 18: Transformada de Fourier y la librería de FFTW3

18/151

Señal de Ruido

???

Page 19: Transformada de Fourier y la librería de FFTW3

19/151

Señal de Ruido Removida

Por medio de hacer 0 a la magnitud de la señal a esa frecuencia.

Filtrado por frecuencia o filtrado espectral.

La señal en el dominio de la frecuencia es también conocido como su espectro.

Page 20: Transformada de Fourier y la librería de FFTW3

20/151

Representación de Ondas

Page 21: Transformada de Fourier y la librería de FFTW3

21/151

● F es la señal f transformada al dominio de la frecuencia.● ω

n son las frecuencias de las ondas que, al sumarse, representan a f.

● F(ωn) es la magnitud de la onda que oscila con frecuencia ω

n.

F̂ (ω1)

ω1

F̂ (ω2) F̂ (ω3) F̂ (ω4) F̂ (ω5) F̂ (ω6)ω2 ω3 ω4 ω5 ω6

Page 22: Transformada de Fourier y la librería de FFTW3

22/151

Representación de Ondas

● Una onda puede ser representada con un coseno, con un seno, o con un exponencial, ya que la fórmula de Euler indica que:

● Donde e es el número Euler, que es la base del logaritmo natural, y se calcula con la siguiente serie:

● Se puede redondear a 2.71828.

e ix=cos (x )+i sin (x )

e=1+11+

11∗2

+1

1∗2∗3+

11∗2∗3∗4

Page 23: Transformada de Fourier y la librería de FFTW3

23/151

Representación de Ondas

● Representar una onda con exponenciales nos brinda la posibilidad de simplificar las ecuaciones bastante.

● Por ejemplo, podemos representar una onda sω1 que oscila a una frecuencia ω1 y con una magnitud cω1 así:

sω1( t )=cω1

e iω1 t

Page 24: Transformada de Fourier y la librería de FFTW3

24/151

¿Qué es ω?

● Es la “frecuencia angular”: radianes por segundo.

● Recordemos que el exponencial es realmente una sumatoria de un coseno y un seno que reciben como entrada un ángulo.

Page 25: Transformada de Fourier y la librería de FFTW3

25/151

Relación entre ω y ζ

● La frecuencia en Hertz (ζ) representa periodos por segundo.

● Si cada periodo de una onda senoidal es 2π radianes, entonces:

ω = 2πζ

Page 26: Transformada de Fourier y la librería de FFTW3

26/151

Cálculo de la Transformada de Fourier

Page 27: Transformada de Fourier y la librería de FFTW3

27/151

La Transformada es una Sumatoria

● Una señal discreta se puede considerar como un arreglo de muestras de energía.

● Por lo tanto, según Fourier, deberíamos de poder representar cualquier momento en el tiempo de una señal como una sumatoria de las energías en ese momento de otras señales periódicas.

Page 28: Transformada de Fourier y la librería de FFTW3

28/151

Mapeo Formalde Frecuencia a Tiempo

Donde:• t es un momento en el tiempo en segundos• f(t) es la energía de la señal en el momento t• N es el número de señales periódicas con las cuales queremos representar a f(t)

• ωn es la frecuencia de la señal n.

f (t )=1N∑n=1

N

F̂ (ωn)e iωn t

Page 29: Transformada de Fourier y la librería de FFTW3

29/151

¿Mapeo?

● El valor f(t) es cálculado con todos los valores del dominio de la frecuencia F(ωn). Esto significa dos cosas:– El tamaño de la señal en el dominio de la

frecuencia es la misma que en el dominio del tiempo.

– Y como todo mapeo, se puede hacer en dirección inversa: calculando un F(ωn) con todos los valores del dominio del tiempo f(t).

Page 30: Transformada de Fourier y la librería de FFTW3

30/151

Mapeo Formalde Tiempo a Frecuencia

Donde:• t es un momento en el tiempo en segundos• f(t) es la energía de la señla en el momento t• T es el tiempo final de f(t)• ω

n es la frecuencia de la señal n.

F̂ (ωn)=1T∑t=0

T

f ( t)e−iωn t

Page 31: Transformada de Fourier y la librería de FFTW3

31/151

Versión Continua

● Lo que estamos viendo realmente es la Transformada Discreta de Fourier.– Ya que es la que nos es más relevante.

● Recordatorio: una sumatoria de los valores de un señal es equivalente a una integral (área bajo la curva).

● Por lo tanto, la versión Continua de esta transformada (la original) se puede obtener substituyendo las sumatorias por integrales.

Page 32: Transformada de Fourier y la librería de FFTW3

32/151

Versión Continua

F̂ (ω)=1T∫

0

T

f (t)e−i ωt dt

f (t )=1N∫0

N

F̂ (ω)ei ωt d ω

Page 33: Transformada de Fourier y la librería de FFTW3

33/151

Versión Continua (en Hertz)

F̂ (ζ )=∫ f (t)e−i2 πζ tdt

f (t )=∫ F̂ (ζ)e i2π ζ td ζ

Page 34: Transformada de Fourier y la librería de FFTW3

34/151

Componente DC

F̂ (0)=1T∑t=0

T

f ( t)e−i0 t

=1T∑t=0

T

f (t)

Es el promedio de la energía de la señal en el periodo.

Page 35: Transformada de Fourier y la librería de FFTW3

35/151

Componente DC

Page 36: Transformada de Fourier y la librería de FFTW3

36/151

Componente DC

Page 37: Transformada de Fourier y la librería de FFTW3

37/151

Componente DC

Ciclo de Trabajo: 50%

Page 38: Transformada de Fourier y la librería de FFTW3

38/151

Componente DC

Ciclo de Trabajo: 25%

Page 39: Transformada de Fourier y la librería de FFTW3

39/151

Componente DC

Ciclo de Trabajo: 75%

Page 40: Transformada de Fourier y la librería de FFTW3

40/151

Propiedades de la Fórmula de Euler

eix+e−ix=cos(x)+i sin (x)+(cos(−x)+i sin (−x))=cos(x)+i sin(x)+cos(−x)+i sin(−x)=cos(x)+i sin(x)+cos(x)−i sin(x)=2cos(x)

eix=cos(x)+i sin (x)

cos(x)=ℜ(eix)=12(e ix+e−ix)

Page 41: Transformada de Fourier y la librería de FFTW3

41/151

Propiedades de la Fórmula de Euler

eix−e−ix=cos(x)+i sin (x)−(cos(−x)+i sin (−x))=cos(x)+i sin (x)−cos(−x)−i sin (−x)=cos(x)+i sin (x)−cos(x)+i sin (x)=i2sin (x)

eix=cos(x)+i sin (x)

sin (x)=ℑ(eix)=1i2

(eix−e−ix)

Page 42: Transformada de Fourier y la librería de FFTW3

42/151

Propiedades de la Fórmula de Euler

cos(x)⋅cos( y)=12

(eix+e−ix)⋅12

(eiy+e−iy)

=14

(eix eiy+e ixe−iy+e−ix eiy+e−ixe−iy)

=14

(ei (x+ y )+ei(x− y )+e−i(x+ y )+e−i (x− y ))

=14

(ei (x+ y )+e−i(x+ y )+ei (x− y )+e−i (x− y ))

=12

(12

(ei (x+ y )+e−i(x+ y ))+12

(ei (x− y )+e−i (x− y )))

=12

(cos(x+ y)+cos(x− y))

Page 43: Transformada de Fourier y la librería de FFTW3

43/151

Propiedades de la Transformada de Fourier

δ(t) →F→ 1

Page 44: Transformada de Fourier y la librería de FFTW3

44/151

Propiedades de la Transformada de Fourier

1 →F→ δ(ζ)

Page 45: Transformada de Fourier y la librería de FFTW3

45/151

Propiedades de la Transformada de Fourier

x(t−t0) →F→ X (ζ)e−i2πζ t0

x(t)

x(t-t0)

t0

Page 46: Transformada de Fourier y la librería de FFTW3

46/151

Propiedades de la Transformada de Fourier

rec (t ) →F→ sinc (ζ)

Page 47: Transformada de Fourier y la librería de FFTW3

47/151

Propiedades de la Transformada de Fourier

sinc (t) →F→ rect (ζ)

Page 48: Transformada de Fourier y la librería de FFTW3

48/151

Propiedades de la Transformada de Fourier

tri(t ) →F→ sinc2(ζ)

Page 49: Transformada de Fourier y la librería de FFTW3

49/151

Propiedades de la Transformada de Fourier

x(t )∗y (t ) →F→ X (ζ)Y (ζ)Convolución

Corr (x (t) , y (t)) →F→ X (ζ)Y H (ζ)Correlación

x(At ) →F→1AX (ζ / A)Escala de Tiempo

e−At2

→F→ √π2e−(πζ)

2/AGuassiana

Page 50: Transformada de Fourier y la librería de FFTW3

50/151

Algunas Consideraciones

● Las series de Fourier pueden representar cualquier señal periódica.

● La transformada de Fourier asume que la señal tiene un periodo infinito.

● Sólo tiene una limitante del tipo de señal que puede transformar:– Que tenga energía finita.– Si fuera infinita, sería imposible calcular el

componente DC.

Page 51: Transformada de Fourier y la librería de FFTW3

51/151

Algunas Consideraciones

● La transformada de Fourier puede transformar señales discontinuas:– Pero esto resulta en tratar de aproximar la

discontinuidad insertando armónicos.

Page 52: Transformada de Fourier y la librería de FFTW3

52/151

Problemas que Considerar

Page 53: Transformada de Fourier y la librería de FFTW3

53/151

Problema #1

● ¿Con cuáles frecuencias representamos a una señal?

● Harry Nyquist y Claude Shannon introdujeron un teorema que dice que: “para determinar completamente una señal con un ancho de banda conocido, se debe muestrear con una onda que tenga una frecuencia mayor al doble de su frecuencia máxima”.

Page 54: Transformada de Fourier y la librería de FFTW3

54/151

Problema #1

● Mejor dicho:– “Si una señal es muestreada con una frecuencia

ωs, entonces la frecuencia máxima que puede ser

representada en el dominio de Fourier es ωs/2”.

Page 55: Transformada de Fourier y la librería de FFTW3

55/151

● Tenemos una señal f muestreada de 48000 Hz.● Si ω

6 es su máxima frecuencia, entonces ésta debe ser 24000*(2π).

● El resto de las ωn están espaciadas uniformemente de ahí para atrás.

F̂ (ω1)

ω1

F̂ (ω2) F̂ (ω3) F̂ (ω4) F̂ (ω5) F̂ (ω6)ω2 ω3 ω4 ω5 ω6

Page 56: Transformada de Fourier y la librería de FFTW3

56/151

Problema #2

● Si la formula de Euler es:

● Y la transformada dice que:

● Entonces F(ωn) es un número complejo.

e ix=cos (x )+i sin (x )

F̂ (ωn)=1T∑t=0

T

f ( t)e−iωn t

Page 57: Transformada de Fourier y la librería de FFTW3

57/151

Números Complejos

● Un número complejo es la sumatoria de dos valores: uno real y uno imaginario.

F̂ (ωn)=xn+ iynAl visualizar la señal en el dominio de frecuencia, usualmente lo que vemos es la magnitud de F(ω

n):

∣F̂ (ωn)∣=√ xn2+ yn

2

Page 58: Transformada de Fourier y la librería de FFTW3

58/151

Números Complejos: Fase

● La “fase” de la frecuencia es el ángulo del número complejo (fácilmente calculado con atan2 en C).

F̂ (ωn)=xn+ iyn

Page 59: Transformada de Fourier y la librería de FFTW3

59/151

Números Complejos

● Es crucial recordar esto al estar manipulando las magnitudes en tiempo real.

● Se pueden hacer restas, multiplicaciones, etc. pero se tienen que hacer considerando que dichas operaciones serán sobre números complejos.

Page 60: Transformada de Fourier y la librería de FFTW3

60/151

No me toquen la fase...

● Ejemplo de cancelación de ruido: tienen la firma espectral del ruido (E), y quieren restarla de la entrada (X) para sacarla a la salida (Y).– Todo en el dominio de la frecuencia.

● Es tentador hacer:

Y (ωn)= X (ωn)−E (ωn)

Page 61: Transformada de Fourier y la librería de FFTW3

61/151

Pero...

● Esto equivale a:

ℑ(Y (ωn))=ℑ(X (ωn))−ℑ(E (ωn))

ℜ(Y (ωn))=ℜ(X (ωn))−ℜ(E (ωn))

Page 62: Transformada de Fourier y la librería de FFTW3

62/151

Lo cual puede modificar la fase

ℑ(X−E )

ℑ(X )

ℜ(X )ℜ(X −E )

Page 63: Transformada de Fourier y la librería de FFTW3

63/151

Realmente queremos esto

(|X|−|E|)sin (θ)

ℑ(X )

ℜ(X )

θ

(|X|−|E|)cos (θ)

Page 64: Transformada de Fourier y la librería de FFTW3

64/151

NO ME TOQUEN LA FASE

Aωn=|X (ωn)|−|E (ωn)|θωn

=θ(X (ωn))

Y (ωn)=Aωncos (θωn

)+ i Aωnsin(θωn

)

Page 65: Transformada de Fourier y la librería de FFTW3

65/151

Problema #2.5

● El resultado de la Transformada Inversa también es un número complejo:

f (t )=1N∑n=1

N

F̂ (ωn)e iωn t

Page 66: Transformada de Fourier y la librería de FFTW3

66/151

Problema #2.5

● No es un problema realmente, ya que la energía en el tiempo se presenta en la parte real del número calculado:

f (t ) ← ℜ( f ( t))=x t

f (t )= x t+iy t

Por lo que el resultado final, realmente es un número real, común y corriente.

Page 67: Transformada de Fourier y la librería de FFTW3

67/151

Problema #3

● MITO: Si el tamaño de la señal en tiempo es la misma que la señal en frecuencia, entonces una señal de 1024 puntos en el tiempo tendrá 1024 puntos de frecuencia.

● Cierto y falso. Sí, serán 1024 puntos de frecuencia, pero no todos representan a una frecuencia única.

Page 68: Transformada de Fourier y la librería de FFTW3

68/151

La Transformada Inversa

● Habíamos dicho que la transformada inversa es:

f (t )=1N∑n=1

N

F̂ (ωn)e iωn t

Page 69: Transformada de Fourier y la librería de FFTW3

69/151

La Real Transformada Inversa

● La verdadera transformada inversa es la siguiente:

● Sí, hay tal cosa como “frecuencias negativas”, porque Fourier quiso realmente fregar nuestras mentes.

f (t )=1

2N∑n=−N

N

F̂ (ωn)ei ωn t

Page 70: Transformada de Fourier y la librería de FFTW3

70/151

El Resultado de la Transformada de Fourier

ω1 ω2 ω3 ω4 ω5 ω6−ω1−ω2−ω3−ω4−ω5−ω6

Este espejeo tiene que ver con el cálculo de las partes imaginarias y las partes reales de la Transformada de Fourier y los famosos “Círculos de Harmónicos”, ilustrados brevemente en el video “FourierCircles.mp4” de la página del curso.

Page 71: Transformada de Fourier y la librería de FFTW3

71/151

Lo que normalmente se nos entrega en las implementaciones de Fourier:

No sé por qué, honestamente.

Supongo que es más sencillo manejar los índices de al principio del vector.

También, cabe mencionar que...

ω1 ω2 ω3 ω4 ω5 ω6 −ω1−ω2−ω3−ω4−ω5−ω6

Page 72: Transformada de Fourier y la librería de FFTW3

72/151

El Componente DC

DC, al estar programando se le asigna una frecuencia de 0 Hz.

Representa el “centro” de la señal en el eje vertical. Las señales de audio normalmente están centradas en 0, por lo que esta componente no “sale” en al visualizar la señal en el dominio de la frecuencia, pero se tiene que considerar.

Por lo tanto...

ω1 ω2 ω3 ω4 ω5DC ω6 −ω1−ω2−ω3−ω4−ω5

Page 73: Transformada de Fourier y la librería de FFTW3

73/151

Esto es con lo que vamos a trabajar:

CONCLUSIÓN: El resultado de transformar una señal de 1024 puntos en el tiempo es una señal con 1024 puntos en frecuencia “espejeados”, realmente calculando 512 puntos útiles.

POR LO TANTO: al manipular el valor en una frecuencia, se tiene que manipular, de la misma manera, su contraparte en el “espejo” de la señal en el dominio de la frecuencia.

ω1 ω2 ω3 ω4 ω5DC ω6 −ω1−ω2−ω3−ω4−ω5

Page 74: Transformada de Fourier y la librería de FFTW3

74/151

Problema #4

● Fourier propuso que “varias ondas sumadas entre si pueden ser utilizadas para representar cualquier señal periódica.”

● ¿Qué sucede si nuestra señal no es periódica?

Page 75: Transformada de Fourier y la librería de FFTW3

75/151

Problema #4

● Hacemos trampa: suponemos que nuestra señal tiene un periodo del tamaño de la señal.

● Para que esto funcione adecuadamente, tenemos que cerciorarnos que nuestra señal comience y termine con valores no discontínuos.

Page 76: Transformada de Fourier y la librería de FFTW3

76/151

Problema #4

SeñalLo que la Transformada ve Resultado

Page 77: Transformada de Fourier y la librería de FFTW3

77/151

Problema #4

SeñalLo que la Transformada ve Resultado

Page 78: Transformada de Fourier y la librería de FFTW3

78/151

Problema #4

SeñalLo que la Transformada ve Resultado

Sangrado de Frecuencias(Frequency Bleed Over)

Page 79: Transformada de Fourier y la librería de FFTW3

79/151

¿Sangrado de Frecuencias?

Es la mejor traducción que se me ocurrió a Frequency Bleed Over.

● Básicamente, se requiere de la presencia de otras señales periódicas para poder representar discontinuidades.

● Esto no es bueno, porque se insertan frecuencias que no están en nuestra señal original.

Page 80: Transformada de Fourier y la librería de FFTW3

80/151

Hann

● Hay varias formas de hacer continuos los puntos iniciales y finales de la señal.

● Forma Popular: multiplicando, punto a punto, a la señal por la función Hann.

● En este ejemplo, T es 200.

w (t )=0.5 (1−cos(2 π tT−1

))

Page 81: Transformada de Fourier y la librería de FFTW3

81/151

Problema #4

SeñalLo que la Transformada ve Resultado

Page 82: Transformada de Fourier y la librería de FFTW3

82/151

Problema #4

SeñalLo que la Transformada ve

El sangrado se minimiza

Resultado

Page 83: Transformada de Fourier y la librería de FFTW3

83/151

Problema #5

● Si T en la ecuación de la Transformada es el “tiempo final de la señal en el dominio del tiempo”:

● Se necesita de toda la señal para llevar a cabo su transformación.

● ¿Y en tiempo real cómo le hacemos?

F̂ (ωn)=1T∑t=0

T

f ( t)e−iωn t

Page 84: Transformada de Fourier y la librería de FFTW3

84/151

Transformada de Tiempo Corto

● En vez de transformar toda la señal, transformamos “trozos” de la señal.

● Estos trozos son conocidos como ventanas.● Se transforman una tras otra, como vayan

llegando.● Así T se convierte en el “tiempo final de la

ventana”.

Page 85: Transformada de Fourier y la librería de FFTW3

85/151

Transformada de Tiempo Corto

● Uno estaría tentado a solamente partir la señal en dichas ventanas, transformar cada ventana, modificar la ventana en el dominio de la frecuencia, y transforma en inversa.

● Pero, recuerden el Problema #4: tenemos que aparentar como si la señal (o, en este caso, la ventana de la señal) fuera periódica:– Hacer que los puntos del tiempo inicial y final no

sean discontinuos

Page 86: Transformada de Fourier y la librería de FFTW3

86/151

Problema #5.5

● Entonces, multiplicamos por Hann cada ventana, la transformamos, la modificamos en frecuencia, y la transformamos de inversa.

¿No?

● El resultado de esto es tener varias ventanas multiplicadas por Hann una tras otra.

Page 87: Transformada de Fourier y la librería de FFTW3

87/151

FFT

IFFT

Ventaneo

Modificaciónen Frecuencia

Page 88: Transformada de Fourier y la librería de FFTW3

88/151

Problema #5.5

● Al hacer esto, tendremos una señal que sube y baja de volumen artificialmente.

● SOLUCIÓN: sobrelape.

Page 89: Transformada de Fourier y la librería de FFTW3

89/151

Sobrelape

● Una virtud de una función Hann larga es que, al sumar la segunda mitad de la función con la primera, obtenemos una señal con una magnitud casi constante.

Page 90: Transformada de Fourier y la librería de FFTW3

90/151

Sobrelape

● Normalmente ventanearíamos, con ventanas de tamaño T:– [1 T], [T+1 2T], [2T+1 3T], etc.

● Pero si ventaneamos de esta manera:– [1 T], [T/2+1 3T/2], [T+1 2T], [3T/2+1 5T/2] ,etc.– Nuestra ventanas siguen siendo de tamaño T,

pero comenzamos cada T/2, en vez de cada T.

Page 91: Transformada de Fourier y la librería de FFTW3

91/151

Esto es lo que veíamos en baudline, en la ventana del tiempo.

Page 92: Transformada de Fourier y la librería de FFTW3

92/151

Resultado de Sumatoria

Page 93: Transformada de Fourier y la librería de FFTW3

93/151

Sobrelape

● Este proceso se le conoce como “Sobrelapa-y-Suma” (overlap-and-add).

● Se puede con otro tipo de funciones como:– Función Hamming (con 50% sobrelape)– Función Blackman (con 33% sobrelape)

● Todos con sus pros y cons, pero Hann es una de las funciones más populares para llevarlo a cabo.

Page 94: Transformada de Fourier y la librería de FFTW3

94/151

Pero...

● No es EXACTAMENTE la misma señal, porque siempre hay una ondulación en el resultado del sobrelape.

Hay ondulación, aunque pequeña.

Page 95: Transformada de Fourier y la librería de FFTW3

95/151

Hann Periódica

● La ventana que vimos anteriormente es conocida como la versión simétrica de Hann.

● La versión periódica tiene la virtud de que al hacer sobrelape, es exactamente igual a 1.

w (t )=0.5 (1−cos(2 π tT−1

)) w (t )=0.5 (1−cos(2π tT

))

Page 96: Transformada de Fourier y la librería de FFTW3

96/151

Pero...

● Cualquier modificación en el dominio de la frecuencia cambia la energía de la señal.– Esto impacta directamente al componente DC.

Normal DC Offset

Page 97: Transformada de Fourier y la librería de FFTW3

97/151

¿Cambiamos el DC?

● Es tentador entonces también cambiar el DC antes de regresar al dominio del tiempo.

● Pero este valor se calcula con la información del tiempo, no con la información frecuencial.

● Entonces, no modifiquen el DC.● Y para evitar el problema del DC offset:

Page 98: Transformada de Fourier y la librería de FFTW3

98/151

La solución:Weighted Overlap-and-Add (WOLA)● Aplicamos dos ventanas, una antes de ir al

dominio de la frecuencia (análisis) y otra al regresar al dominio del tiempo (síntesis).– La ventana de análisis quita las discontinuidades

en el dominio del tiempo para evitar el sangrado de frecuencia.

– La ventana de síntesis quita las discontinuidades entre ventanas al regresar al domino del tiempo.

Page 99: Transformada de Fourier y la librería de FFTW3

99/151

Requisito

● Ambas ventanas, en conjunto, tienen que satisfacer la siguiente condición para que WOLA sea equivalente al overlap-and-add normal:

y (n)= x (n)∑t

w( t)v (t )

∑t

w (t)v ( t)=1

w: ventana de análisis antes de ir al dominio de la frecuenciav: ventana de síntesis después de regresar al dominio del tiempox: la entrada de sobrelape-y-sumay: la salida de sobrelape-y-sumat: índice de tiempo en las ventanasn: índice de tiempo en las señales de entrada y salida

Page 100: Transformada de Fourier y la librería de FFTW3

100/151

Selección de Ventanasde Análisis y de Síntesis

● Popularmente, se utiliza la raíz cuadrada de la ventana de Hann periódica para ambas la ventana de análisis y de síntesis :

● De esta manera, aplicar ambas ventanas en conjunto es equivalente a aplicar una ventana de Hann periódica.

w (t )=v (t)=√0.5(1−cos (2 π tT

))

Page 101: Transformada de Fourier y la librería de FFTW3

101/151

Selección de Ventanasde Análisis y de Síntesis

● Se pueden utilizar otras ventanas, con su pros y contras. Y aún si no cumplen con el requisito de singularidad, se puede forzar que se cumpla compensando la salida con:

● Pero esto no es necesario con la raíz cuadrada de Hann periódica.

y (n) ← y (n)T /2

∑t

w( t)v (t )

Page 102: Transformada de Fourier y la librería de FFTW3

102/151

Independientemente, el resultado de la Transformada de Tiempo Corto de Fourier es:

Una serie de ventanas de tiempotransformadas al dominio de frecuencia.

Page 103: Transformada de Fourier y la librería de FFTW3

103/151

Espectrograma

tiempo

frecuencia

magnitud

v1 v

2 v3 v

4

vw

Page 104: Transformada de Fourier y la librería de FFTW3

105/151

Ahora,

¿cómo programamos todo esto?

Page 105: Transformada de Fourier y la librería de FFTW3

106/151

Nuevo mejor amigo: FFTW3

● FFT significa “Fast Fourier Transform”.

– La transformada original suma señales para un coeficiente que se restan en el cálculo de otros coeficientes.

– La FFT evita estas sumas redundantes, acelerando el cálculo al grado de poderse hacer en tiempo real.

● Esta “aceleración” fue propuesta por Cooley y Tukey en 1965.

● FFTW3 implementa una versión de esta “aceleración” que es una de las más usadas en aplicaciones de tiempo real.

● Sitio Oficial:

http://www.fftw.org/fftw3_doc/

Page 106: Transformada de Fourier y la librería de FFTW3

107/151

Beneficios

● Muy rápida y basada en C.● Se instala facilmente con apt-get:

sudo apt-get install libfftw3-dev● Es código abierto.

– Repositorio Oficial:

https://github.com/FFTW/fftw3

Page 107: Transformada de Fourier y la librería de FFTW3

108/151

Beneficios

● Implementación de números complejos compatible con la de C y la de C++.– Para C:

#include <complex.h>

– Para C++:#include <complex>

Page 108: Transformada de Fourier y la librería de FFTW3

109/151

FFTW3 en C

● Se debe incluir DESPUÉS de incluir a complex.h

#include <complex.h>

#include <fftw3.h>● Para definir números complejos:

double complex● Para compilar:

gcc jack_fft.c -o jack_fft -ljack -lfftw3

Page 109: Transformada de Fourier y la librería de FFTW3

110/151

Ejemplo Básico C#include <complex.h>

#include <fftw3.h>

//inicializar buffers que usa fftw3

double complex *i_fft, *i_time, *o_fft, *o_time;

i_fft = (double complex *) fftw_malloc(sizeof(double complex) * 1024);

i_time = (double complex *) fftw_malloc(sizeof(double complex) * 1024);

o_fft = (double complex *) fftw_malloc(sizeof(double complex) * 1024);

o_time = (double complex *) fftw_malloc(sizeof(double complex) * 1024);

//configurar a fftw3

i_forward = fftw_plan_dft_1d(1024, i_time, i_fft , FFTW_FORWARD, FFTW_MEASURE);

o_inverse = fftw_plan_dft_1d(1024, o_fft , o_time, FFTW_BACKWARD, FFTW_MEASURE);

… Ya adentro de la función de procesamiento de audio

… llenar a i_time con la señal de tiempo

fftw_execute(i_forward);

… modificar a i_fft para filtrar y copiar el resultado a o_fft

fftw_execute(o_inverse);

… obtener de o_time información filtrada en el dominio del tiempo

Page 110: Transformada de Fourier y la librería de FFTW3

111/151Ejemplo Completo CFFTW3 ya configurado

// “in” y “out” es nuestra entrada y salida en el tiempo respectivamente// nframes es el tamaño de la ventana

for(i = 0; i < nframes; i++){i_time[i] = in[i];

}fftw_execute(i_forward);

for(i = 0; i < nframes; i++){o_fft[i] = i_fft[i];

}o_fft[3] = 0; //filtrando la tercera frecuenciao_fft[nframes-3] = 0; //espejeando dicha manipulación

fftw_execute(o_inverse);for(i = 0; i < nframes; i++){

out[i] = creal(o_time[i])/nframes; //fftw3 requiere normalizar su salida}

Page 111: Transformada de Fourier y la librería de FFTW3

112/151

Espejeo en C

nframes = 12 i = 3

w3 → in[3] = in[i]

-w3 → in[9] = in[nframes – 3] = in[nframes - i]

ω1 ω2 ω3 ω4 ω5DC ω6 −ω1−ω2−ω3−ω4−ω5

0 1 2 3 4 5 6 7 8 9 10 11

Page 112: Transformada de Fourier y la librería de FFTW3

113/151

FFTW3 en C++

● Se debe incluir a complex así (sin “.h”):

#include <complex>● Para definir números complejos:

std::complex<double>● Se requiere utilizar la siguiente función para hacer

casting entre los dos tipos de variables complejas:

reinterpret_cast<fftw_complex>● Para compilar:

gcc jack_fft.cpp -o jack_fft -ljack -lfftw3

Page 113: Transformada de Fourier y la librería de FFTW3

114/151

Ejemplo Básico C++#include <complex>

#include <fftw3.h>

//inicializar buffers que usa fftw3

std::complex<double> *i_fft, *i_time, *o_fft, *o_time;

i_fft = (std::complex<double>*) fftw_malloc(sizeof(std::complex<double>) * 1024);

i_time = (std::complex<double>*) fftw_malloc(sizeof(std::complex<double>) * 1024);

o_fft = (std::complex<double>*) fftw_malloc(sizeof(std::complex<double>) * 1024);

o_time = (std::complex<double>*) fftw_malloc(sizeof(std::complex<double>) * 1024);

//configurar a fftw3

i_forward = fftw_plan_dft_1d(1024, reinterpret_cast<fftw_complex*>(i_time), reinterpret_cast<fftw_complex*>(i_fft), FFTW_FORWARD, FFTW_MEASURE);

o_inverse = fftw_plan_dft_1d(1024, reinterpret_cast<fftw_complex*>(o_fft), reinterpret_cast<fftw_complex*>(o_time), FFTW_BACKWARD, FFTW_MEASURE);

… Ya adentro de la función de procesamiento de audio

… llenar a i_time con la señal de tiempo

fftw_execute(i_forward);

… modificar a i_fft para filtrar y copiar el resultado a o_fft

fftw_execute(o_inverse);

… obtener de o_time información filtrada en el dominio del tiempo

Page 114: Transformada de Fourier y la librería de FFTW3

115/151Ejemplo Completo C++FFTW3 ya configurado

// “in” y “out” es nuestra entrada y salida en el tiempo respectivamente// nframes es el tamaño de la ventana

for(i = 0; i < nframes; i++){i_time[i] = in[i];

}fftw_execute(i_forward);

for(i = 0; i < nframes; i++){o_fft[i] = i_fft[i];

}o_fft[3] = 0; //filtrando la quinta frecuenciao_fft[nframes-3] = 0; //espejeando dicha manipulación

fftw_execute(o_inverse);for(i = 0; i < nframes; i++){

out[i] = real(o_time[i])/nframes; //fftw3 requiere normalizar su salida}

Page 115: Transformada de Fourier y la librería de FFTW3

116/151

Tamaño de Ventana

● Para que la aceleración de FFTw3 funcione, es esencial que el tamaño de ventana sea una potencia exacta de 2:– T = 2x, donde x es un número entero.

● 1024 y 2048 satisfacen esta condición.● Además de que es compatible con las necesidades de

sobrelape de la función Hann.

Page 116: Transformada de Fourier y la librería de FFTW3

117/151

Tamaño de Ventana

● Si no cumple con esa condición, se requiere que los datos se “expandan” a potencia exacta de 2 más cercana y mayor, llenando con ceros los que sobran.

● Ejemplo:

– Tamaño de ventana, T: 5 → [1 2 3 4 5]– Potencia exacta de 2 más cercana: 8– Nueva ventana con T:8 → [1 2 3 4 5 0 0 0]

● No le quita exactitud al proceso ni al ventaneo.

Page 117: Transformada de Fourier y la librería de FFTW3

118/151

Ejemplos Completos

● En la página del curso están ejemplos completos en los que una ventana (o, periodo) de JACK es convertida y regresada al tiempo sin hacerle nada y sin ventaneo.– En C: jack_fft.c– En C++: jack_fft.cpp

● Compilen y verifiquen que funciona.

Page 118: Transformada de Fourier y la librería de FFTW3

119/151

ADVERTENCIA

● Este código no está haciendo nada con la información.– Sólo se va al dominio de la frecuencia y regreso al

dominio al tiempo.

Page 119: Transformada de Fourier y la librería de FFTW3

120/151

Ejercicio #1

● Filtren todas las frecuencia menores a 500 Hz.● ¿Cómo sabemos en cual índice de o_fft se

ubican dichas frecuencias?● Recuerden verificar su salida con baudline.

● Si hacemos este filtrado, ¿cómo se escucha? ¿Por qué?

Page 120: Transformada de Fourier y la librería de FFTW3

121/151

Ejercicio #2

● Hacer un filtro pasa-banda.● Frecuencia mínima y máxima proporcionados

por el usuario.– Usen el sistema de argc y argv para obtenerlos.

Page 121: Transformada de Fourier y la librería de FFTW3

122/151

Sobrelapa-y-Suma

● No lo estamos haciendo todavía.– Seguro escucharan “brincos” entre las ventanas.

● FFTW3 nada más proporciona la conversión e inversa de la transformada.

● El ventaneo lo tenemos que hacer nosotros.● Recuerden utilizar una ventana de tamaño

igual a una potencia exacta de 2.

Page 122: Transformada de Fourier y la librería de FFTW3

123/151

RecomendaciónSobrelape-y-Suma

● El tamaño de ventana de JACK, no tiene que ser igual a la ventana que alimentamos a Fourier:

● Utilicen una ventana de Fourier que es el doble de largo que la de JACK.

Ventana de Fourier/Hann

Ventana de JACK

Ventana de Fourier/Hann

Page 123: Transformada de Fourier y la librería de FFTW3

124/151

out

in

b2

b1

Page 124: Transformada de Fourier y la librería de FFTW3

125/151

out

in

b2

b1

Page 125: Transformada de Fourier y la librería de FFTW3

126/151

out

in

b2

b1

Page 126: Transformada de Fourier y la librería de FFTW3

127/151

+

out

in

b2

b1

Page 127: Transformada de Fourier y la librería de FFTW3

128/151

out

in

b2

b1

Page 128: Transformada de Fourier y la librería de FFTW3

129/151

out

in

b2

b1

Page 129: Transformada de Fourier y la librería de FFTW3

130/151

out

in

b2

b1

Page 130: Transformada de Fourier y la librería de FFTW3

131/151

Examen Parcial

● Hacer un agente de JACK que atrasa (o desfasa) la señal de entrada por medio del operador de la exponencial imaginaria, con un argumento en segundos.

● Ejemplo:

./programa 0.005

Atrasa/desfasa la señal por 0.005 segundos.

Page 131: Transformada de Fourier y la librería de FFTW3

132/151

Desfase por Medio de Exponencial Imaginaria

● Hasta ahorita, hemos desfasado las señales de una manera bastante artificial:– Quitando muestras de un lado de la señal, y

agregamos ceros.

Page 132: Transformada de Fourier y la librería de FFTW3

133/151

Desfase por Medio de Exponencial Imaginaria

● Otra forma de desfasar, es por medio de multiplicar la señal transformada Fourier por una exponencial:

g(t−T )=F−1(G(t )e−i2π ζT )

Donde:g: señal que vamos a desfasarG: transformada de Fourier de la señal gT: tiempo en segundos por la que vamos a desfasar la señalζ: la frecuencia que vamos a desfasar

Page 133: Transformada de Fourier y la librería de FFTW3

134/151

Desfase de Señal en Frecuencia

x(t−T ) →F→ X (ζ)e−i2πζ T

x(t)

x(t-T)

T

Page 134: Transformada de Fourier y la librería de FFTW3

135/151

¿Frecuencia?

● Estamos desfasando, algo que sucede en el tiempo. ¿Como es que una frecuencia está involucrada?

● Esta transformación realmente sólo desfasa los datos de la señal que pertenecen a dicha frecuencia.

● Por lo que si queremos desfasar a TODA la señal, tenemos que aplicar esta transformación a todas sus frecuencias.– Incluyendo las negativas, con su valor negativo.

Page 135: Transformada de Fourier y la librería de FFTW3

136/151

Desfase por Medio de Exponencial Imaginaria

● A todas las frecuencias se le aplica esto:

g(t−T )=F−1(G(t )e−i2π ζT )

Donde:g: señal que vamos a desfasarG: transformada de Fourier de la señal gT: tiempo en segundos por la que vamos a desfasar la señalζ: la frecuencia que vamos a desfasar

Page 136: Transformada de Fourier y la librería de FFTW3

137/151

¿Para qué tanto lío?

● Estábamos desfasando las señales de una manera sencilla.

● ¿Para qué complicarnos la vida?

● Varias razones, pero la que nos interesa por ahora es que así podemos desfasar una señal a nivel segundos, no a nivel muestra...

Page 137: Transformada de Fourier y la librería de FFTW3

138/151

Desfase por Medio de Exponencial Imaginaria

● Es decir...

g(t−T )=F−1(G(t )e−i2π ζT)

Donde:g: señal que vamos a desfasarG: transformada de Fourier de la señal gT: tiempo en segundos por la que vamos a desfasar la señalζ: la frecuencia que vamos a desfasar

Page 138: Transformada de Fourier y la librería de FFTW3

139/151

Tiempo

● Fourier hace un tipo de extrapolación inter-muestra, lo cual hace esta forma mucho más precisa que hacerlo en el dominio del tiempo.

● Esto es importante cuando estemos haciendo localización y beamforming.

Page 139: Transformada de Fourier y la librería de FFTW3

140/151

Propiedades de este Desfase

Bidireccionalidad.● El signo del término T indica el tipo de desfase:

– Si T > 0: desfase positivo.– Si T < 0: desfase negativo.

Page 140: Transformada de Fourier y la librería de FFTW3

141/151

Espera...

● ¿Desfase negativo? O sea, ¡¿adelantar la señal?!– ¿No viola eso algún tipo de ley del mundo físico?

● Al estar haciendo sobrelape, sacamos a la salida ventanas pasadas.– Todos los desfases que hagamos son en el pasado.– Un desfase negativo sólo desfasa menos que uno

positivo.

Page 141: Transformada de Fourier y la librería de FFTW3

142/151

Propiedades de este Desfase

Ciclicidad.● Por estar aplicando una onda senoidal, el

desfase es cíclico.● Dícese: los valores que están al final, que

normalmente tacharíamos como “inválidas”, son puestos al principio.

Page 142: Transformada de Fourier y la librería de FFTW3

143/151

Ciclicidad del Desfase por Frecuencia

● Con un desfase positivo, usando dos ventanas para el proceso de overlap-and-add tendríamos:

● Lo contrario sucede con un desfase negativo.● Esto introduce discontinuidades sólo haciendo

sobrelapa-y-suma con Hann.

Page 143: Transformada de Fourier y la librería de FFTW3

144/151

Esto lo resolvemos con una técnica que ya conocen...

Page 144: Transformada de Fourier y la librería de FFTW3

145/151

Solución: WOLA

● Así es: WOLA reduce considerablemente el efecto de esta ciclicidad en el resultado final.

● Pero tiene sus límites:

Page 145: Transformada de Fourier y la librería de FFTW3

146/151

Límite #1

● Re-aparece la ondulación ala Hann simétrica:– Pero ahora a lo largo de varias ventanas.– Y es proporcional a la cantidad de desfase.

Hay ondulación a lo largo de varias ventanas.

Page 146: Transformada de Fourier y la librería de FFTW3

147/151

Límite #2

● Sólo maneja desfases menores a media ventana.

● Desfases mayores se “ciclan” a desfases menores.– Si la ventana es de 100 ms, un desfase de 75 ms.

resulta en uno de 25 ms.

Page 147: Transformada de Fourier y la librería de FFTW3

148/151

Recomendación

● Sólo lleven a cabo desfases menores a media ventana de JACK.– La ondulación es casi imperceptible.– No se experimenta ciclicidad de desfases.

Page 148: Transformada de Fourier y la librería de FFTW3

149/151

Pero...

● Si queremos desfases mayores, necesitamos utilizar ventanas de JACK y Fourier más grandes.– Lo cual requeriría re-configurar a JACK.

● Aún así...

Page 149: Transformada de Fourier y la librería de FFTW3

150/151

Media ventana es bastante...

● Si muestrean a 48 kHz, con una ventana de 1024 muestras:– Media ventana es alrededor de 0.01 s.– La velocidad del sonido es 343 m/s.– El sonido recorre 3.43 m. en 0.01 s.

Page 150: Transformada de Fourier y la librería de FFTW3

151/151

Esto es más que suficiente...

● Si queremos compensar por el desfase entre dos micrófonos, sólo necesitan estar a una distancia menor de 3.43 m.– Esto es muy viable para nuestros propósitos.

● Por lo tanto, realmente sólo nos interesan desfases pequeños.– Lo cual vamos corroborar en las siguientes

sesiones.

Page 151: Transformada de Fourier y la librería de FFTW3

152/151

Comentarios delExamen Parcial

● Ya que los desfases serán pequeños e imperceptibles por nuestro oído:– Deberán revisar con baudline el resultado del desfase.

● Se recomienda tener dos salidas:– Una con la señal de “referencia”, en el que se hace el

sobrelape pero sin aplicar los operadores de desfase.– Otra con la señal desfasada, en el que se hace el

sobrelape y aplicando los operadores de desfase.