Die FFT (oder Fast Fourier Transform) ist eigentlich ein Algorithmus zur Berechnung der Diskreten Fourier Transformation oder DFT. Die typische Implementierung erzielt eine Beschleunigung gegenüber der herkömmlichen Berechnung der DFT, indem die Tatsache ausgenutzt wird, dass , die Anzahl der Datenpunkte, eine zusammengesetzte ganze Zahl ist, was hier nicht der Fall ist, da eine Primzahl ist. (Während FFTs für den Fall existieren, dass eine Primzahl ist, verwenden sie eine andere Formulierung, die möglicherweise in MATLAB implementiert ist oder nicht). Tatsächlich wählen viele Leute absichtlich
in der Form oder , um die DFT-Berechnung über die FFT zu beschleunigen.N101NN2k4k
Bei der Frage, warum die Spiegelung stattfindet, hat hotpaw2 im Wesentlichen den Grund angegeben, und daher ist das Folgende nur ein Ausfüllen der Details. Die DFT von einer Sequenz von
Datenpunkten definiert eine Sequenz sein wobei
wobei . Es ist offensichtlich, dass im Allgemeinen eine Folge mit komplexen Werten ist, auch wenn eine Folge mit reellen Werten ist. Aber beachte, wannx=(x[0],x[1],x[2],…,x[N−1])NX=(X[0],X[1],X[2],…,X[N−1])
X[m]=∑n=0N−1x[n](exp(−j2πmN))n,m=0,1,…,N−1
j=−1−−−√Xxx ist eine reelle Folge, ist eine reelle Zahl. Wenn eine
gerade Zahl ist , haben wir außerdem , da , auch das
ist eine reelle Zahl. Aber unabhängig davon , ob gerade oder ungerade ist, die DFT eine reellwertigen Sequenz
hat
Hermitesche Symmetrie Eigenschaft , dass Sie in einem Kommentar erwähnt. Wir haben für jedes
feste ,
X[0]=∑n=0N−1x[n]Nexp(−jπ)=−1X[N2]=∑n=0N−1x[n](exp(−j2πN/2N))n=∑n=0N−1x[n](−1)n
NXx m1≤m≤N−1,
So ist , . Als Sonderfall ist zu beachten, dass, wenn wir wählen, wenn ist, wir das , wodurch unser Ergebnis bestätigt wird frühere Schlussfolgerung, dass
X[m]X[N−m]=∑n=0N−1x[n](exp(−j2πmN))n=∑n=0N−1x[n](exp(−j2πN−mN))n=∑n=0N−1x[n](exp(−j2π+j2πmN))n=∑n=0N−1x[n](exp(j2πmN))n=(X[m])∗
1≤m≤N−1X[N−m]=(X[m])∗m=N/2NX[N/2]=(X[N/2])∗X[N/2]ist eine reelle Zahl. Beachten Sie, dass dies eine Auswirkung der hermitischen Symmetrieeigenschaft ist
Das te Bin in der DFT einer reellen Sequenz hat die gleiche Größe wie das -te Bin.m(N−m)
MATLABi-Benutzer müssen dies übersetzen, um die Tatsache zu berücksichtigen, dass MATLAB-Arrays von aufwärts nummeriert sind .1
In Bezug auf Ihre tatsächlichen Daten ist Ihr ein Gleichstromwert von plus
etwas mehr als eine Periode einer Sinuskurve mit einer Frequenz von Hz. In der Tat erhalten Sie
wobei . Somit haben das erste und das letzte von Abtastwerten den gleichen Wert. Die DFT, die Sie berechnen, ist also gegeben durch
Die Nichtübereinstimmung zwischen und verursacht Unordnung in der DFT: the Werte von
x11
x[n]=1+sin(2π(0.01n)), 0≤n≤100
x[0]=x[100]=1101X[m]=∑n=0100(1+sin(2π(n100)))(exp(−j2πm101))n
100101X[m]für ungleich Null, wenn auch klein. Angenommen, Sie würden das Array in Ihrem MATLAB-Programm so anpassen , dass Samples bei entnommen werden sodass
Dann ist die DFT
Sie werden sehen, dass Ihre DFT
genau (oder zumindest innerhalb des Rundungsfehlers), und die
inverse DFT gibt dies für ,
2≤m≤99t
100t=0,0.01,0.02,…,0.99x[n]=1+sin(2π(0.01n)), 0≤n≤99.
X[m]=∑n=099(1+sin(2π(n100)))(exp(−j2πm100))n,
X=(100,−50j,0,0,…,0,50j)0≤n≤99x[n]=1100∑m=099X[m](exp(j2πn100))m=1100[100−50jexp(j2πn100)1+50j(exp(j2πn100))99]=1+12j[exp(j2πn100)−exp(j2π−n100)]=1+sin(2π(0.01n))
dem genau Sie .