我目前在 44100Hz 音频样本上运行 Python 的 Numpy fft,这给了我 0Hz - 22050Hz 的工作频率范围(感谢 Nyquist)。在这些时域值上使用 fft 后,我的 fft 频谱中有 128 个点,每个频点大小为 172Hz。
我想将频率箱收紧到 86Hz,并且仍然保持在 128 fft 点,而不是通过调整我创建样本的方式将我的 fft 计数增加到 256。
我的问题是这在理论上是否可行。我的想法是仅在 0Hz 到 11025Hz 之间的任何 Hz 值上运行 fft。反正我不在乎上面的任何事情。这会将我的工作频谱减半,并将我的频率箱设置为 86Hz,同时保持我的 128 个频谱箱。也许这可以通过时域中的窗口函数来完成?
目前我用来创建样本然后转换为 fft 的代码是:
import numpy as np
sample_rate = 44100
chunk = 128
record_seconds = 2
stream = self.audio.open(format=pyaudio.paInt16, channels=1,
rate=sample_rate, input=True, frames_per_buffer=6300)
sample_list = []
for i in range(0, int(sample_rate / chunk * record_seconds)):
data = stream.read(chunk)
sample_list.append(np.fromstring(data, dtype=np.int16))
### then later ###:
for samp in sample_list:
samp_fft = np.fft.fft(samp) ...
我希望我的措辞足够清楚。如果我需要调整我的解释或术语,请告诉我。