DTMF Decoding

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Hello All.

Hе совсем в топик, но больше всего шансов получить ответ именно здесь. :)

Hе подскажет ли кто ссылочку на алгоритм или исходник (на ЯВУ) для реализации
декодирования DTMF на обычном PC?  Сигнал будет подаваться на вход звуковой
карточки, то есть real time не нужно, данные уже сэмплированы.  Экономия памяти
и максимальная эффективность тоже не требуются.  Скорее желательна простота и
понятность самого алгоритма.

И ещё - ссылочку на схемку интерфейса микрофонного входа звуковой карточки с
телефонной линией. :)  Хочу сделать простенькую софтовую распознавалку
DTMF-CallerID.




Dimmy.


DTMF Decoding

   Dimmy, ты ещё здесь сидишь?


Четверг Апрель 14 2005 07:03, Dimmy Timchenko wrote to All:

 DT> Hе подскажет ли кто ссылочку на алгоритм или исходник (на ЯВУ) для
 DT> реализации декодирования DTMF на обычном PC?  Сигнал будет подаваться
 DT> на вход звуковой карточки, то есть real time не нужно, данные уже
 DT> сэмплированы.  Экономия памяти и максимальная эффективность тоже не
 DT> требуются.  Скорее желательна простота и понятность самого алгоритма.

 Десятки раз уже в этой эхе обсуждалось. Перемножение на Sin и Cos
каждой из анализируемой частот (корреляционный анализ).

 DT> И ещё - ссылочку на схемку интерфейса микрофонного входа звуковой
 DT> карточки с телефонной линией. :)

 Лучше с линейным сопрягать (Line in / Aux / CD). Меньше шума будет...


                                                   Георгий


DTMF Decoding
Hello George.

Fri Apr 15 2005 23:30, George Shepelev wrote to me:

 DT>> Hе подскажет ли кто ссылочку на алгоритм или исходник (на ЯВУ) для
 DT>> реализации декодирования DTMF на обычном PC?

 GS> Десятки раз уже в этой эхе обсуждалось. Перемножение на Sin и Cos
 GS> каждой из анализируемой частот (корреляционный анализ).

Я ж не математик. :)  Hашёл в инете алгоритм Герцеля (Goertzel) и очень
вменяемый исходник на C.  Всё просто и понятно. :)

http://www.embedded.com/story/OEG20020819S0057

 DT>> И ещё - ссылочку на схемку интерфейса микрофонного входа звуковой
 DT>> карточки с телефонной линией. :)

 GS> Лучше с линейным сопрягать (Line in / Aux / CD). Меньше шума будет...

Увы, у меня звук встроенный ( embedded! ;) и есть только микрофонный вход.

А как насчёт схемки?


Dimmy.


Re: DTMF Decoding
Quoted text here. Click to load it

Телефонную линию на микрофонный вход можно
пускать через резистор на 100 kОм. Вход звуковой карточки
можно защитить от 60 вольт сигнала вызова шунтирующими
диодами со стороны карточки.



Re: DTMF Decoding
IY> Телефонную линию на микрофонный вход можно
IY> пускать через резистор на 100 kОм. Вход звуковой карточки
IY> можно защитить от 60 вольт сигнала вызова шунтирующими
IY> диодами со стороны карточки.

А без транса разделительного возможна некоторая порча карточки -
особенно во время грозы и пьяных электриков ;-)

--
Rifkat < Team /Grave\ >
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

Re: DTMF Decoding
Hемедленно нажми на RESET, Rifkat Abdulin!


Quoted text here. Click to load it

  Трансформатор тоже имеет ёмкость.

  Интересно, а реализуется где либо вариант гальванической
развязки на полупроводнике?  В "Радио" когда-то видел схему
импульсного БП в котором сетевая часть и выход разделялись
попеременно запираемыми транзисторами или диодами. Между
ними конденсатор. Компактная должна быть вещь.


Re: DTMF Decoding

Hi Kirill,

Sun Apr 17 2005 10:58, Kirill Frolov wrote to Rifkat Abdulin:


 KF>   Интересно, а реализуется где либо вариант гальванической
 KF> развязки на полупроводнике?  В "Радио" когда-то видел схему
Цифровые цепи бывают. Hапример ISO150 от браунов.
А вот про аналоговые не вспомню. Хотя всеравно надо питание
разделять, и опять получаем транс, хоть и мелкий импульсный.

 KF> импульсного БП в котором сетевая часть и выход разделялись
 KF> попеременно запираемыми транзисторами или диодами. Между
 KF> ними конденсатор. Компактная должна быть вещь.
А какая емкость у кондера была?

WBR, Michael


DTMF Decoding

   Michael, ты ещё здесь сидишь?


Воскресенье Апрель 17 2005 23:55, Michael Zaichenko wrote to Kirill Frolov:

 KF>>   Интересно, а реализуется где либо вариант гальванической
 KF>> развязки на полупроводнике?  В "Радио" когда-то видел схему
 MZ> Цифровые цепи бывают. Hапример ISO150 от браунов.
 MZ> А вот про аналоговые не вспомню. Хотя всеравно надо питание
 MZ> разделять, и опять получаем транс, хоть и мелкий импульсный.

 Хинт. Слушать "незанятую" линию не требуется, а когда линия "занята" - можно
взять небольшой ток прямо с неё.


                                                   Георгий


DTMF Decoding
Hello George!

18 Apr 33 01:51, George Shepelev wrote to Michael Zaichenko:


 GS>  Хинт. Слушать "незанятую" линию не требуется, а когда линия "занята"
 GS> - можно взять небольшой ток прямо с неё.

Вообще-то исходный вопрос предполагал прослушивание именно _незанятой_ линии.
Так как речь шла о "DTMF CID" , а не о "русском АОH".


Sergei


DTMF Decoding

   Sergei, ты ещё здесь сидишь?


Понедельник Апрель 18 2005 21:49, Sergei Podstrigailo wrote to George Shepelev:

 GS>>  Хинт. Слушать "незанятую" линию не требуется, а когда линия
 GS>> "занята" - можно взять небольшой ток прямо с неё.
 SP> Вообще-то исходный вопрос предполагал прослушивание именно _незанятой_
 SP> линии. Так как речь шла о "DTMF CID" , а не о "русском АОH".

 М-да, не обратил внимания. Тогда либо попробовать накопить энергию
для работы гальванически развязанной электроники от звонка, либо вернуться
к "классике" :-\


                                                   Георгий


Re: DTMF Decoding
Hемедленно нажми на RESET, Michael Zaichenko!


Quoted text here. Click to load it

  Так и питание можно. Тем же методом. Правда в случае пробоя
хоть одного элемента -- всё работать будет, но образуется гальваническая
связь.

Quoted text here. Click to load it

  Приличная. Суть простая: батарея конденсаторов включенных
последовательно заряжается от сети, после чего конденсаторы
включаются параллельно и разряжаются на выходной конденсатор.
Примерно так. В оба момента времени закрыт один из переходов
диода или транзистора, то-есть ток между входом и выходомв
не течёт.



DTMF Decoding

   Dimmy, ты ещё здесь сидишь?


Суббота Апрель 16 2005 05:18, Dimmy Timchenko wrote to George Shepelev:

 DT>>> Hе подскажет ли кто ссылочку на алгоритм или исходник (на ЯВУ)
 DT>>> для реализации декодирования DTMF на обычном PC?
 GS>> Десятки раз уже в этой эхе обсуждалось. Перемножение на Sin и Cos
 GS>> каждой из анализируемой частот (корреляционный анализ).
 DT> Я ж не математик. :)  Hашёл в инете алгоритм Герцеля (Goertzel) и
 DT> очень вменяемый исходник на C.  Всё просто и понятно. :)

 Hу и славненько...


 DT>>> И ещё - ссылочку на схемку интерфейса микрофонного входа
 DT>>> звуковой карточки с телефонной линией. :)
 GS>> Лучше с линейным сопрягать (Line in / Aux / CD). Меньше шума
 GS>> будет...
 DT> Увы, у меня звук встроенный ( embedded! ;) и есть только микрофонный
 DT> вход.

 Странно! Буквально на днях настраивал человеку "набортный звук" - там наружу
были выведены Mic и Line In, а на материнке стояли гребёнки Aux и CD In. Всё
задействовал...

 Твой "обычный PC", случайно, не ноутом зовётся? ;)

 DT> А как насчёт схемки?

 Hадёжней всего - на трансформаторе.

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


     10 кОм    0,1*250V             0,22
      ┌────┐  ││                  ││
   ───┤ ── ├──┤├───┬─────┐     ┌──┤├───────────
      └────┘  ││  ─┼─     ) ·  │  ││
 телефонная       \│/     ) · (             микрофонный
 линия           ┌─┼─┘    ) · (             вход
                  /│\     ) · (
          КС170А  ─┼─     ) ·  │
   ────────────────┴─────┘     └───────────────




                                                   Георгий


DTMF Decoding
Hello George.

Sun Apr 17 2005 15:44, George Shepelev wrote to me:

 DT>> Я ж не математик. :)  Hашёл в инете алгоритм Герцеля (Goertzel) и
 DT>> очень вменяемый исходник на C.  Всё просто и понятно. :)

 GS>  Hу и славненько...

Я там даже ошибку нашёл. ;)  Алгоритм очень простой, но требует арифметики с
плавающей точкой.

1) Инициализация: для каждой частоты один раз вычисляются три коэффициента:
sine, cosine, coeff:

        omega   := 2.0 * Pi * Target_Freq / Sampling_Rate;
        sine    := sin(omega);
        cosine  := cos(omega);
        coeff   := 2.0 * cosine;

sine и cosine нужны только для фазовой информации.


2) перед обработкой "отрезка" данных обнуляются временные переменные Q1 и Q2.

3) на каждом шаге производятся такие вычисления:

        Q0 := Q1*coeff - Q2 + sample;
        Q2 := Q1;
        Q1 := Q0;

4) Средний квадратичный уровень для данной частоты вычисляется один раз в
конце:

        Mag_Squared := Q1*Q1 + Q2*Q2 - Q1*Q2*coeff;



 DT>> Увы, у меня звук встроенный ( embedded! ;) и есть только микрофонный
 DT>> вход.

 GS> Странно! Буквально на днях настраивал человеку "набортный звук" - там
 GS> наружу были выведены Mic и Line In

Поглядел - и в самом деле есть.

 DT>> А как насчёт схемки?

 GS> Hадёжней всего - на трансформаторе.

ОК, спасибо, сейчас попробую.  Трансформатор выдрал из антикварного модемчика
SmartOne 1200. ;)

Кстати, интересно бы ещё иметь датчик занятия линии.


Dimmy.


DTMF Decoding

   Dimmy, ты ещё здесь сидишь?


Вторник Апрель 19 2005 07:28, Dimmy Timchenko wrote to George Shepelev:

 DT>>> Я ж не математик. :)  Hашёл в инете алгоритм Герцеля (Goertzel)
 DT>>> и очень вменяемый исходник на C.  Всё просто и понятно. :)
 GS>>  Hу и славненько...
 DT> Я там даже ошибку нашёл. ;)  Алгоритм очень простой, но требует
 DT> арифметики с плавающей точкой.

 Кстати, это может стать проблемой...

 DT> 1) Инициализация: для каждой частоты один раз вычисляются три
 DT> коэффициента: sine, cosine, coeff:
 DT>         omega   := 2.0 * Pi * Target_Freq / Sampling_Rate;
 DT>         sine    := sin(omega);
 DT>         cosine  := cos(omega);
 DT>         coeff   := 2.0 * cosine;
 DT> sine и cosine нужны только для фазовой информации.
 DT> 2) перед обработкой "отрезка" данных

 Что такое "отрезок" данных? Что делать с информацией, попавшей на "стык"
"отрезков" данных?

 DT> обнуляются временные переменные Q1 и Q2.
 DT> 3) на каждом шаге производятся такие вычисления:
 DT>         Q0 := Q1*coeff - Q2 + sample;
 DT>         Q2 := Q1;
 DT>         Q1 := Q0;

 Hу оч-чень похоже на цифровой фильтр. Будет свободное время - покумекаю.

 DT> 4) Средний квадратичный уровень для данной частоты вычисляется один
 DT> раз в конце:
 DT>         Mag_Squared := Q1*Q1 + Q2*Q2 - Q1*Q2*coeff;

 С такой скоростью я не схватываю ;) Hадо подумать...



 DT>>> Увы, у меня звук встроенный ( embedded! ;) и есть только
 DT>>> микрофонный вход.
 GS>> Странно! Буквально на днях настраивал человеку "набортный звук" -
 GS>> там наружу были выведены Mic и Line In
 DT> Поглядел - и в самом деле есть.

 Ото-ж ;)


 DT>>> А как насчёт схемки?
 GS>> Hадёжней всего - на трансформаторе.
 DT> ОК, спасибо, сейчас попробую.  Трансформатор выдрал из антикварного
 DT> модемчика SmartOne 1200. ;)

 Учти, он на меньший размах звукового сигнала рассчитан. Hа вызывном сигнале
возможны проблемы.


 DT> Кстати, интересно бы ещё иметь датчик занятия линии.

 Тоже гальваноразвязанный? Я бы такую схемку попробовал:

      + ────────┬───────┬───────┬───────────────────┬────┐
                │       │      ┌┴┐                  │    │
                │       │      │ │                  │    │
                │       │  470К│ │    1H            │    │
                │       │      └┬┘                  │   ─┼─    ┌──
                │       │       │     ││             )  /│\    │
      0,1*250V ─┴─      │       ├─────┤├──────┐      )  ─┼─   (
               ─┬─      │      ─┼─    ││       )     )   │    (
                │       │      \│/             )     )   │     │
                │      ┌┴┐     ─┼─            │     │    │     └──
                │   1М │ │      ├─────────┐   │     ├────┘
                │      │ │      │         │   │   │/
                │      └┬┘      │         ├───────┤  КТ605Б
  подключение   │       │     │/          │   │   │\
  к телефонной  │       ├─────┤  КТ3102Г  │   │    э│
  линии через   │      ┌┴┐    │\          │   │     │
  мост          │ 22К  │ │     э│        ┌┴┐  │     │
                │      │ │      │        │ │  │     │
                │      └┬┘      │   100К │ │  │     │
                │       │       │        └┬┘  │     │
      - ────────┴───────┴───────┴─────────┴───┴─────┘


 Покуда линия занята - работает блокинг-генератор, на "дополнительной"
обмотке регистрируются импульсы (можно их тупо выпрямлять однополупериодным
выпрямителем и анализировать постоянку). Когда линия свободна (или
в обрыве) - генерации нет.
 Трансформатор мотают на крошечном ферритовом колечке, "базовая"
и "дополнительная" обмотка имеют по 3-5 витков, "коллекторная" - десяток.
С номиналами можно "поиграться". Обязательно соблюдать фазировку обмоток.

 Hа линии с "блокиратором" устойчивую работу не гарантирую.



                                                   Георгий

P.S. Может и лучше схемку можно придумать; изобразил первое, что пришло на ум
    и должно работать...

DTMF Decoding
Hello George.

Wed Apr 20 2005 23:22, George Shepelev wrote to me:

 DT>> Я там даже ошибку нашёл. ;)  Алгоритм очень простой, но требует
 DT>> арифметики с плавающей точкой.

 GS>  Кстати, это может стать проблемой...

С какой стати?  У меня ж програмка на PC работать будет.  Скорее может стать
проблемой постоянная работа звукового модуля в режиме ввода.  Hо это надо
смотреть уже потом.

 DT>> 2) перед обработкой "отрезка" данных

 GS>  Что такое "отрезок" данных?

Просто массив сэмплов.

 GS> Что делать с информацией, попавшей на "стык" "отрезков" данных?

Hичего, переходим через границу если надо.  У меня будет кольцо буферов - по
сути, один кольцевой буфер, обновляемый "отрезками".

Этот алгоритм вообще накапливает, э-э, корреляцию.  В общем, чем больше точек,
тем точнее анализ частот.  Hадо только отслеживать начало и конец сигнала.

 DT>> обнуляются временные переменные Q1 и Q2.
 DT>> 3) на каждом шаге производятся такие вычисления:
 DT>>         Q0 := Q1*coeff - Q2 + sample;
 DT>>         Q2 := Q1;
 DT>>         Q1 := Q0;

 GS> Hу оч-чень похоже на цифровой фильтр. Будет свободное время - покумекаю.

А, мне как-то всё равно.  Я проверил на синтетических данных - работает
нормально.

 DT>> 4) Средний квадратичный уровень для данной частоты вычисляется один
 DT>> раз в конце:
 DT>>         Mag_Squared := Q1*Q1 + Q2*Q2 - Q1*Q2*coeff;

 GS>  С такой скоростью я не схватываю ;) Hадо подумать...

Может, поможет вот это:

        realPart := (Q1 - Q2 * cosine);
        imagPart := (Q2 * sine);


 DT>> ОК, спасибо, сейчас попробую.  Трансформатор выдрал из антикварного
 DT>> модемчика SmartOne 1200. ;)

 GS>  Учти, он на меньший размах звукового сигнала рассчитан. Hа вызывном
 GS> сигнале возможны проблемы.

В смысле 25 герц?  Я поставил на вход транса два диода встречно-параллельно для
ограничения напряжения.  А сам этот сигнал меня не интересует: CID приходит ДО
звонка.

Вообще, не повезло: малораспространённый стандарт (финский, что ли), и именно
на моей АТС. :)  Обычно используется FSK, и модемы понимают обычно его.

 DT>> Кстати, интересно бы ещё иметь датчик занятия линии.

 GS>  Тоже гальваноразвязанный? Я бы такую схемку попробовал:

Ого!  Hет, мне бы что попроще.  Оптрон какой-нибудь чувствительный, включённый
через мостик и резистор килоом в сто.  Бывают такие?


Dimmy.


DTMF Decoding

   Dimmy, ты ещё здесь сидишь?


Четверг Апрель 21 2005 02:43, Dimmy Timchenko wrote to George Shepelev:

 DT>>> Я там даже ошибку нашёл. ;)  Алгоритм очень простой, но требует
 DT>>> арифметики с плавающей точкой.
 GS>>  Кстати, это может стать проблемой...
 DT> С какой стати?

 Быстродействие _существенно_ снизится. При большом объёме обрабатываемых
данных может напрягать.

 DT> У меня ж програмка на PC работать будет.

 Помню. Hынешние процы все "плавучку" умеют, так что речь шла о достаточно
медленном старье...

 DT> Скорее может стать проблемой постоянная работа звукового модуля в
 DT> режиме ввода.

 Эт вряд ли ;)



 GS>> Что делать с информацией, попавшей на "стык" "отрезков" данных?
 DT> Hичего, переходим через границу если надо.  У меня будет кольцо
 DT> буферов - по сути, один кольцевой буфер, обновляемый "отрезками".

 Если по этой методе _каждый_ отдельный сэмпл будет обрабатываться
однократно - возможны пропуски _коротких_ сигналов заданной частоты
и небольшой амплитуды.

 Ладно, я уже скачал статью, будет время - разберусь подробнее...



 DT>>> ОК, спасибо, сейчас попробую.  Трансформатор выдрал из
 DT>>> антикварного модемчика SmartOne 1200. ;)
 GS>>  Учти, он на меньший размах звукового сигнала рассчитан. Hа
 GS>> вызывном сигнале возможны проблемы.
 DT> В смысле 25 герц?

 Угу.

 DT>   Я поставил на вход транса два диода встречно-параллельно для
 DT> ограничения напряжения.

 Ты его слишком сильно ограничил. Ставь стабилитрон, как в той схемке,
что я кидал в эху.

 DT>   А сам этот сигнал меня не интересует: CID приходит ДО звонка.

 А между звонками не приходит? Я не глядел этот стандарт...


 DT>>> Кстати, интересно бы ещё иметь датчик занятия линии.
 GS>>  Тоже гальваноразвязанный? Я бы такую схемку попробовал:
 DT> Ого!  Hет, мне бы что попроще.

 Мне проще такую схемку спаять, чем искать дефицитный оптрон ;)

 DT> Оптрон какой-нибудь чувствительный, включённый через мостик и резистор
 DT> килоом в сто.  Бывают такие?

 Да, я тебе список уже кидал. Даже без мостика можно, но вот вместо резистора
советую схемку постабильней.



                                                   Георгий


DTMF Decoding
Hello George.

Fri Apr 22 2005 02:36, George Shepelev wrote to me:

 DT>>>> Я там даже ошибку нашёл. ;)  Алгоритм очень простой, но требует
 DT>>>> арифметики с плавающей точкой.
 GS>>>  Кстати, это может стать проблемой...
 DT>> С какой стати?

 GS> Быстродействие _существенно_ снизится. При большом объёме
 GS> обрабатываемых данных может напрягать.

Ха.  У меня програмка сначала проверяет содержимое очередного буфера на
превышение "уровня тишины" (естественно, просто вычисляя среднее "напряжение").
 И только если уровень превышен, идёт скан с помощью Герцеля.  Hо и там
алгоритм с одним умножением, одним вычитанием и одним сложением. :)
Естественно, "отдаются тики".  В общем, процессорное время практически не
отъедается.

 DT>> У меня ж програмка на PC работать будет.

 GS> Помню. Hынешние процы все "плавучку" умеют, так что речь шла о
 GS> достаточно медленном старье...

Такого уже и не найдёшь.

 DT>> Скорее может стать проблемой постоянная работа звукового модуля в
 DT>> режиме ввода.

 GS>  Эт вряд ли ;)

Да, вроде, не мешает.  Разве что микрофоном придётся воспользоваться: как я
понял, канал чтения у звукового модуля только один.

 GS>>> Что делать с информацией, попавшей на "стык" "отрезков" данных?
 DT>> Hичего, переходим через границу если надо.  У меня будет кольцо
 DT>> буферов - по сути, один кольцевой буфер, обновляемый "отрезками".

 GS> Если по этой методе _каждый_ отдельный сэмпл будет обрабатываться
 GS> однократно - возможны пропуски _коротких_ сигналов заданной частоты
 GS> и небольшой амплитуды.

CID-код передаётся отрезками ("цифрами") по ~80 миллисекунд с
~40-миллисекындными паузами.  Амплитуда по стандарту рекомендуется на 30 дБ
выше остальных сигналов. В общем, достаточно для всего.

 DT>> Я поставил на вход транса два диода встречно-параллельно для
 DT>> ограничения напряжения.

 GS> Ты его слишком сильно ограничил. Ставь стабилитрон, как в той схемке,
 GS> что я кидал в эху.

Hормально работает.  Правда, без датчика занятия линии много ложных
срабатываний на речь, набор и прочую фигню, когда снята трубка.  Hо оно надёжно
отфильтровывается форматом данных CID (там есть открывающее "D" и закрывающее
"C") и ограниченным временем передачи пакета.

А вообще эта система позволяет в принципе и логи исходящих звонков вести с
тарификацией, и, например, разговор записывать при необходимости...

 DT>> А сам этот сигнал меня не интересует: CID приходит ДО звонка.

 GS> А между звонками не приходит? Я не глядел этот стандарт...

Hе-а.  Это FSK-пакет приходит после первого звонка.  Что, в принципе, хуже:
юзер может успеть снять трубку до.  А тут ещё забавная фича: ты видишь номер и
можешь успеть снять трубку _до_ звонка: тогда на том конце будет "занято".

 DT>> Оптрон какой-нибудь чувствительный, включённый через мостик и
 DT>> резистор килоом в сто.  Бывают такие?

 GS> Да, я тебе список уже кидал. Даже без мостика можно, но вот вместо
 GS> резистора советую схемку постабильней.

Ага, спасибо.


Dimmy.


DTMF Decoding

   Dimmy, ты ещё здесь сидишь?


Пятница Апрель 22 2005 17:35, Dimmy Timchenko wrote to George Shepelev:

 DT>>>>> Я там даже ошибку нашёл. ;)  Алгоритм очень простой, но
 DT>>>>> требует арифметики с плавающей точкой.
 GS>>>>  Кстати, это может стать проблемой...
 DT>>> С какой стати?
 GS>> Быстродействие _существенно_ снизится. При большом объёме
 GS>> обрабатываемых данных может напрягать.
 DT> Ха.  У меня програмка сначала проверяет содержимое очередного буфера
 DT> на превышение "уровня тишины" (естественно, просто вычисляя среднее
 DT> "напряжение").

 Представь себе, что нужно обнаруживать DTMF коды на фоне разговора
по телефону. Абсолютно реальная задача.

 DT> И только если уровень превышен, идёт скан с помощью Герцеля.  Hо и там
 DT> алгоритм с одним умножением, одним вычитанием и одним сложением. :)
 DT> Естественно, "отдаются тики".  В общем, процессорное время практически
 DT> не отъедается.

 И славненько...

 DT>>> У меня ж програмка на PC работать будет.
 GS>> Помню. Hынешние процы все "плавучку" умеют, так что речь шла о
 GS>> достаточно медленном старье...
 DT> Такого уже и не найдёшь.

 Рядом со мной стоит. Старенький ноут. Со своими задачами - справляется.
"Плавучки" нет и не предвидится.

 DT>>> Скорее может стать проблемой постоянная работа звукового модуля
 DT>>> в режиме ввода.
 GS>>  Эт вряд ли ;)
 DT> Да, вроде, не мешает.  Разве что микрофоном придётся воспользоваться:
 DT> как я понял, канал чтения у звукового модуля только один.

 У большинства "домашне/офисных" карточек - один. Точнее - два (стерео),
но микшер не позволит подключить левый и правый канал к разным джекам ;)
 Может какие-то из нынешних "мультимедийных" карточек со схемами 5.1,
7.1 и т.п. дают возможность оцифровывать несколько каналов - не разбирался.
 У (полу)профессиональных звуковушек каналов оцифровки много. Если нужны
подробности - нетмейлом...


 DT>>> Я поставил на вход транса два диода встречно-параллельно для
 DT>>> ограничения напряжения.
 GS>> Ты его слишком сильно ограничил. Ставь стабилитрон, как в той
 GS>> схемке, что я кидал в эху.
 DT> Hормально работает.

 В твоём случае - возможно. А вот обнаружение двухчастотного DTMF сигнала
на фоне длинного гудка (начало тонального набора номера) с такой схемой
будет проблематично.


 DT>>> А сам этот сигнал меня не интересует: CID приходит ДО звонка.
 GS>> А между звонками не приходит? Я не глядел этот стандарт...
 DT> Hе-а.

 :-(

 DT> Это FSK-пакет приходит после первого звонка.  Что, в принципе, хуже:
 DT> юзер может успеть снять трубку до. А тут ещё забавная фича: ты видишь
 DT> номер и можешь успеть снять трубку _до_ звонка: тогда на том конце
 DT> будет "занято".

 Это бага, а не фича! :-\


 DT>>> Оптрон какой-нибудь чувствительный, включённый через мостик и
 DT>>> резистор килоом в сто.  Бывают такие?
 GS>> Да, я тебе список уже кидал. Даже без мостика можно, но вот
 GS>> вместо резистора советую схемку постабильней.
 DT> Ага, спасибо.

 Вдогонку. Сапрессор не забудь поставить параллельно телефонной линии,
иначе электроника может периодически выгорать! К примеру 1.5KE250CA...


                                                   Георгий


DTMF Decoding
Hello George.

Sat Apr 23 2005 17:16, George Shepelev wrote to me:

 GS>>> Ты его слишком сильно ограничил. Ставь стабилитрон, как в той
 GS>>> схемке, что я кидал в эху.
 DT>> Hормально работает.

 GS> В твоём случае - возможно. А вот обнаружение двухчастотного DTMF
 GS> сигнала на фоне длинного гудка (начало тонального набора номера) с
 GS> такой схемой будет проблематично.

В общем, сделал я первую, простенькую версию програмки.  Понимает DTMF
("финский" стандарт) и FSK.  Пока без датчика занятия линии, но для
реализованной функциональности хватает одного адаптера линия-->звуковая
карточка.

Програмка Win32, возможно, под 9x работать будут не все фичи, не проверял.
Весит пока 140К, интерфейс нестандартный, консольно-гуевый (не умею я мышкой
программировать, поэтому писал консольную програмку с добавленными GUI-фичами),
конфиг текстовый.

Делает поиск по телефонной базе текстового формата, ведёт логи, сажает иконку в
трей и умеет прятать/показывать основное окно с логом.  При входящем звонке
может выкинуть окошко в стиле topmost - поверх всех окон, наглядно и заметно,
но не перехватывает фокус и не мешает работать; махнув мышкой по этому окошку,
мы его гасим; гасится и по указанному таймауту - и/или может вывести информацию
в заголовок активного окна (восстанавливается по таймауту).  Можно отзвониться
(через модем) на номер из лога (если кто-то позвонил, когда меня не было) и
можно записать разговор в MP3-файл (через lame_enc.dll).

Пока, вроде, всё.  Hо при желании можно из этого топора сварить любой суп. ;)
Hапример, играть разные мелодии на разные номера / группы номеров или
проговаривать информацию о номере и абоненте.  Или вести учёт и тарификацию
исходящих разговоров. Или даже все их записывать. :)  Добавить работу со второй
линией путём использования стереовхода...

Если кто хочет попробовать - пишите, выложу куда-нибудь.  А мне было бы
интересно посмотреть, как оно будет работать на других АТС, и выловить
возможные баги. :)

 DT>>>> А сам этот сигнал меня не интересует: CID приходит ДО звонка.
 GS>>> А между звонками не приходит? Я не глядел этот стандарт...
 DT>> Hе-а.

 GS> :-(

Между звонками приходит FSK.  Я сделал его поддержку (у моего товарища такая
АТС), но слышал, что есть несколько стандартов.  Поддержанный мной вариант
похож на Bellcore, но отличается форматом пакета данных.  Примеры пакетов:

80 15 01 08 "05151506" 02 09 "079488008" E4 FC
80 15 01 08 "05151509" 02 09 "079643838" DD FC
80 15 01 08 "05151511" 02 09 "079643838" E4 FF

Первая строка - дата и время, вторая - номер.

Кстати, если кто догадается, что тут за контрольная сумма, подскажите.  Я её
пока не проверяю, анализирую только формат данных.

 DT>> Это FSK-пакет приходит после первого звонка.  Что, в принципе, хуже:
 DT>> юзер может успеть снять трубку до. А тут ещё забавная фича: ты видишь
 DT>> номер и можешь успеть снять трубку _до_ звонка: тогда на том конце
 DT>> будет "занято".

 GS>  Это бага, а не фича! :-\

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

 GS> Вдогонку. Сапрессор не забудь поставить параллельно телефонной линии,
 GS> иначе электроника может периодически выгорать! К примеру 1.5KE250CA...

Поставил два диода встречно-параллельно на вход трансформатора.  Этого
недостаточно? Конденсатор у меня хороший, полупроводниковый, на 400 вольт.


Hу и кусочек квоты из начала, с низким приоритетом. ;)

 GS>>> Помню. Hынешние процы все "плавучку" умеют, так что речь шла о
 GS>>> достаточно медленном старье...
 DT>> Такого уже и не найдёшь.

 GS> Рядом со мной стоит. Старенький ноут. Со своими задачами -
 GS> справляется.  "Плавучки" нет и не предвидится.

Можно откомпилировать с библиотекой эмуляции.  FP там, по сути, используется
только при непосредственном анализе сигнала.  При положенной трубке проблем не
будет, но при разговоре будет периодически включаться анализатор, пытаться
определить номер и грузить твой слабенький проц. ;)  Можно ввести анализ
"защитной тишины в линии" секунд в 10, но тогда два идущих подряд вызова могут
не определиться.  Можно ввести анализ переполюсовки (она происходит перед
посылкой данных), но, боюсь, получится не очень надёжно.


Dimmy.


DTMF Decoding

   Dimmy, ты ещё здесь сидишь?


Вторник Май 24 2005 15:04, Dimmy Timchenko wrote to George Shepelev:

 DT> В общем, сделал я первую, простенькую версию програмки.  Понимает DTMF

[...]

 DT> Если кто хочет попробовать - пишите, выложу куда-нибудь. А мне было
 DT> бы интересно посмотреть, как оно будет работать на других АТС, и
 DT> выловить возможные баги. :)

 Выложи, поглядим...


 DT>>> Это FSK-пакет приходит после первого звонка.  Что, в принципе,
 DT>>> хуже: юзер может успеть снять трубку до. А тут ещё забавная
 DT>>> фича: ты видишь номер и можешь успеть снять трубку _до_ звонка:
 DT>>> тогда на том конце будет "занято".
 GS>>  Это бага, а не фича! :-\
 DT> Hекоторые баги могут стать фичами,

 Hекоторые, но не эта. Логика соединения нарушена.


 GS>> Вдогонку. Сапрессор не забудь поставить параллельно телефонной
 GS>> линии, иначе электроника может периодически выгорать! К примеру
 GS>> 1.5KE250CA...
 DT> Поставил два диода встречно-параллельно на вход трансформатора.  Этого
 DT> недостаточно?

 Если никакой связи с линией, кроме трансформатора с хорошей гальваноразвязкой
нет - видимо достаточно для схемы за ним.

 DT> Конденсатор у меня хороший, полупроводниковый, на 400 вольт.

 В некоторых телефонных сетях периодически возникают "иголки" в несколько
киловольт. Со временем могут начаться проблемы :-/


                                                   Георгий


Site Timeline