Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 17 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 12.02.2004
Откуда: г. Новосибирск
Возникла следующая проблема - нужно определить, что на другом конце линии подняли трубку. Функция записи звука с линии реализована.
Кто-нить имеет соображения как это сделать?



Партнер
 

Member
Статус: Не в сети
Регистрация: 30.04.2004
Откуда: [Omsk Team]
_ManiaC_
а чем звоним, компонент,TAPI? возможно стоит посмотреть в сторону структуры PHONESTATE_ (MSDN)

_________________
forum.omskteam.ru- Все о керамограните


 

Advanced member
Статус: Не в сети
Регистрация: 10.04.2003
Откуда: Москва
_ManiaC_ писал(а):
Возникла следующая проблема - нужно определить, что на другом конце линии подняли трубку. Функция записи звука с линии реализована.
Кто-нить имеет соображения как это сделать?


Не понятно, как ты подключился - надо-бы описать. :(
Определить снятие трубки можно по:
- пропаданию тоновых посылок
- щелчок коммутации
- появление звука, не соответствующему тоновой посылке, DTMF и не кратно 50Hz. т.е. речь-детектор.
Т.о., надо писать сразу, потом начало отрезать. Делать это 'online' не рекомендую, нет фильтрации твоих ошибок определения начала речи.
Аппаратно снятие трубки можно узнать только по цифр. каналам связи типа ISDN.


 

Member
Статус: Не в сети
Регистрация: 12.02.2004
Откуда: г. Новосибирск
Dilon Звоним компонентом Async Professional 4.06
Сейчас пытаюсь сделать это с помощью ряда Фурье
Кто-нить знает как в полученом спектре узнать присутствие частоты 425Гц? Частота дискретизации 8КГц.


 

Advanced member
Статус: Не в сети
Регистрация: 10.04.2003
Откуда: Москва
_ManiaC_ писал(а):
Кто-нить знает как в полученом спектре узнать присутствие частоты 425Гц? Частота дискретизации 8КГц.


FFT долго и плохо. (про 'долго' может и не актуально)
Как-то разговаривал с ребятами, разрабатывающими АОН'ы - это их мнение.
Тут лучше подходит метод шаблонов. Если кратко, то его идея такова:
1) берется некоторый фрагмент
2) он накладывается сам на себя с некоторым сдвигом (шаг сдвига, например, 1 отсчет). В результате подсчитывается качество совпадения (я считаю качество НЕсовпадения).
3) шаг увеличивается и повторяется п2-3
В результате получается график совпадения, на котором будут провалы и горбы. Например, при наличии частоты 50Hz будет горб на 8000/50=160 отсчете.

Remark: технология универсальна и подходит как для определения несущей, так и отлавливания ритма 'занято'.

Идея понятна? (примерно так работет АОН, а качество его отлавливания busy ты знаешь :) )


 

Member
Статус: Не в сети
Регистрация: 12.02.2004
Откуда: г. Новосибирск
serj_ Спасибо, обязательно попробую!


 

serj_
FFT "долго и плохо"?! Долго - это Вы загнули, "плохо" - тоже. Во всяком случае, считать автокорреляционную функцию фрагмента (если я не ошибаюсь с терминологией) дольше и результат спорный.
Лучше для проверки наличия сигнала на заданной частоте просто посчитать две свертки - с sin(425x) и cos(425x) (коэффициенты sin и cos, естественно, вычисляются исходя из частоты дискретизации сигнала) по фрагменту с длиной, кратной соотв. периоду, и вычислить корень из суммы квадратов посчитанных величин :). Намного быстрее и точнее :).


 

Member
Статус: Не в сети
Регистрация: 30.04.2004
Откуда: [Omsk Team]
можно использовать отлаженную и вылизанную со всех сторон библиотеку от Интел FFT, работает быстро...

_________________
forum.omskteam.ru- Все о керамограните


 

Member
Статус: Не в сети
Регистрация: 12.02.2004
Откуда: г. Новосибирск
0serg Поподробнее пожалуйста :)

Добавлено спустя 27 минут, 12 секунд:
Dilon Дак за нее денег просят....


 

Advanced member
Статус: Не в сети
Регистрация: 10.04.2003
Откуда: Москва
0serg писал(а):
Лучше для проверки наличия сигнала на заданной частоте просто посчитать две свертки - с sin(425x) и cos(425x)..... Намного быстрее и точнее :).


Теоретик вы наш! .... :) (надеюсь не обидел?)
Я разрабатываю телефонные станции больше 10 лет и с качеством советских АТС 'немножко' знаком. И не теоретически.
FFT применять нельзя (точнее можно, но это уже получится не FFT).

И малюсенький вопрос 'на засыпку' - какой диапозон частот тона и стабильность этой частоты тона? :D


 

_ManiaC_
Свертка применительно к данному случаю - это когда по массивам a_i и b_j одинаковой длины считается сумма sum i=1 to n { a_i * b_i } (это для пр-ва l^2_0, есть еще свертка в функциональном пр-ве L^2 - там берется интеграл по всему пространству от произведения ф-й. Упоминаю потому как НА САМОМ ДЕЛЕ свертку надо бы считать именно в L^2, но раз уж мы работаем с дискретизированным сигналом, то делать нечего - остается довольствоваться некоторым хорошим приближением). Математики, конечно, вкладывают в понятие свертки несколько другой смысл :), но почему-то название прижилось. Попробуем разобраться, как всё вообще работает, что такое преобразование Фурье и почему вообще нужно считать эту самую свертку с sin и cos, а затем вычислять модуль получившегося вектора.

Итак, у нас есть некоторая исходная функция f(x) - входной сигнал, ограниченный по времени: x лежит в отрезке [0, N], N - целое. Не вдаваясь сильно в подробности, эта функция лежит в пространстве L^2_0(R) и её (возведенную в квадрат) можно интегрировать по любому замкнутому в R множеству. Это самое пространство L^2_0(R) - "хорошее" - с ним очень удобно работать, оно обладает кучей полезных свойств, из которых для нас интересно два: во-первых, L^2_0(R) обладает скалярным произведением (уже описанной сверткой) и в нем функции a, cos(2*pi/N * k * x), sin(2*pi/N * k * x) (первая функция - обычная константа, k - целое число) образуют ортогональный базис. Правда, в отличие от привычного нам R^3 это счетный базис в бесконечномерном пространстве, ну да не стоит над этим особенно задумываться. Ну так вот, по определению базиса, любую функцию из L^2 можно "разложить по базису" - найти такие коэффициенты a_k (k=0,1,...) и b_k (k=1,2,...), что f(x) = a_k * cos(2*pi/N *k*x) + b_k * sin(2*pi/N * k * x). Это разложение называется рядом Фурье, коэффициенты - коэффициентами Фурье, а нахождение коэффициентов по функции - дискретным преобразованием Фурье (ДПФ). Собственно "преобразование Фурье" (FT) применительно к обработке цифровых сигналов - как раз нахождение ДПФ, а быстрое ПФ (FFT) - это то же самое ПФ, просто с гораздо более быстрым алгоритмом его вычисления (классический требует n^2 операций, БПФ - nln(n)). В общем, этот ряд часто используется, обладает кучей хороших свойств, но, опять же, нам он почти не интересен. За одним исключением: пусть у нас наш сигнал
f(x) = g(x) + Asin(2 * pi * 425x + psi)
есть сумма некоторого "побочного" сигнала и собственно проверяемого сигнала с заданной частотой. Ф-я g разлагается в ряд Фурье:
f(x) = sum i=0 to n { a_i * sin(i*x) + b_i * cos(i*x) } + Asin(2 * pi * 425x + psi)
Посчитаем скалярное произведение f с sin(425 * 2 * pi * x) и с cos(...), причем выбрав отрезок времени так, чтобы сигнал с частотой 425Гц укладывался бы на нем в целое число периодов. Тогда обе ф-и -- и sin(425...) и cos(425...) попадут в число базисных, все остальные sin и cos, как уже было сказано (_ортогональный_ базис) ортогональны ("перпендикулярны") им и соответствующие скалярные произведения дадут ноль. А остальные слагаемые, как можно проверить, дадут fs = (f, sin) = Acos(psi)*C и fc = (f, cos) = Asin(psi)*C (C - это просто некоторая константа - N / 2, если уж совсем точно). Отсюда, как легко сообразить, A = sqrt(fs^2 + fc^2) / C, ну а psi при желании можно посчитать как arccos(fs / A / C). Ну а "физический смысл" A и psi объяснять не требуется: A^2 - мощность сигнала на заданной частоте, psi - фаза. Идея рассчета и смысл коэффициентов Фурье понятен?
Теперь перейдем к практике. FFT использовать почти наверняка не получится: дело в том, что он требует длину входного сигнала, равную 2^n, а нам ведь эту длину не от балды нужно брать, а строго определенную (это можно обойти с помощью нехитрых приемов, но зачем?). Но ведь нам и не нужны _все_ коэффициенты Фурье, нам нужен только один и его мы можем вычислить "в лоб".
Соответственно, вначале строятся два массива - базисные функции sin и cos. Их параметры подбираются так: при частоте дискретизации 8000Гц и проверке на сигнал 425Гц базисные ф-и считаются как f1_i = sin(2*pi*425/8000*i) = sin(0.33379 * i) и f2_i = cos(0.33379 * i). Период сигнала составляет ~18.82 отсчета, выбрав для точности, скажем, 25 периодов (1/17 секунды) получим N = 470 отсчетов (примерно). Далее считаются

fs = sum (i = 1 to N) { sin(0.33379 * i) * f(i) } и fc = sum (i = 1 to N) { cos(0.33379 * i) * f(i) }, это 2N действий.

И искомая "мощность сигнала на частоте 425 Гц" будет fs * fs + fc * fc. Очень точно и очень быстро :). Автокорреляционная функция основывается на заметно другом подходе, там всё не так замечательно в плане точности (побочные гармоники влияют), так что её используют в несколько других случаях и для несколько других (ШПС) сигналов :).

Добавлено спустя 5 минут, 24 секунды:
serj_
Не обидели :). Я ж математик с мехмата МГУ всё-таки :). А чем Вам FFT не угодила? В этом случае, безусловно, его примение не оправдано :), но в целом, в целом-то :)?
Насчет стабильности тона - вопрос очень правильный. serj_, не вдаваясь в подробности, если сигнал "плавает" по частоте - уменьшите отрезок сравнения (с 25 периодов до 10, а то и 5) - чем больше отсчетов берется, тем выше "разрешение" преобразования Фурье, тем чётче оно отделяет сигналы с близкой частотой (в данном случае - тем худшая энергетика будет у сигнала, скажем, 424 Гц).


 

Advanced member
Статус: Не в сети
Регистрация: 10.04.2003
Откуда: Москва
0serg писал(а):
425 ... 424 ...

О чем вы, господа! .... нету там этих частот даже близко.
В основной части 'современных' АТС генератор на RC сделан и п'яным ремонтником настроен.


 

Member
Статус: Не в сети
Регистрация: 12.02.2004
Откуда: г. Новосибирск
serj_ Цитата из
Руководящий документ по общегосударственной системе
автоматизированной телефонной связи (ОГСТфС)

7.5.2.4. На станциях и узлах междугородной и внутризоновоых
сетей могут включаться следующие акустические сигналы.

Зуммерные:
- ОТВЕТ АМТС в виде непрерывной передачи частоты (425 +- 25)
Гц;
- ЗАНЯТО в виде периодических посылок частоты (425 +- 25) Гц
с временными параметрами: посылка 0,3 - 0,4 с, интервал 0,3 -
0,4 с;
- КОНТРОЛЬ ПОСЫЛКИ ВЫЗОВА в виде периодической передачи
частоты (425 +- 25) Гц с параметрами: посылка 0,8 с или 1 с с
отклонением 0,1 с; пауза 3,2 или 4 с с отклонением 0,3 с;
- ОЖИДАНИЕ в виде последовательной передачи трех частот (950
+- 50) Гц, (1400 +- 50) Гц, (1800 +- 50) Гц. Длительность
передачи каждой частоты (0,33 +- 0,07) с. Длительность интервала
между ними допускается до 0,03 с. Сигнал передается в паузах
между словами межанического голоса ЖДИТЕ.
Если количество посылок трехчастотных сигналов не менее двух
между словами механического голоса, то интервал между
трехчастотными посылками должен быть (1,0 +- 0,25 с).

Межанический голос:
- НЕПРАВИЛЬНО НАБРАН НОМЕР;
- ВЫЗЫВАЙТЕ ТЕЛЕФОНИСТА (абонент имеет телефон категории без
права пользования автоматической связью; выбранное направление
исключено из автоматического использования);
- ЖДИТЕ.


 

Advanced member
Статус: Не в сети
Регистрация: 10.04.2003
Откуда: Москва
_ManiaC_ писал(а):
serj_ Цитата из
Руководящий документ по общегосударственной системе
автоматизированной телефонной связи (ОГСТфС)

И ты веришь этой сказке? :lol:
Некоторые АТС дают 1KHz с 'воем' по частоте .... бррррррррррррр ......


 

_ManiaC_
Для отлова описанной ситуации (+-25Гц) соседние "палки" основных частот должны стоять на расстоянии более 50Гц, то бишь, длина отрезка интегрирования должна быть меньше 8000/50 = 160 отсчётов... Стало быть оптимум для отлова сигнала - порядка 10-8 периодов 425-Гц сигнала при условии корректно работающего оборудования АТС :).
Хотя можно поступить еще и так: просто проверять наличие сигнала на частотах 425, 450, 400 Гц (ну и далее по списку) и выбирать из них ту, где энергетика сигнала побольше. Максимальный шаг, с которым можно расставить частоты определяется как 8000 / длина_отрезка_интегрирования.

serj_
Господи, да какие проблемы - по указанной методике проверяется наличие сигнала на какой хочешь частоте, хоть герц, хоть килогерц. При желании ее можно модифицировать и под не-синусоидальный сигнал, правда, скорость работы пострадает да и не Фурье уже будет, а как раз "шаблон", правда не в Вашем понимании этого метода. Вообще поделились бы уж опытом - на каких, интересно, частотах искать сигнал АТС и почему автокорреляционная функция лучше будет работать?

А сигнал АТС на 1КГц, боюсь, не распознает даже самый продвинутый модем в мире ;). И даже человек не с первого раза может сообразить что это такое :).


 

Advanced member
Статус: Не в сети
Регистрация: 10.04.2003
Откуда: Москва
0serg .... сложно сказать, опыт работы с 'местным' оборудованием.
Я железячник, программы пишут другие. :)


 

Member
Статус: Не в сети
Регистрация: 12.02.2004
Откуда: г. Новосибирск
Сегодня реализовал алгоритм 0serg'a сейчас тестирую пока вроде все работает.
А частота действительно плавает сейчас проверяю диапазон от 410 до 450, а если "ловить" чистые 425, то переодически она пропадает
(тестировал на сотовом) вобщем о окончательных результатах скажу завтра.

Огромное спасибо 0serg да и всем остальным тоже!


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 17 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  

Лаборатория














Новости

Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan