【发布时间】:2020-02-04 00:31:50
【问题描述】:
我正在尝试做一些音频清理,这是我在使用 python 或其他方式之前从未做过的,我想到了可以使用 FFT 来查找构成我的音频的频率并消除不构成音频的频率'属于。我在普通音频上做了,但我无法理解结果,所以我在一个简单的正弦波上试了一下。
我做到了
frequency = 1000
num_samples = 48000
# The sampling rate of the analog to digital convert
sampling_rate = 48000.0
sine_wave = [np.sin(2 * np.pi * frequency * x1 / sampling_rate) for x1 in range(num_samples)]
sine_wave = np.array(sine_wave)
然后我播放并绘制它,它看起来和听起来都像正常大小的波浪。
fig, ax = plt.subplots(figsize=(20,3))
ax.plot(sine_wave[:500])
IPython.display.Audio(data=sine_wave, rate=44100)
但是当我做 fft 并查看图表上的频率时,它没有意义
def do_fft(data_samples):
data_fft = np.fft.fft(data_samples)
freq = (np.abs(data_fft[:len(data_fft)]))
plt.subplots(figsize=(20,10))
plt.plot(freq)
print("The frequency is {} Hz".format(np.argmax(freq)))
return freq
sine_freq = do_fft(sine_wave)
sine_freq[47000]
首先,我真的不明白我的频率阵列应该是什么意思。我知道某个索引处的高数字 K 意味着 K Hz 在声音中出现了很多。这是有道理的,因为我在 1000 Hz 时得到了 23,999.99999 的值,这就是我的波频率。没有意义的是,我在 47,000 Hz 下得到了 24,000。这对我来说没有任何意义。我做错什么了吗? fft 是不是不能正常工作?
【问题讨论】:
-
我想将这个问题作为重复问题结束,但重复的问题太多了,我什至不知道该选择哪一个...请阅读these Q&As 中的一些内容以获得答案。跨度>
标签: python numpy signal-processing fft