2013-04-30 2 views
3

Я планирую создать системное приложение centrex в android. В котором в ресивере будет установлена ​​голосовая почта. По инструкциям в голосовой почте вызывающий абонент должен нажать номер на панели набора номера, сторона получателя должна идентифицировать номер и выполнить соответствующие действия. Кто-нибудь имеет представление о том, как определить номер, нажатый вызывающим абонентом на стороне приемника ?, Какова его технология ?, Возможно ли это в android?, определяющий DTMF-сигналы в android

Любая помощь будет заметна ..

+1

Проблемой является не декодирование DTMF, а получение доступа к звуку вызова. –

+0

Восемь простых ** вырезающих ** фильтров, возможно реализованных как параллельные * FIR * могут обнаружить это; вы можете использовать другой фильтр для обнаружения широкополосного шума. Только два из восьми фильтров должны превышать порог. Существует множество литературы и типов фильтров. Например, [Bi-quad IIR] (http://en.wikipedia.org/wiki/Digital_biquad_filter), [Goertzel] (http://www.mathworks.com/products/demos/signaltlbx/dtmf/dtmfdemo.html) и т. д. –

+0

Звук вызова * может быть реализован как устройство ALSA. Обычно модули GSM имеют * цифровые речевые режимы *, где периферийные устройства SSI используются для передачи данных ИКМ. Я понятия не имею, стандартно ли это на устройствах Android. –

ответ

0

декодирование DTMF довольно прост, так как это было сделано, чтобы быть расшифрованы. Вы бы преобразовали Фурье аудиопоток, получив распределение частот. Они могут быть согласованы с четко определенными частотами DTMF. Вы можете посмотреть их в Википедии. Кстати, эта страница также ссылается на алгоритм Герцеля для декодирования DTMF.

Для идентификации отдельных импульсов вы можете либо сегментировать звуковой поток на тишине, либо просто выбирать сегменты, которые достаточно короткие, и попытаться исправить данные впоследствии. Наиболее сложной задачей здесь может быть обнаружение нескольких экземпляров одного и того же номера.

0

Есть ли у кого-нибудь представление о том, как определить номер, нажатый вызывающим абонентом на стороне приемника?

Вам нужен детектор/декодер DTMF. Это довольно хорошо изученная тема, вы можете использовать ее в Google. Несложные реализации легко выполнять (например, 8 фильтров Goertzel) и работают в большинстве случаев. Стандартные реализации качества намного сложнее, но вам это действительно не нужны.

Какая технология за этим стоит?

Многотональное обнаружение. Это интересный предмет для изучения. Даже современная передача данных, например ADSL, основывается на ней (гораздо более продвинутой, чем DTMF). Но для вашей цели должен быть простой «банк фильтров».

Возможно ли это в android?

Конечно, вам просто нужно получить ваши аудиоданные (образцы) и передать их вашему детектору. Как вы получаете свои образцы, зависит от того, как вы получаете свой голос. В Java вы, вероятно, используете API MediaRecorder и MediaRecorder.AudioSource.VOICE_CALL, чтобы определить, что вы хотите получить звук от вызова, а не от MIC (rophone).

Смежные вопросы