您没有做错任何事情,但是您也没有仔细考虑您应该看到的结果,这就是为什么您对结果感到惊讶的原因。对于问题1,您的猜想接近,但实际上情况有些倒退;是数字噪音困扰着您的第二个,而不是您的第一个。
图片可能会有所帮助。这是第一次试验的幅度和相位图:
x = Cos[2.0 \[Pi] 200 Range[0, 1, 1/1000]];
fx = Fourier[x];
ListLinePlot[Abs[fx], PlotRange -> All]
ListLinePlot[Arg[fx], PlotRange -> All]
第二个:
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]
ķ / 10000 ≤ ķ ≤ 999
对于第一个,然而,FFT的定义包括所述形式的频率为,而你的信号频率为,这是不形式的。结果,您的信号会因频谱泄漏而变宽,并且几乎在任何地方都不会为零。我不会评论相图的物理形式,但是我会说它承认是封闭的分析形式。k / 10010 ≤ ķ ≤ 1000200 / 1000k / 1001
总的来说,正是出于这个原因,我认为单凭相位角图就无法传达信息。首先,您无法确定是在查看低幅值垃圾信号还是实际信号的相位,其次,它不是平移不变的,而且对于简单的输入,很容易产生令人困惑的图形。更好的是,如果您仍在寻找传达相位信息的东西,那是一张以相同的视觉方式同时描绘相位和幅度信息的图,例如一个将相位编码为色相而幅度编码为亮度的图。
附录:这是来自Mathematica的几张图片,它们说明了我在上一段中所述的原理:
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]
11 × 11500 × 500一世− 1− 我映射为紫色。这就是我说相位谱是非位移不变的,因此不适合人类视觉理解时的意思。例如,在200个数据点的循环移位下,完全看不出该阶段发生了什么,因为它看起来像是静态的,但是输入信号并不比其他输入情况复杂。