Implementieren Sie die diskrete Fourier-Transformation (DFT) für eine Sequenz beliebiger Länge. Dies kann entweder als Funktion oder als Programm implementiert werden, und die Sequenz kann entweder als Argument oder unter Verwendung einer Standardeingabe angegeben werden.
Der Algorithmus berechnet ein Ergebnis basierend auf der Standard-DFT in Vorwärtsrichtung. Die Eingabesequenz hat Länge Nund besteht aus [x(0), x(1), ..., x(N-1)]. Die Ausgabesequenz hat die gleiche Länge und besteht darin, [X(0), X(1), ..., X(N-1)]wo jede X(k)durch die folgende Beziehung definiert ist.
Regeln
- Dies ist Code-Golf, also gewinnt die kürzeste Lösung.
- Builtins, die die DFT in Vorwärts- oder Rückwärtsrichtung (auch als inverse Richtung bezeichnet) berechnen, sind nicht zulässig.
- Gleitkomma-Ungenauigkeiten werden nicht gegen Sie angerechnet.
Testfälle
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]
Hilfe
Es gab zuvor eine Herausforderung , die DFT mithilfe eines FFT-Algorithmus für Sequenzen mit Längen gleich einer Potenz von 2 zu finden. Dort finden Sie möglicherweise einige Tricks, die Ihnen hier helfen könnten. Denken Sie daran, dass diese Herausforderung Sie nicht auf Komplexität beschränkt und dass Ihre Lösung auch für Sequenzen beliebiger Länge geeignet ist.

