Я пытаюсь написать скрипт на python, чтобы обнаружить наличие простого звукового сигнала в любом заданном входном аудиофайле. Я объясняю свое решение, и я признателен, если кто-нибудь подтвердит, что это хорошее решение. Любое другое решение, реализуемое в python, приветствуется.
Как я это делаю, я вычисляю взаимную корреляцию двух сигналов, вычисляя БПФ обоих сигналов (один инвертирован), умножая их вместе, а затем вычисляя ОБПФ результата. Затем, найдя пик результата и сравнив его с предварительно заданным порогом, можно будет определить, обнаружен ли звуковой сигнал или нет.
Это мой код:
import scipy.fftpack as fftpack
def similarity(template, test):
corr = fftpack.irfft(fftpack.rfft(test , 2 * test.size ) * \
fftpack.rfft(template[:-1] , 2 * template.size ))
return max(abs(corr))
шаблон и тест представляют собой одномерные списки данных сигнала. Второй аргумент rfft используется для заполнения нулями при вычислении БПФ. однако я не уверен, сколько нулей нужно добавить. Кроме того, должен ли я выполнять нормализацию данного сигнала перед применением БПФ? например, нормализовать его на основе пика сигнала шаблона?