Ich versuche, eine einfache Version der diskreten Fourier-Transformation in Python zu implementieren. Mein Code ist wie folgt:Diskrete Fourier-Transformation, die komplexes Konjugat von "richtiger" Antwort liefert
[(4+0j), (1-2.414213562373095j), (-1.8369701987210297e-16-2.220446049250313e-16j), (1-0.4142135623730949j), -2.449293598294706e-16j, (0.9999999999999992+0.4142135623730959j), (3.2904645469127765e-16-3.3306690738754696e-16j), (0.9999999999999997+2.4142135623730954j)]
Dies unterscheidet sich von der Antwort, die ich auf Wolfram Alpha erhalten, wenn die DFT der gleichen Sequenz here, auf zwei Arten der Berechnung:
#!/usr/bin/env python
import cmath
def dft_simple(sequence):
# dft of seq defined as
# sigma from n=0 to N-1 of x(n) *exp(-2*pi*j*k*n/N)
seqLenth = len(sequence)
complexSequence = []
for k in range(seqLenth):
sigma = 0 - 0j
print("k = {}".format(k))
for n in range(seqLenth):
print("n = {}".format(n))
print("value = {}".format(sequence[n] * cmath.exp(-2*1j * cmath.pi * float(k) \
* float(n)/float(seqLenth))))
sigma = sigma + (sequence[n] * cmath.exp(-2*1j * cmath.pi * float(k) \
* float(n)/float(seqLenth)))
print("exp = {0}".format(-2*1j * cmath.pi * float(k) \
* float(n)/float(seqLenth)))
complexSequence.append(sigma)
print("sum = {}".format(sigma))
print("")
return(complexSequence)
seq4 = [1,1,1,1,0,0,0,0]
print(dft_simple(seq4))
ich ein Ergebnis erhalten. Erstens, Wolfram alpha teilt sich durch sqrt (N), wobei N die Länge der Sequenz ist, die nur eine andere symmetrische Definition der Vorwärts- und Rückwärtstransformation ist.
Zweitens, und verwirrender, gibt mir meine Implementierung das komplexe Konjugat des Ergebnisses, das Wolfram Alpha mir gibt - die numerischen Werte sind ansonsten ungefähr gleich. Ist dies ein Problem eines Implementierungsproblems in meinem Code (z. B. Syntaxfehler) oder ist es einfach Wolfram, das eine andere Definition der diskreten Fourier-Transformation verwendet?
[Wolfram verwendet eine andere Definition der diskreten Fourier-Transformation] (https://reference.wolfram.com/language/tutorial/FourierTransforms.htmlhttps://reference.wolfram.com/language/tutorial/FourierTransforms.html# 19751) – SleuthEye
@SleuthEye Dein Link wurde korrigiert: [Wolfram verwendet eine andere Definition von DFT] (https://reference.wolfram.com/language/tutorial/FourierTransforms.html#19751) – Norman
Ah, okay, das macht mehr Sinn - ich hatte vorher [wolfram math world] (http://mathworld.wolfram.com/DiscreteFourierTransform.html) als Referenz benutzt, danke fürs Aufräumen. Könnten Sie das als Antwort lassen, damit ich diese Frage als gelöst markieren kann? – Decimak