为什么频率为0的fft(numpy.fft.fft方法)的值非常大

为什么频率为0的fft(numpy.fft.fft方法)的值非常大,numpy,scipy,fft,Numpy,Scipy,Fft,我有一个信号ts,它的rougly平均值为40,然后用fft对它进行编码 ts = array([25, 40, 30, 40, 29, 48, 36, 32, 34, 38, 15, 33, 40, 32, 41, 25, 37,49, 41, 35, 23, 22, 36, 44, 28, 36, 32, 37, 39, 51]) index = fftshift(fftfreq(len(ts))) ft_ts =fftshift(fft(ts)) 输出 ft_ts = array([

我有一个信号ts,它的rougly平均值为40,然后用fft对它进行编码

ts = array([25, 40, 30, 40, 29, 48, 36, 32, 34, 38, 15, 33, 40, 32, 41, 25, 37,49, 41, 35, 23, 22, 36, 44, 28, 36, 32, 37, 39, 51])
index = fftshift(fftfreq(len(ts)))
ft_ts =fftshift(fft(ts))
输出

ft_ts = array([  -76.00000000 +8.34887715e-14j,   -57.72501110 +1.17054586e+01j,
       7.69492662 +9.79582336e+00j,   -29.11145618 -7.22493645e+00j,
      14.92140414 +4.58471353e+01j,   -26.00000000 -4.67653718e+01j,
     -39.61803399 -2.83601821e+01j,   -11.34044003 +8.66215368e+00j,
      23.68703939 +1.57391882e+01j,   -64.88854382 -2.44499549e+01j,
      50.00000000 -3.98371686e+01j,     4.09382150 -6.27663403e+00j,
     -37.38196601 -3.06708342e+01j,    35.97162964 +1.31929223e+01j,
      18.69662985 -2.20453671e+00j,  1048.00000000 +0.00000000e+00j,
      18.69662985 +2.20453671e+00j,    35.97162964 -1.31929223e+01j,
     -37.38196601 +3.06708342e+01j,     4.09382150 +6.27663403e+00j,
      50.00000000 +3.98371686e+01j,   -64.88854382 +2.44499549e+01j,
      23.68703939 -1.57391882e+01j,   -11.34044003 -8.66215368e+00j,
     -39.61803399 +2.83601821e+01j,   -26.00000000 +4.67653718e+01j,
      14.92140414 -4.58471353e+01j,   -29.11145618 +7.22493645e+00j,
       7.69492662 -9.79582336e+00j,   -57.72501110 -1.17054586e+01j])
频率为0时,ft_ts的值为1048。这不应该是我原来的信号ts的平均值吗,它是40?这里发生了什么事


非常感谢

FFT不是标准化的,所以第一项应该是和,而不是平均值

例如,请参见定义

你可以看到,当k=0时,指数项是1,你只需要得到x的和


这就是为什么
fft(np.ones(10))中的第一项是
10
,而不是
1
1
是平均值(因为它是一个1的数组),而
10
是和。

尝试fft(np.ones(10))@tom10,这似乎是正确的,结果是数组([10.+0.j,0.+0.j,0.+0.j,0.+0.j,0.+0.j,0.+0.j,0.+0.j),数组中有25个值?眨眼wink@Jaime长度是30为什么?@Jaime更新数据非常感谢:)