Implemente la Transformada discreta de Fourier (DFT) para una secuencia de cualquier longitud. Esto puede implementarse como una función o un programa y la secuencia se puede dar como un argumento o utilizando una entrada estándar.
El algoritmo calculará un resultado basado en DFT estándar en la dirección hacia adelante. La secuencia de entrada tiene longitud N
y consta de [x(0), x(1), ..., x(N-1)]
. La secuencia de salida tendrá la misma longitud y consiste en [X(0), X(1), ..., X(N-1)]
donde cada uno X(k)
está definido por la siguiente relación.
Reglas
- Este es el código de golf, por lo que gana la solución más corta.
- No se permiten las unidades integradas que calculan el DFT en direcciones hacia adelante o hacia atrás (también conocido como inverso).
- Las imprecisiones de punto flotante no se contarán en su contra.
Casos de prueba
DFT([1, 1, 1, 1]) = [4, 0, 0, 0]
DFT([1, 0, 2, 0, 3, 0, 4, 0]) = [10, -2+2j, -2, -2-2j, 10, -2+2j, -2, -2-2j]
DFT([1, 2, 3, 4, 5]) = [15, -2.5+3.44j, -2.5+0.81j, -2.5-0.81j, -2.5-3.44j]
DFT([5-3.28571j, -0.816474-0.837162j, 0.523306-0.303902j, 0.806172-3.69346j, -4.41953+2.59494j, -0.360252+2.59411j, 1.26678+2.93119j] = [2, -3j, 5, -7j, 11, -13j, 17]
Ayuda
Hubo un desafío anterior para encontrar el DFT usando un algoritmo FFT para secuencias con longitudes iguales a una potencia de 2. Puede encontrar algunos trucos allí que podrían ayudarlo aquí. Tenga en cuenta que este desafío no lo limita a ninguna complejidad y también requiere que su solución funcione para secuencias de cualquier longitud.