所以,我试图弄清楚如何在实践中使用 DFT 来检测信号中的普遍频率。我一直试图围绕傅立叶变换是什么以及 DFT 算法如何工作,但显然我还有很长的路要走。我编写了一些代码来生成信号(因为目的是处理音乐,所以我生成了一个主要的 C 和弦,因此是奇怪的频率值),然后尝试回到频率数。这是我的代码
sr = 44100 # sample rate
x = np.linspace(0, 1, sr) # one second of signal
tpi = 2 * np.pi
data = np.sin(261.63 * tpi * x) + np.sin(329.63 * tpi * x) + np.sin(392.00 * tpi * x)
freqs = np.fft.fftfreq(sr)
fft = np.fft.fft(data)
idx = np.argsort(np.abs(fft))
fft = fft[idx]
freqs = freqs[idx]
print(freqs[-6:] * sr)
这给了我[-262. 262. -330. 330. -392. 392.]
不同于我编码的频率(261.63、329.63 和 392.0)。我做错了什么,我该如何解决?
森栏
繁星coding
Cats萌萌
相关分类