Sie machen nichts falsch, aber Sie denken auch nicht genau darüber nach, was Sie erwarten sollten, weshalb Sie über das Ergebnis überrascht sind. Bei Frage 1 ist Ihre Vermutung nah, aber Sie haben tatsächlich Dinge rückwärts; Es ist numerisches Rauschen, das dein zweites plagt, nicht dein erstes.
Bilder können helfen. Hier sind Diagramme der Größe und Phase für den ersten Versuch:
x = Cos[2.0 \[Pi] 200 Range[0, 1, 1/1000]];
fx = Fourier[x];
ListLinePlot[Abs[fx], PlotRange -> All]
ListLinePlot[Arg[fx], PlotRange -> All]
Und der zweite:
x = Cos[2.0 \[Pi] 200 Range[0, 1 - 1/1000, 1/1000]];
fx = Fourier[x];
ListLinePlot[Abs[fx], PlotRange -> All]
ListLinePlot[Arg[fx], PlotRange -> All]
Also, was ist hier los? Der zweite ist am einfachsten zu erklären. Erstens hat die FFT der zweiten überall eine Amplitude von Null, außer bei den beiden im Betragsspektrum sichtbaren Spitzen; Dies folgt, da die Definition der FFT unter Verwendung von 1.000 Datenpunkten Frequenzen der Form für zurückgibt und Ihr Signal daher genau auf einen Frequenzbereich fällt . Infolgedessen ist Ihr Signal an den anderen 998 Punkten vollständig auf Maschinenrauschen aufgrund von Gleitkommafehlern zurückzuführen, und daher ist Ihr Phasenspektrum Unsinn, da es buchstäblich die Phase von Pseudozufallszahlen ist.k / 10000 ≤ k ≤ 999
Für die erste umfasst die Definition der FFT jedoch Frequenzen der Form für , während Ihre Signalfrequenz beträgt , was nicht die Form . Infolgedessen wird Ihr Signal durch spektrale Leckage verbreitert und ist fast überall ungleich Null. Ich werde die physikalische Form des Phasendiagramms nicht kommentieren, aber ich werde sagen, dass es eine geschlossene analytische Form zulässt.k / 10010 ≤ k ≤ 1000200 / 1000k / 1001
Im Allgemeinen denke ich, dass Graphen des Phasenwinkels allein aus diesem Grund eine wirklich schlechte Idee für die Übermittlung von Informationen sind. Erstens können Sie nicht sagen, ob Sie die Phase des Mülls mit niedriger Amplitude oder des tatsächlichen Signals betrachten, und zweitens ist es nicht übersetzungsinvariant, und es ist leicht, äußerst verwirrende Diagramme für einfache Eingaben zu erhalten. Viel besser, wenn Sie immer noch nach etwas suchen, das Phaseninformationen vermittelt, ist ein Diagramm, das gleichzeitig Phasen- und Amplitudeninformationen auf dieselbe visuelle Weise darstellt, z. B. ein Diagramm, in dem die Phase als Farbton und die Größe als Helligkeit codiert sind.
ADDENDUM: Hier sind ein paar Bilder von Mathematica, die das Prinzip veranschaulichen, das ich im vorhergehenden Absatz angegeben habe:
hue = Compile[{{z, _Complex}}, {(1.0 Arg[-z] + \[Pi])/(2 \[Pi]),
Exp[1 - Max[Abs[z], 1]], Min[Abs[z], 1]},
CompilationTarget -> "C", RuntimeAttributes -> {Listable}];
L = 500;
data = Table[Boole[x <= 11 && y <= 11], {x, L}, {y, L}];
Image[hue@
RotateRight[
10 RotateRight[Fourier[RotateRight[data, {-5, -5}]], {L/2, L/2}]],
ColorSpace -> Hue, Magnification -> 1]
Image[hue@
RotateRight[
10 RotateRight[Fourier[RotateRight[data, {-4, -4}]], {L/2, L/2}]],
ColorSpace -> Hue, Magnification -> 1]
Image[hue@
RotateRight[
10 RotateRight[Fourier[RotateRight[data, {0, 0}]], {L/2, L/2}]],
ColorSpace -> Hue, Magnification -> 1]
Alle drei Bilder sind 2D-Fourier-Transformationen desselben Eingangssignals (ein Quadrat von Einsen, aufgefüllt mit Nullen bis zu einer Länge von ), aber die Eingänge wurden zyklisch um 5, 4 und 0 und gedreht 200 Datenpunkte. Die Betragsspektren (codiert durch Pixelhelligkeit) sind identisch, aber die Phasenspektren sind völlig unterschiedlich! Die Phasenkodierung erfolgt so, dass 1 auf Rot, auf Grün, auf Cyan und11 × 11500 × 500ich- 1- ichKarten zu lila. Das meine ich, wenn ich sage, dass Phasenspektren nicht verschiebungsinvariant sind und daher dem menschlichen visuellen Verständnis nicht zugänglich sind. Bei einer zyklischen Verschiebung von 200 Datenpunkten ist es beispielsweise völlig unmöglich zu sagen, was in der Phase vor sich geht, da es nur statisch aussieht, das Eingangssignal jedoch nicht komplizierter ist als die anderen Eingangsfälle.