Cronyx Site
About Cronyx
Products Prices Contact information Search English 
English Russian  Russian
Software Payment
What's new
F. A. Q.
Partners
Vacancies
Forum
Site map


Форум cronyx.ru

Зарегистрироваться  |  Поиск

Пояснения (+)ly  ::  2006-10-30 19:18

Двукратное копирование буферов в czaptel.c было скопировано из исходного кода одного из драйверов для digum-карточек. Разработчик, который скопировал этот код, не стал разбираться для чего это нужно.

На самом деле такое копирование (именно двукратное) нужно для сопоставления в zt_ec_chunk() принятого и переданного звука с учетом задержки данных в буферах телефонной платы (один буфер на приём и один на передачу). Если телефонная карта непосредственно подключена к месту порождения эха (hybrid-модулю), то задержка на "два буфера" помогает в точности сопоставить принятый звук с эхом от переданного ранее сигнала. В целом это позволяет использовать чуть более простые алгоритмы эхоподавления и иногда повышать качество их работы.

Если источник эха подключен не непосредственно к карте, то такая буферизация обычно не даёт результата, поскольку величина общей задержки сигнала между линейным интерфейсом карты и источником эха неизвестна. Т.е. неизвестна суммарная задержка сигнала при прохождении по пути память->адаптер->линия->телефон->линия->адаптер->память.

В случае с картами для E1 ситуация усугубляется, поскольку сигнал ещё будет идти через сеть E1, а затем через блоки коммутации АТС и ЦАП/АЦП. Поэтому для карт с E1-интерфейсами такая "буферизация через копирование", как правило, очень мало что даёт.

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

При использовании PCI-плат производства Кроникс задержка "внутри" платы зависит от модели устройства и конфигурации (например от qlen=#). Поэтому "буферизацию" мы посчитали излишней тратой ресурсов процессора. Тоже самое (отсутствие двойного копирования) вы можете увидеть во многих других драйверах, в том числе в комплекте zaptel.

В вашем случае объяснение "улучшения" будет примерно такое:
1) Если "внешняя" задержка по E1 очень мала (непосредственно соединение с АТС) и используется простейший эхоподавитель, то двойное копирования помогает алгоритму подавления быстрее и лучше подстроить вычитающий фильтр;
2) Возможно, что улучшение обусловлено только изменением ZT_CHUNKSIZE и свойствами выбранного эхо-подавителя;

Если вы проведете небольшие испытания и на самом деле окажется, что "буферизация копированием" реально помогает, то я реализую включение/выключение "буферизации" через sconfig.

--
С уважением, / Best regards,
Леонид Юрьев / Leo Yuriev
КБ Кроникс / Cronyx Engineering

E-mail:

Пароль:
 Забыли пароль?

Тема:

Сообщение:

Copyright © 1996-2018 Cronyx
www-adm@cronyx.ru