transformada de fourier y la librería de fftw3
TRANSCRIPT
![Page 1: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/1.jpg)
1/151
Transformada de Fouriery la librería de FFTW3
![Page 2: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/2.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/3.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/5.jpg)
5/151
![Page 6: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/6.jpg)
6/151
![Page 7: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/7.jpg)
7/151
![Page 8: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/8.jpg)
8/151
![Page 9: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/9.jpg)
9/151
![Page 10: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/10.jpg)
10/151
![Page 11: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/11.jpg)
11/151
![Page 12: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/12.jpg)
12/151
![Page 13: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/14.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/15.jpg)
15/151
![Page 16: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/16.jpg)
16/151
t
ω
![Page 17: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/17.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/18.jpg)
18/151
Señal de Ruido
???
![Page 19: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/20.jpg)
20/151
Representación de Ondas
![Page 21: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/21.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/22.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/23.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/24.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/25.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/26.jpg)
26/151
Cálculo de la Transformada de Fourier
![Page 27: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/27.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/28.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/29.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/30.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/31.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/32.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/33.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/34.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/35.jpg)
35/151
Componente DC
![Page 36: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/36.jpg)
36/151
Componente DC
![Page 37: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/37.jpg)
37/151
Componente DC
Ciclo de Trabajo: 50%
![Page 38: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/38.jpg)
38/151
Componente DC
Ciclo de Trabajo: 25%
![Page 39: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/39.jpg)
39/151
Componente DC
Ciclo de Trabajo: 75%
![Page 40: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/40.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/41.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/42.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/43.jpg)
43/151
Propiedades de la Transformada de Fourier
δ(t) →F→ 1
![Page 44: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/44.jpg)
44/151
Propiedades de la Transformada de Fourier
1 →F→ δ(ζ)
![Page 45: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/45.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/46.jpg)
46/151
Propiedades de la Transformada de Fourier
rec (t ) →F→ sinc (ζ)
![Page 47: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/47.jpg)
47/151
Propiedades de la Transformada de Fourier
sinc (t) →F→ rect (ζ)
![Page 48: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/48.jpg)
48/151
Propiedades de la Transformada de Fourier
tri(t ) →F→ sinc2(ζ)
![Page 49: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/49.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/50.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/51.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/52.jpg)
52/151
Problemas que Considerar
![Page 53: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/53.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/54.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/55.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/56.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/57.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/58.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/59.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/60.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/61.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/62.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/63.jpg)
63/151
Realmente queremos esto
(|X|−|E|)sin (θ)
ℑ
ℜ
ℑ(X )
ℜ(X )
θ
(|X|−|E|)cos (θ)
![Page 64: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/64.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/65.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/66.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/67.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/68.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/69.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/70.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/71.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/72.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/73.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/74.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/75.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/76.jpg)
76/151
Problema #4
SeñalLo que la Transformada ve Resultado
![Page 77: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/77.jpg)
77/151
Problema #4
SeñalLo que la Transformada ve Resultado
![Page 78: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/78.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/79.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/80.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/81.jpg)
81/151
Problema #4
SeñalLo que la Transformada ve Resultado
![Page 82: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/82.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/83.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/84.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/85.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/86.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/87.jpg)
87/151
FFT
IFFT
Ventaneo
Modificaciónen Frecuencia
![Page 88: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/88.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/89.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/90.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/91.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/92.jpg)
92/151
Resultado de Sumatoria
![Page 93: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/93.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/94.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/95.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/96.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/97.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/98.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/99.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/100.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/101.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/102.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/103.jpg)
103/151
Espectrograma
tiempo
frecuencia
magnitud
v1 v
2 v3 v
4
vw
![Page 104: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/104.jpg)
105/151
Ahora,
¿cómo programamos todo esto?
![Page 105: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/105.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/106.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/107.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/108.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/109.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/110.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/111.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/112.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/113.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/114.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/115.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/116.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/117.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/118.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/119.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/120.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/121.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/122.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/123.jpg)
124/151
out
in
b2
b1
![Page 124: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/124.jpg)
125/151
out
in
b2
b1
![Page 125: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/125.jpg)
126/151
out
in
b2
b1
![Page 126: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/126.jpg)
127/151
+
out
in
b2
b1
![Page 127: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/127.jpg)
128/151
out
in
b2
b1
![Page 128: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/128.jpg)
129/151
out
in
b2
b1
![Page 129: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/129.jpg)
130/151
out
in
b2
b1
![Page 130: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/130.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/131.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/132.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/133.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/134.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/135.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/136.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/137.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/138.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/139.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/140.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/141.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/142.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/143.jpg)
144/151
Esto lo resolvemos con una técnica que ya conocen...
![Page 144: Transformada de Fourier y la librería de FFTW3](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/144.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/145.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/146.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/147.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/148.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/149.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/150.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022012418/617345739f85b552261c7c2d/html5/thumbnails/151.jpg)
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.