因此,我正在测量来自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根据数据结构使用不同的算法,但为什么结果会有这么大的差异?