Частота python fft ноты guitar note

Я пытался составить программу, чтобы определить, на какой ноте играет гитара. Когда я использую этот код с синусоидой, например 440 Гц, он работает и возвращает частоту правильно. Однако, когда я использую звук гитары, играющей одну ноту, результат оказывается далеким. Например, я играю на гитаре низкую струну ми и ожидаю 82,41, но получаю 18947,25. Я новичок в цифровой обработке сигналов, поэтому мне может не хватать чего-то фундаментального, о чем я не знаю. Любая помощь будет большим подспорьем.

Ваше здоровье!

from scipy import fftpack
from scipy.io import wavfile as scipy_wav
import numpy as np

def get_frequency(filename):
    sample_rate, data = scipy_wav.read(filename)

    fft_out = fftpack.fft(data)
    freqs = np.fft.fftfreq(len(fft_out))

    # Find the peak in the coefficients
    idx = np.argmax(np.abs(fft_out))

    freq = freqs[idx]
    freq_in_hertz = abs(freq * sample_rate)
    return freq_in_hertz

Чистая волна греха редко слышна в дикой природе, конечно, музыкальные инструменты, такие как гитара, намеренно излучают очень сложный звук, где нота, которую она играет, действительно обладает наибольшей энергией, но симметрично окружена серией гармоник и т. д ... это вызов, который вы лицо ... как и в любом аудиопроекте, это очень помогает иметь возможность визуализировать ваши звуковые кривые, в вашем случае как звуковую кривую гитары, так и синтезированную частоту, которую гитара должна воспроизводить

Scott Stensland 31.10.2018 14:35

Вы пытались изобразить сигнал и его разложение БПФ? Может быть, у вас есть резкий пик на неожиданной частоте из-за шума записи или другого артефакта? Также мне лично нравится метод welch в сигнальном модуле scipy. Применение пикового пика к этому выходу в большинстве случаев работает для меня. Попробуйте signal.welch (your_guitar_data, fs = your_sampling_rate, * optional params).

BossaNova 31.10.2018 15:02

Записи низких гитарных нот могут содержать сильные гармоники (обертоны) с сильно ослабленной (или даже отсутствующей) частотой основного тона ноты. Таким образом, не используйте голое максимальное значение fft, поскольку это часто приводит к мусору.

hotpaw2 31.10.2018 15:12

Использование записанных аудиоданных и определение проигрываемой ноты - более сложная проблема, чем вы предполагаете, и ее также спрашивают каждые несколько недель в stackoverflow. Хорошим местом для начала было бы обзор некоторых из предыдущих обсуждений.

tom10 31.10.2018 16:14

Спасибо за ответы, я не знал об отсутствующей фундаментальной проблеме. Знание того, что это проблема, дает возможность искать больше. После краткого прочтения анализ Cepstrum кажется возможным решением.

Pony1487 01.11.2018 10:10
0
5
296
0

Другие вопросы по теме