numpy中使用FFT的频率分辨率问题

我使用Tektronix示波器执行一些信号采集.我得到10.000个测量点(很少的信号周期),并且必须对该数据集进行频率分析.我的信号是8MHz正弦波.当我使用SciPy或NumPy时,我会得到相同的结果-频率分布得太宽.两个值之间的距离为500kHz,最高频率为2.5GHz(荒谬).当我要测量8MHz左右的频率带宽时,我只能获得7.5、8.0和8.5 MHz的精确值.我试图更改由(x [1] -x [0])确定的样本间距,但没有任何改善.

def CalculateFFT(t_val,p_val):
    x = t_val #Two parameters: [x,y] values
    y = lambda x: p_val
    com_signal = y(x) # Combined signal
    FFT_val = abs(scipy.fft(com_signal))
    freq_val = scipy.fftpack.fftfreq(len(com_signal), x[1]-x[0])
    spec_val = 20*scipy.log10(FFT_val)
    return freq_val, spec_val

解决方法:

值得更深入地阅读DFFT的工作原理,但您应始终牢记以下公式.对于具有n个点和最大时间Tmax的时间序列,时间分辨率为dt = Tmax / n

DFFT将产生n个点

Fmax = 1 / dt

dF = 1 /最大温度

您似乎建议最大频率是足够的(因此时间分辨率还可以),但是频率分辨率不够好:您需要同时收集更多数据.

上一篇:为何scipy.stats.mstats.pearsonr结果与scipy.stats.pearsonr不一致?


下一篇:Numpy / Scipy稀疏与密集乘法