我目前正在为一篇课程做一些频谱分析,尽管我们还没有明确地教过傅里叶变换.我一直在玩scipy和numpy中的各种fft算法的一些数据,我知道答案应该是什么样的
在这种情况下,它的AM信号在8kHz载波频率和1kHz调制正弦波在顶部,因此在fft上应该有3个清晰的峰值
申请时scipy.fftpack.rfft,numpy.fft.rfft我分别得到以下情节:
SciPy的:
NumPy的:
虽然2个FFT的形状与峰值之间的正确比率大致相同,但是numpy一个看起来更平滑,而scipy一个具有略小的最大峰值,并且具有更多的噪声.
我假设这很大程度上取决于离散傅里叶变换算法的不同应用,并且已经看到其他文章关于如何scipy在运行时更快地实现.但是我在徘徊是什么特别导致差异,哪一个实际上更准确?
编辑:用于生成图表的代码:
data = pd.read_csv("./Waveforms/AM waveform Sine.csv", sep = ',', dtype = float)
data = data.as_matrix()
time = data[:,0]
voltage = data[:,1]/data[:,1].max() # normalise the values
#scipy plot:
plt.figure()
magnitude = scipy.fftpack.rfft(voltage)
freq = scipy.fftpack.rfftfreq(len(time),np.diff(time)[0])
plt.figure()
plt.plot(freq, np.absolute(magnitude), lw = 1)
plt.ylim(0,2500)
plt.xlim(0,15)
#numpy plot
magnitude = np.fft.rfft(voltage)
freq = np.fft.rfftfreq(len(time),np.diff(time)[0])
plt.figure()
plt.plot(freq, np.absolute(magnitude), lw = 1)
plt.ylim(0,2500)
plt.xlim(0,15)
Run Code Online (Sandbox Code Playgroud)