我目前正在为一个课程做一些频谱分析,虽然我们还没有明确地教授傅里叶变换。我在scipy和numpy中使用了各种fft算法来处理一些我知道答案应该是什么样子的数据
在这种情况下,其AM信号在8kHz载波频率和1kHz调制正弦波顶部,因此在fft上应有3个清晰的峰值
当应用scipy.fftpack.rfft
和numpy.fft.rfft
时,我分别得到以下图:
Scipy:
纽比:
虽然2个fft的形状与峰之间的正确比率大致相同,但numpy
的fft看起来更平滑,而scipy
的fft的max峰稍小,噪声也更大。
我假设这在很大程度上归因于离散傅立叶变换算法的不同应用,并且已经看过其他关于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)
目前没有回答
相关问题 更多 >
编程相关推荐