【发布时间】:2013-07-13 15:07:27
【问题描述】:
我使用泰克示波器来执行一些信号采集。我得到 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 的最佳输入以及必须如何解释 DFFT 的输出(两者都不是微不足道的)?也许你可能想在这里阅读我论文的 FFT 部分:gehrcke.de/files/stud/…(我自然也不知道问题出在哪里)
-
谢谢 Jan-Philip Gehrcke,它很有帮助(以及不错的论文主题)。我做了一些额外的模拟,并且我设法看到通过更改时间窗口在恒定数据集(10k 点)中设置的信号周期越多,我得到的频率值就越准确。
标签: python numpy scipy frequency-analysis