我一直在尝试创建一个程序来确定吉他弹奏的音符。当我将此代码与正弦波(例如440hz)一起使用时,它可以工作并正确恢复频率。但是,当我给它弹吉他弹奏的音符时,结果却遥遥无期。例如,我在吉他上弹低E弦,期望82.41,但我得到18947.25。我是数字信号处理的新手,所以我可能会缺少一些我不知道的基本知识。任何帮助都是很好的帮助。
干杯!
from scipy import fftpack
from scipy.io import wavfile as scipy_wav
import numpy as np
def get_frequency(filename):
sample_rate, data = scipy_wav.read(filename)
fft_out = fftpack.fft(data)
freqs = np.fft.fftfreq(len(fft_out))
# Find the peak in the coefficients
idx = np.argmax(np.abs(fft_out))
freq = freqs[idx]
freq_in_hertz = abs(freq * sample_rate)
return freq_in_hertz