Я пытаюсь получить частоты из массива, сгенерированного из функции обратного вызова pyAudio ().
def callback(in_data, frame_count, time_info, flag):
audio_data = np.fromstring(in_data, dtype=np.float32)
freq_data = np.fft.fft(audio_data)
freq = np.abs(freq_data)
# Operations here
recovered_signal = np.fft.ifft(filtered_freq).astype(np.float32).tostring()
Я получаю массив длиной 2048, и я не уверен, что делать дальше. Я сузил круг операций, которые мне нужно делать, и попытался применить к нему FFT, но понял, что мне нужно распаковать данные, а документации pyAudio немного не хватает (тем более иногда даже в Интернете).
Часть моей проблемы в том, что я не понимаю, что такое in_data
. Из того, что я могу сказать из исследований, это байты, которые numpy преобразует в массив для меня. Однако чтение статьи по обработке сигналов для python создало у меня впечатление, что я должен быть в состоянии извлечь это в частоты, а затем выполнить это для базового фильтра полосы пропускания.
for f in freq:
if index > LOWCUT and index < HIGHCUT:
if f > 1:
filtered_freq.append(f)
#print(index)
else:
filtered_freq.append(0)
else:
filtered_freq.append(0)
index += 1
Я также посмотрел на np.fft.fftfreq
, но, похоже, он все еще производит массив длиной 2048 вместо массива, содержащего все частоты и их мощность.
Редактировать: Я знаю, что с двумя каналами переплетены, но моя проблема в основном не в понимании того, что представляет собой преобразованный массив по numpy и может использоваться.