Простой детектор FAS для Asterisk

от автора

FAS (False Answer Supervisor) это техника используемая различными провайдерами VoIP для увеличения длительности и соответственно стоимости звонка.

FAS бывает следующих видов:

  1. Ответ на звонок и трансляция в линию звонящего тишины или гудков

  2. Добавление тишины или записи разговора после того как тот кому звонили повесил трубку.

  3. Округление значения длинны звонка в биллинге оператора

Несмотря на то что вариант 1 является самым простым для детектирования он используется очень часто.

Детектирование гудков после ответа

Поскольку известны частоты для гудка в разных странах возможно понять что в аудио канале есть FAS по наличию следующих частот:

425Hz
440Hz — для Франции
450Hz — для Китая
480Hz — один из тонов оборудования Bell
400Hz — один из тонов используемых в UK

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

Пример dialplan для asterisk

Для записи можно использовать простой пример dialplan для Asterisk который произведет вызов через оператора связи и запишет разговор в файл для дальнейшего анализа.

[fas] exten => _XX.,1,Set(filename=${EXTEN}-${EPOCH}) exten => _XX.,n,MixMonitor(/tmp/${filename}.wav,b) exten => _XX.,n,Dial(SIP/trunk/${EXTEN})  exten => h,1,GotoIf($["${DIALSTATUS}" = "ANSWER"]?detect:exit) exten => h,n(detect),StopMixMonitor() exten => h,n,Agi(/usr/local/bin/fas-detector,${filename}) exten => h,n,Set(CDR(fas_detected)=${FAS_DETECTED}) exten => h,n(exit),NoOp 

Программа распознавания тонов

Для распознования тонов мной был написан простой детектор который проходит по файлу первые 5 секунд и смотрит в окнах размером в 500 миллисекунд есть ли там гудки. Результат детектора пишется в переменную FAS_DETECTED которая может быть использована для записи в CDR.

Исходный код расположен у меня на Github

Выводы

К сожалению данный метод детектирования не защищен от ложноположительной реакции при попадании на VoiceMail и не является решением которое можно использовать в операторской инфраструктуре.

Тем не менее он дает возможность найти вероятные проблемы и разобрать их уже в ручном режиме без необходимости проверять все звонки.

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


ссылка на оригинал статьи https://habr.com/ru/articles/726732/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *