декодировать dtmf из массива байтов с помощью С#

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


person jerzzz052888    schedule 05.03.2014    source источник


Ответы (1)


Проведите частотный анализ и найдите два пика, указывающие на правильный ключ (см. Википедия для точных используемых частот; в большинстве случаев игнорируйте столбец 1633 Гц). Убедитесь, что тональные сигналы длятся не менее 100 мс, прежде чем вы их примете.

Частотный анализ см. в этом вопросе StackOverflow.

person ioctlLR    schedule 06.03.2014
comment
Я проверю ссылку, которую вы дали, спасибо. Но еще один вопрос: когда вы сказали искать два пика, указывающие на правильный ключ, вы имели в виду, например, проверить, существуют ли 697 и 1209 в массиве байтов, если я ищу DTMF 1? - person jerzzz052888; 06.03.2014
comment
Вы не сможете использовать массив байтов напрямую. Вероятно, его нужно будет преобразовать в float[]. Затем вам нужно будет рассчитать значения дБ для каждой интересующей вас частоты. Если вы используете алгоритм, связанный с другим вопросом, на который я ссылался, вам придется запускать его для каждой интересующей вас частоты и использовать его результаты, чтобы определить воспроизводимую клавишу, если таковая имеется. - person ioctlLR; 06.03.2014