Я пытаюсь написать сценарий в python, чтобы обнаружить существование простого звукового сигнала тревоги в любом данном аудио входном аудио. Я объясняю свое решение, и я ценю его, если кто-нибудь может подтвердить, что это хорошее решение. Любое другое решение, реализуемое в python, оценивается.Использование взаимной корреляции для обнаружения звукового сигнала в другом сигнале
То, как я это делаю, является вычислением взаимной корреляции двух сигналов путем вычисления БПФ обоих сигналов (один обращается вспять) и умножения их вместе, а затем вычисления IFFT результата. Затем поиск пика результата и сравнение его с заранее заданным порогом определит, обнаружен ли сигнал тревоги или нет.
Это мой код:
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))
шаблон и тест являются 1-D перечни данных сигнала. Второй аргумент rfft используется для заполнения нулей для вычисления БПФ. однако, я не уверен, сколько нулей должно быть добавлено. Кроме того, следует ли нормализовать данный сигнал перед применением БПФ? например, нормализуя его на основе пика сигнала шаблона?