不一致的numpy FFT结果

时间:2015-04-08 09:22:09

标签: python python-2.7 numpy fft dft

因此,我正在测量来自ADC的信号,ADC具有11.6 us的采样时间,每次读取正好60,000个采样。它正在从纯正弦波发生器(AD9850)读取信号,该信号在1kHz时产生~1V峰值信号。

我现在将来自ADC的原始数据提供给使用numpy.fft的FFT方法,并且工作得很好;我的频率正常。

问题在于我是否填充结果! 当我只使用原始数据时,返回的信号幅度为0.172。 这是代码:

t_sample *= 1e-9                      #t_sample is given in ns
detrended = signal.detrend(data)      #remove DC component
length = len(detrended) 
fy = numpy.fft.fft(detrended)      
fy = 2.0*numpy.abs(fy)/length         #normalise the real component
size = len(fy)
fx = numpy.fft.fftfreq(size, t_sample)
return fx[:size/2+1],fy[:size/2+1]

现在,当我告诉fft用一些额外的零填充阵列时,为了提高计算速度,幅度结果变为0.513 - 实际上更接近1V峰值信号的预期值 - 但是fft噪声地板也更高。这是代码:

t_sample *= 1e-9                         #t_sample is given in ns
detrended = signal.detrend(data)         #remove DC component
length = len(detrended)
NFFT = 2**int((math.ceil(math.log(length,2)))) 
fy = numpy.fft.fft(detrended, NFFT)      #normalise the real component
fy = 2.0*numpy.abs(fy)/length
fx = numpy.fft.fftfreq(NFFT, t_sample)
return fx[:NFFT/2],fy[:NFFT/2]

我假设numpy.fft根据数据结构使用不同的算法,但为什么结果会有这么大的差异?

0 个答案:

没有答案