Как сравнить аудио в Android? - PullRequest
0 голосов
/ 28 августа 2018

Я делаю приложение, в котором я записываю прямой звук с микрофона сотового телефона, я сохраняю эту запись и мне нужно сравнить ее с некоторым звуком, уже сохраненным в устройстве Аудио "шум" двигателей, идея состоит в том, что из записанной записи это указывает нам, в каком случае из сохраненных это кажется то есть у меня есть два случая: хороший двигатель и поврежденный двигатель, когда я заканчиваю запись, он должен сказать «этот звук принадлежит поврежденному двигателю»

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

сохранен тип файла .wav

1 Ответ

0 голосов
/ 28 августа 2018

Сравнение звуковых сигналов - нетривиальная задача.


Звук - это просто последовательность значений (чисел), где индекс - это просто «время», а значение - это громкость звука (амплитуда).

Если вы сравниваете аудиоданные, например, два массива (последовательности), элемент за элементом, итерируя по индексу, будет удача получить что-то разумное. Хотя вам нужно некоторое преобразование этого массива, чтобы получить агрегированную информацию об этой последовательности чисел в целом (например, спектр сигнала).

Есть некоторые математические инструменты для этой задачи, например, упомянутые вами хорошо известные Преобразование Фурье и статистический инструмент Автокорреляция (он находит "доброту" последовательности чисел) .

Метод автокорреляции может быть относительно простым - вы просто выполняете сравнение массивов данных и вычисляете автокорреляцию. Но вы будете платить за простоту в случае исходного качества (или подготовки / нормализации) сигналов - они должны иметь одинаковую длительность. Значение приведенной корреляционной функции покажет, насколько отличаются две последовательности, то есть 0 - абсолютно разные, а 1 - почти одинаковые.

Для реализации преобразования Фурье (FFT) тоже не проблема, вы можете взять хорошо описанный алгоритм и реализовать его на любом языке без использования сторонних библиотек. Это делает работу очень хорошо.

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

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

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

Бонус: книга, например

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...