Rincón Matemático

Matemática => Matemática Discreta y Algoritmos => Mensaje iniciado por: julianov en 12 Mayo, 2021, 12:39 am

Título: Transformada discreta de fourier
Publicado por: julianov en 12 Mayo, 2021, 12:39 am
Hola a todos.

Estoy estudiando la transformada discreta de fourier y quiero graficar la misma usando python. Para ello genero un arreglo de números de la siguiente manera:

x=[]
y=[]
for i in range(0, 600):
    x.append(i)

repe=60
N=600

for i in range (0,600):
    y.append(math.sin((2*math.pi*(repe / N ))*i))

plt.plot(x,y)
plt.show()

repe es el periodo de la señal senoidal en la muestra de 6000 números. Es decir, la señal oscilará 60 veces en el arreglo de 600 números.

(https://foro.rinconmatematico.com/index.php?action=dlattach;topic=116781.0;attach=23224)

Ahora quiero calcular y visualizar la serie discreta de fourier y para eso hago lo siguiente:

real=0
img=0
dft=[]

for i in range(0, N-1):
    for j in range (0,N-1):
       real=real+y[j]*( math.cos(-((2*3.14)/N)*i*j))
       img=img+y[j]*(math.sin(-((2*3.14)/N)*i*j))
    dft.append( math.sqrt( math.pow(real,2) + math.pow(img,2) ) )
    real=0
    img=0


plt.plot(dft)
plt.ylabel('some numbers')
plt.show()

Pero obtengo un gráfico no consistente con 2 deltas de dirac (como debe ser porque la serie de fourier de una señal senoidal son 2 delta de dirac) pero con diferente amplitud cada uno. Y no pudo localizar la frecuencia de la misma. Pueden ver la imagen en los archivos adjuntos

(https://foro.rinconmatematico.com/index.php?action=dlattach;topic=116781.0;attach=23225)


Si ven la siguiente imagen adjunta, la distancia d, que va del valor 300 (que supongo sería el valor medio) no tiene correlación con la frecuencia. ¿Y por qué las deltas tienen diferente amplitud?

(https://foro.rinconmatematico.com/index.php?action=dlattach;topic=116781.0;attach=23226)
Título: Re: Transformada discreta de fourier
Publicado por: Abdulai en 12 Mayo, 2021, 01:27 am
Estás usando otra frecuencia en la transformada.

Código: [Seleccionar]
real=real+y[j]*( math.cos(-((2*3.14)/N)*i*j))
 img=img+y[j]*(math.sin(-((2*3.14)/N)*i*j))

Si antes usaste math.pi no entiendo por qué ahi usas ese espantoso redondeo.
Corregido debe dar lo que esperas.
Título: Re: Transformada discreta de fourier
Publicado por: julianov en 12 Mayo, 2021, 01:53 am
Muchas gracias el problema de que las deltas tienen diferente tamaño se solucionó.

(https://foro.rinconmatematico.com/index.php?action=dlattach;topic=116781.0;attach=23227)

Ahora el problema que tengo es que no entiendo por qué la delta comienza en 60 y en 540. ¿No debería comenzar en los deltas en 300-60 y en 300+60?

(https://foro.rinconmatematico.com/index.php?action=dlattach;topic=116781.0;attach=23228)

Por qué digo eso?, bueno proque los deltas son simétricos, y por lo tanto el cero de la frecuencia, al tener un arreglo de 600 elementos sería en 300
Título: Re: Transformada discreta de fourier
Publicado por: Luis Fuentes en 12 Mayo, 2021, 09:39 am
Hola

 Pero 60 y 540 igualmente son simétricos respecto a 300.

Saludos.
Título: Re: Transformada discreta de fourier
Publicado por: julianov en 13 Mayo, 2021, 01:58 am
Gracias a todos por sus respuestas.

Tengo una consulta. ¿Por qué se repite la serie? Por qué si yo hago:

for i in range(0, 2* (N-1)):
    for j in range (0,N-1):
       real=real+y[j]*( math.cos(-((2*3.14)/N)*i*j))
       img=img+y[j]*(math.sin(-((2*3.14)/N)*i*j))
    dft.append( math.sqrt( math.pow(real,2) + math.pow(img,2) ) )
    real=0
    img=0

Obtengo 2 veces lo mismo, y si hago:

for i in range(0, 3*(N-1)):
    for j in range (0,N-1):
       real=real+y[j]*( math.cos(-((2*3.14)/N)*i*j))
       img=img+y[j]*(math.sin(-((2*3.14)/N)*i*j))
    dft.append( math.sqrt( math.pow(real,2) + math.pow(img,2) ) )
    real=0
    img=0

Obtengo 3 veces lo mismo.

(https://foro.rinconmatematico.com/index.php?action=dlattach;topic=116781.0;attach=23232)

\( x(k) = {\sum }_{n=0 }^{N-1} {e }^{ - \frac{- 2 \pi}{N } n k } \)

Estimo que si k=N entonces \( {e }^{ - \frac{-2 \pi}{ 1} n  } \) Pero ¿Por qué no sucede lo mismo en la transformada continua?

\( x(k) = {\int}_{0 }^{\infty} x(t) {e }^{ - \frac{2 \pi}{T } t k } dt \) ¿Qué pasa cuando T=t? ¿No sucede lo mismo?