我正在尝试对仅包含1 kHz sin波的.wav文件进行FFT。当我绘制结果时,我希望峰值处于基波(1 kHz),但相反,我看到的峰值似乎是三次谐波(3 kHz)。我尝试了另外两个440 Hz和2 kHz的.wav文件,结果相同。我使用频率计数器来验证.wav文件是否包含我期望的频率。
为了进行比较,我使用下面的注释代码生成并绘制正确显示的sin函数。
import matplotlib.pyplot as plt
import numpy as np
import wave, struct
sound_file = wave.open('c:\downloads\SineWave_1000Hz.wav', 'r')
file_length = sound_file.getnframes()
data = sound_file.readframes(file_length)
data = struct.unpack('{n}h'.format(n=file_length), data)
data = np.array(data)
sound_file.close()
#x = np.linspace(0.0, 1, 600)
#y = np.sin(50.0 * 2.0*np.pi*x)
#yf = fft(y)
yf = fft(data)
plt.xlim(0, 4000)
plt.plot( np.abs(yf))
plt.grid()
plt.show()