Рассчитать доминирующую частоту звукового сигнала в списке - PullRequest
0 голосов
/ 27 марта 2020

Я записываю аудиосигнал и хотел бы получить его доминирующую частоту (это всего лишь один постоянный тон). У меня есть записанный аудиосигнал в списке, который я читаю так:

frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = np.fromstring(stream.read(CHUNK), dtype=np.int16)
frames.extend(data)

Я знаю, что уже есть несколько вопросов о том, как рассчитать частоту, но почему-то я не могу понять это правильно. Из чтения (у большинства пользователей есть массив для их звукового сигнала), я думаю, что я могу получить частоту просто на

data_fft = np.fft.fft(frames)
data_freq = np.abs(data_fft) / len(data_fft)
f = np.argmax(data_freq)

, но это дает мне примерно одну треть частоты, которую я ожидал. Тогда я нашел этот вопрос: Анализ частоты в Python Используя функцию Pitch ederwanders, я всегда получаю 1,0 как результат, что, безусловно, не является правильной частотой. (В моей версии matplotlib я не смог найти функцию find (), поэтому я надеюсь, что то, что я нашел в версиях matplotlib> = 3, не включает find () правильно.)

Я использую для записи 44100, а размер чанка 1024.

Кто-нибудь знает, что я делаю неправильно?

...