Задача проекта
Для системы оповещения о форс-мажорных ситуациях в арендном жилье необходимо было организовать автоматическое определение типа звука и для тех звуковых событий, которые считаются недопустимыми, организовать оповещение с интеграцией в цепочку PMS и CRM систем.
Ввиду масштабности внедрения (множество контролируемых объектов), существовали жесткие ограничения на вычислительные мощности. Вторым ограничением была жесткая конфиденциальность: недопустимость хранения звукового сигнала в читаемом (прослушиваемом) формате, а также постоянной записи и анализа звука.
Реализация проекта
Базовые ограничения в виде отсутствия возможности постоянного снятия аудио-сигнала поставили вопрос определения события, по которому необходимо начинать считывание показаний с датчиков или микрофонов для того, чтобы каким-либо образом проанализировать их.
Задача не столь проста как кажется ввиду того, что субъективное восприятие любого шума весьма сильно отличается от результатов аппаратного измерения любых средних, действующих или пиковых значений (энергии, амплитуды или звукового давления). Вдобавок, измерения нелинейны ввиду логарифмической зависимости.
Методы измерения субъективного уровня громкости обобщены в рекомендациях МСЭ-R BS.1770-1 и во многом основаны на эмпирике - алгоритмы проверялись с помощью оценочных испытаний.
В отличие от задач, которые стоят перед, например, разработчиками аудиоплееров с автоматической корректировкой уровня, для наших целей достаточно приблизительного определения уровня громкости, но именно субъективной.
Самым простым способом оценки для наших целей оказалось измерение взвешенного среднеквадратичного уровня заранее подготовленного и обработанного сигнала.
Этапы его обработки описаны в стандарте BS.1770-1 и состоят из следующих шагов:
1. Ослабление на 12,04 дБ
2. 4-кратная передискретизация
3. Полочный фильтр предыскажений, нуль на 14,1 кГц, полюс на 20 кГц (факультативно)
4. Блок постоянного тока (факультативно)
5. Абсолютное значение
6. Обнаружение наивысшего значения (факультативно: включается, если включен блок
постоянного тока)
Первый вариант решения задачи был реализован аппаратно с помощью микрофона с предусилителем и двух фильтров второго порядка с регулировкой чувствительности за счет глубины обратной связи предусилителя и последующим пороговым фильтром, генерирующим логический сигнал: 1 - есть субъективно громкое событие, 0 - события нет.
В случае наличия события после этого в течение 10 секунд осуществлялся постоянный опрос датчика и накопление событий на частоте, равной четверти частоты дискретизации. Таким образом, задача сравнения шума свелась к статистической обработке полученного 10 секундного "слепка" события путем сравнения его с эталонными "слепками".
Подобный подход, с учетом допустимости достаточно грубой оценки, вполне оправдал себя, хотя и потребовал длительной отладки статистики по записанным "слепкам", но оказался слабо пригоден для решения задачи в целом. Причина этого - невозможность однозначного позиционирования датчика на разных объектах при монтаже - особенность, напрямую следующая из привязки к субъективному уровню громкости как событийному триггеру.
По этой причине задачу было решено решать программным путем, используя в качестве датчика микрофон камер видеонаблюдения. Проблема в том, что размещены они через стену относительно тех помещений, в которых необходимо проводить анализ.
Это потребовало значительно изменить алгоритм решения задачи. От оценки субъективного уровня и его статистических показателей было решено перейти к интегрированной оценке спектрального состава звукового сигнала и его сравнения с аналогичными спектральными "слепками" эталона.
Для этого было использовано октавное wavelet-преобразование исходного сигнала, а задача учета субъективного уровня громкости была вписана непосредственно в алгоритм обработки.
После разбивки исходной записи, полученной непосредственно с камеры, триггером на запись которой является алгоритм самой камеры (простой логарифмический триггер), на кадры для вейвлет-преобразования, кадры с низкой энергией отбрасываются, что решает сразу две задачи - выступает квази-аналогом фильтра постоянного тока из рекомендаций МСЭ, и гарантирует невозможность восстановления исходного сигнала по его вейвлет-преобразованию, которое с сохранением всех кадров является обратимым.
Для получения сравнимых "слепков" полученная спектрограмма значимых кадров подвергается усреднению с помощью скользящей среднеквадратичной средней, что позволяет за одно сравнение с эталоном добиться одновременно как сравнения аналога субъективного уровня ("высота" кривой), так и спектра сигнала (форма кривой).
Репозиторий тестового стенда проекта: https://github.com/Zoviet/cqt
Результат автоматизации
За счет полного отказа от аппаратной реализации и использования уже имеющихся камер с микрофонами, удалось значительно сократить стоимость проекта. Кроме того, обработку аудио-событий с камер удалось бесшовно вписать в общий процесс конвертации и обработки видео с камер без необходимости реализации отдельного API или веб-хуков для аудио-событий.