私は現在、44100HzのオーディオサンプルでPythonのNumpy fftを実行しています。これにより、0Hz〜22050Hzの動作周波数範囲が得られます(Nyquistに感謝します)。これらの時間領域の値で fft を使用すると、fft スペクトルに 128 ポイントがあり、周波数ビン サイズごとに 172Hz が得られます。
サンプルの作成方法を調整して fft カウントを 256 に増やすのではなく、周波数ビンを 86Hz に引き締めても 128 fft ポイントのみを維持したいと考えています。
私が持っている質問は、これが理論的に可能かどうかです。私の考えでは、0Hz から 11025Hz までの任意の Hz 値でのみ fft を実行することです。それ以上はとにかく気にしない。これにより、作業スペクトルが半分になり、周波数ビンが 86 Hz になり、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) ...
これを十分に明確に表現したことを願っています。説明や用語を調整する必要がある場合はお知らせください。