我使用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 /最大温度
您似乎建议最大频率是足够的(因此时间分辨率还可以),但是频率分辨率不够好:您需要同时收集更多数据.