Nie robisz nic złego, ale również nie zastanawiasz się dokładnie, czego powinieneś się spodziewać, i dlatego jesteś zaskoczony rezultatem. W przypadku pytania 1 twoje przypuszczenie jest bliskie, ale faktycznie masz rzeczy do tyłu; to szum numeryczny, który dręczy twój drugi, a nie pierwszy.
Zdjęcia mogą pomóc. Oto wykresy wielkości i fazy dla pierwszej próby:
x = Cos[2.0 \[Pi] 200 Range[0, 1, 1/1000]];
fx = Fourier[x];
ListLinePlot[Abs[fx], PlotRange -> All]
ListLinePlot[Arg[fx], PlotRange -> All]
A drugi:
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]
Co się tu dzieje? Drugi jest najłatwiejszy do wyjaśnienia. Po pierwsze, FFT drugiego ma wszędzie zerową amplitudę, z wyjątkiem dwóch pików widocznych w widmie wielkości; wynika to z tego, że definicja FFT z wykorzystaniem 1000 punktów danych zwraca częstotliwości w postaci dla , a zatem sygnał spada dokładnie na przedział częstotliwości. W rezultacie w pozostałych 998 punktach twój sygnał jest całkowicie spowodowany szumem maszyny z powodu błędów zmiennoprzecinkowych, a zatem twoje spektrum fazowe jest nonsensowne, ponieważ jest to dosłownie faza liczb pseudolosowych.k/10000≤k≤999
Jednak dla pierwszego definicja FFT obejmuje częstotliwości formy dla , podczas gdy częstotliwość sygnału wynosi , która nie ma formy . W rezultacie twój sygnał zostaje poszerzony przez wyciek widmowy i prawie wszędzie będzie niezerowy. Nie będę komentował fizycznej postaci wykresu fazowego, ale powiem, że przyjmuje on zamkniętą formę analityczną.k/10010≤k≤1000200/1000k/1001
Ogólnie myślę, że same wykresy kąta fazowego są naprawdę złym pomysłem na przekazywanie informacji właśnie z tego powodu; po pierwsze, nie możesz stwierdzić, czy patrzysz na fazę śmieci o niskiej amplitudzie, czy rzeczywisty sygnał, a po drugie, nie jest on niezmienny dla translacji i łatwo jest uzyskać całkowicie oszałamiające wykresy dla prostych danych wejściowych. O wiele lepiej, jeśli nadal szukasz czegoś, co przekazuje informacje o fazie, to wykres, który jednocześnie przedstawia informacje o fazie i amplitudzie w ten sam wizualny sposób, na przykład wykres, w którym faza jest kodowana jako odcień, a wielkość jest kodowana jako jasność.
DODATEK: Oto kilka zdjęć z Mathematiki, które ilustrują zasadę, którą podałem w poprzednim akapicie:
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]
Wszystkie trzy obrazy to transformaty Fouriera 2D tego samego sygnału wejściowego ( kwadrat z 1 wypełniony zerami o długości ), ale wejścia były cyklicznie obracane o 5, 4 i 0, oraz 200 punktów danych. Widma jasności (zakodowane przez jasność pikseli) są identyczne, ale widma fazowe są zupełnie inne! Kodowanie fazowe odbywa się tak, że 1 mapuje na czerwony, mapuje na zielony, mapuje na cyjan i11×11500×500i−1−iodwzorowuje na fioletowy. Mam na myśli to, co mówię, gdy widma fazowe są niezmienne i nie podlegają zmianom, a zatem nie podlegają ludzkiemu zrozumieniu wizualnemu. Na przykład, przy cyklicznym przesunięciu 200 punktów danych, zupełnie nie można powiedzieć, co dzieje się w fazie, ponieważ wygląda to po prostu na statyczny, ale sygnał wejściowy nie jest bardziej skomplikowany niż inne przypadki wejściowe.