Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Эхоподавление и эхокомпенсация
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
lib
Чем отличается эхоподавление от эхокомпенсации в телефонии? Где лучше всего об этом почитать?
Спасибо.
sav6622
Цитата(lib @ Oct 3 2006, 10:23) *
Чем отличается эхоподавление от эхокомпенсации в телефонии? Где лучше всего об этом почитать?
Спасибо.


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

Где почитать, точно пока не могу сказать :-) Пощите в инете найдете кучу информации...

P.S. Но сейчас похоже эти два понятия означают одно и тоже, то бишь эхокомпенсацию.... smile.gif
Stanislav
Цитата(sav6622 @ Oct 3 2006, 15:36) *
Насколько я понимаю, эхоподавление - блокировка эха посредством эхозаградителя, то есть нелинейное усиление в тракте в зависимости от уровня сигнала, небольшие сигналы (подразумевается что это эхосигнал) подавляются. Более прогрессивное - эхокомпенсация, то бишь адаптивная подстройка фильтра для получения модели эхопути и на основе этой модели из передаваемого сигнала вычитается сигнал эха. Последний способ наиболее употребим сейчас, так как эхоподавление приводило к эффекту "потери контакта", когда вы не слышите ничего с дальней стороны.

Где почитать, точно пока не могу сказать :-) Пощите в инете найдете кучу информации...

P.S. Но сейчас похоже эти два понятия означают одно и тоже, то бишь эхокомпенсацию...
Да, по-моему, это синонимы. Устройства с усилением, управляемым сигналом, называются эхозаградителями.
lib
А где бы исходный код эхокомпенсатора посмотреть? Хорошо бы с соответствием рекомендации G.168.
sav6622
Цитата(lib @ Oct 5 2006, 21:55) *
А где бы исходный код эхокомпенсатора посмотреть? Хорошо бы с соответствием рекомендации G.168.


smile.gif Cразу вас расстрою, скорее всего не найдете... Я пытаюсь периодически в течении 3-4 лет найти, причем копаю глубоко... smile.gif

Если найдете, поделитесь пожалуйста ссылочкой cheers.gif
sav6622
Цитата(sav6622 @ Oct 5 2006, 23:32) *
Цитата(lib @ Oct 5 2006, 21:55) *

А где бы исходный код эхокомпенсатора посмотреть? Хорошо бы с соответствием рекомендации G.168.


smile.gif Cразу вас расстрою, скорее всего не найдете... Я пытаюсь периодически в течении 3-4 лет найти, причем копаю глубоко... smile.gif


Имелось ввиду что соответствующий рекомендациям g.168, просто эхокомпенсатор достаточно широко представлен.
fontp
Цитата(sav6622 @ Oct 6 2006, 12:16) *
Цитата(sav6622 @ Oct 5 2006, 23:32) *

Цитата(lib @ Oct 5 2006, 21:55) *

А где бы исходный код эхокомпенсатора посмотреть? Хорошо бы с соответствием рекомендации G.168.


smile.gif Cразу вас расстрою, скорее всего не найдете... Я пытаюсь периодически в течении 3-4 лет найти, причем копаю глубоко... smile.gif


Имелось ввиду что соответствующий рекомендациям g.168, просто эхокомпенсатор достаточно широко представлен.


G165-168 стандарты телефонии. Эхо-подавитель соответственно голосовой. Голосовой эхоподавитель, кроме линейного эхокомпенсатора, должен содержать ещё нелинейные компоненты, как-то Double-Talk_Detector и т.п. В принципе, всё это хозяйство можно найти в специальной литературе. Прибабахи необходимы, но требуют обычно настройки экспериментальной

Чтобы заполнить пробел размещаю прямо здесь свою модель эхоподавителя с которой начиналась моя разработка эхоподавителя. Модель целочисленная на С, со всеми прибабахами, настраивалась в реальном времени (понятно что быстродействие не очень и нужно переписывать на ассемблер хотя-бы внутренний цикл). Обработка блочная, программа организована правильно, вложеными циклами (а не наоборот, когда напишут сначала адаптивный фильтр, а потом подвешивают на счётчики всё остальное). Линейный адаптивный фильтр -NLMS. Можно ли сделать с него G168? Можно. Только будет неэффективно, если по максимуму. G168 - стандарт расплывчатый. Требований по испытаниям много, но они для цифровой реализации - тривиальны. А по длине задержки эхо (эффективной длине адаптивного фильтра) там нет жёстких требований. Можно делать на 30 мс. Стандарт не требует, чтобы эхоподавитель был дальний.
В стандарте сказано, что он может быть дальним (60мс), но не обязан.
Если, конечно, заказчик говорит G168, подразумевает - дальний, тогда другое дело. Северо-американские корпорации практикуют обычно в своём оборудовании внутри-континентальный вариант - миллисекунд так на 40. Называется G168 тем не менее. Если реклама ссылается на оба стандарта G165/G168, то скорее всего там 30 мс или меньше.
Для дальних эхоподавителей или очень быстродействующих средних - нужны другие алгоритмы. В основе проектирования дальних эхоподавителей лежит тот факт, что импульсная характеристика отражения от гибрида обычно очень короткая - 2-4 мс. Неизвестно только где эти отражения от разных гибридов расположены. Алгоритмы включают эвристики, а потому содержат know-how
Раньше делали прорежённые алгоритмы (искать в google sparced echo canceller), последнее время появилась мода на Лагерровские решётки (работы Ali.H.Sayed & Ricardo Merched). Ищите статьи этих авторов, а также эту книгу
A. H. Sayed, Fundamentals of Adaptive Filtering, John Wiley & Sons, NY 2003


Пароль на архив: НеДляЛиберастов
Иванычу респект smile.gif
Программа размещена "как есть" и комментариев я давать не буду.
У меня нет времени вспоминать почему и что и как
fontp
в программке всё традиционно. Единственная нестандартная фича - это то, что эхоподавитель дифференциальный. Дифферинцирование входов fir-фильтром (с последующим интегрированием iir-фильтром выходов) отбеливает речь, а значит ускоряет сходимость. Но снижает динамический диапазон. В общем, это необязательно, можно исключить
timonja
Знает ли кто-нибудь алгоритмы эхокомпенсации, требующие меньше выч. ресурсов чем NLMS при условии, что линия задержки 16 мс и больше не надо. Реализация осуществляется на TI 320c6412. Память не так критична, а вот производительности не хватает на всё что нужно
fontp
Цитата(timonja @ Feb 9 2007, 08:55) *
Знает ли кто-нибудь алгоритмы эхокомпенсации, требующие меньше выч. ресурсов чем NLMS при условии, что линия задержки 16 мс и больше не надо. Реализация осуществляется на TI 320c6412. Память не так критична, а вот производительности не хватает на всё что нужно



Блочный NLMS. Всё то же самое, но обновление коэффициентов производится с чередованием, как бы интерливингом. А именно, на данном такте обновляются только коэффициенты номер которых по модулю М равен i=0,...., М-1. М равно 8 или 16. Страдает время сходимости, а так - работает.
timonja
To fontp Видимо я не так понял... но ведь в таком случае пересчитываться будут только 1\8 либо 1\16 часть всех коэффициентов адаптивного фильтра, остальные же будут находиться в начальном(нулевом) состоянии. Где я ошибся? может быть я не правильно понимаю идеологию NLMS алгоритма? Если не трудно, поправьте.

for (k=0; k < LZ_len; k++)
W[k++] = Wr[k] -W_update_val * LZ[k];

вроде так рассчитывается классический NLMS (деление внутри W_update_val), вы предлагаете фактически:

for (k=0; k < LZ_len; k+= M)
W[k++] = Wr[k] -W_update_val * LZ[k];

где я не понял?
fontp
Цитата(timonja @ Feb 9 2007, 12:32) *
To fontp Видимо я не так понял... но ведь в таком случае пересчитываться будут только 1\8 либо 1\16 часть всех коэффициентов адаптивного фильтра, остальные же будут находиться в начальном(нулевом) состоянии. Где я ошибся? может быть я не правильно понимаю идеологию NLMS алгоритма?



Не, ну нужно двигать им фазу на каждом такте, устроив чередование

for (k=j; k < LZ_len; k+= M) {
W[k] = Wr[k] -W_update_val * LZ[k]; // c автоинкрементом или чепуха или двусмысленность
}

j = (j+1) % M

Фильтр будет адаптироваться в нужном направлении, хоть и замедленно. Вообще-то там (в Block LMS) ещё обычно и усредняют ошибку W_update_val * LZ[k] по нескольким тактам, что улучшает сходимость. Ищите Block LMS в гугле, когда-то было множество публикаций

На TI точно было в частности вот это
http://focus.ti.com/general/docs/techdocsa...actName=slau107
nsemenoff
Цитата(lib @ Oct 3 2006, 06:23) *
Чем отличается эхоподавление от эхокомпенсации в телефонии? Где лучше всего об этом почитать?
Спасибо.


Мне кажется, что обсуждение пошло не в ту сторону.
Эхоподавление - это электрическая противоместная схема, позволяющая при преобразовании двухпроводной линии в четырехпроводную отсеивать собственную передачу от приема. Схема хорошо работает только при полном согласовании с линией. Часть ближнего эхо-сигнала все равно оказывается на приеме.
Эхокомпенсация - это одна из операций ЦОС, когда во время приема тишины с дальней стороны строится цифровой КИХ-фильтр, компенсирующий ближнее эхо. Способов компенсации много, самые простые - LMS и линейное схождение. Результат легко просчитывается и моделируется в том же Матлабе. Если интересно - пишите, расскажу как smile.gif
А в упомянутой рекомендации не описывается, КАК происходит эхоподавление, там описано только ЧТО при этом нужно получить smile.gif
fontp
Вообще-то это в основном путаница в переводной терминологии.

Echocanceler - это всегда ЦОС. Он подавитель посредством компенсации.
А мостовые или оптронные схемы начального аналогового подавления эхо (на переходе от 2-проводной линии к 4-проводной) называют гибридами. Хотя когда-то, лет 50 назад, когда ещё ЦОС не было их наверно называли эхоподавителями.
Существуют ещё нелинейные схемы типа компандеров, их ещё называют эхозаградителями (упоминается в самом стандарте)
Misa
Для подавления эха использую метод Frequency-Domain Adaptive Filter. По экспериментам - сходится быстрее NLMS.
nsemenoff
Цитата(Misa @ Feb 20 2007, 14:18) *
Для подавления эха использую метод Frequency-Domain Adaptive Filter. По экспериментам - сходится быстрее NLMS.


smile.gif мы тоже его использовали, но не потому, что он сходится быстрее (скорости схождения в обеих случаях настраиваются), а потому как можно реализовать этот алгоритм с меньшими вычислительными затратами smile.gif
А с точки зрения конечной математики скорости схождения, глубины подавления и возбудимости у них абсолютно одинковые smile.gif
genadiy
Цитата(Nick Semenoff @ Feb 15 2007, 14:21) *
Мне кажется, что обсуждение пошло не в ту сторону.
Эхоподавление - это электрическая противоместная схема, позволяющая при преобразовании двухпроводной линии в четырехпроводную отсеивать собственную передачу от приема. Схема хорошо работает только при полном согласовании с линией. Часть ближнего эхо-сигнала все равно оказывается на приеме.
Эхокомпенсация - это одна из операций ЦОС, когда во время приема тишины с дальней стороны строится цифровой КИХ-фильтр, компенсирующий ближнее эхо. Способов компенсации много, самые простые - LMS и линейное схождение. Результат легко просчитывается и моделируется в том же Матлабе. Если интересно - пишите, расскажу как smile.gif
А в упомянутой рекомендации не описывается, КАК происходит эхоподавление, там описано только ЧТО при этом нужно получить smile.gif

А если нет тишины.
fontp
Цитата(genadiy @ Apr 9 2008, 12:25) *
А если нет тишины.


Обычно есть. Есть паузы. Говорят по очереди.

Теоретически адаптивные фильтры могут работать и если нет тишины. Адаптивный фильтр выделяет как коррелятор в принятом сигнале только то, что есть в передаваемом. А "double-talk" в этом смысле можно рассматривать как некоррелированый шум. Но при таком низком "отношении сигнал шум" =1 cходимость можно обеспечить только работая с очень низкими коэффициентами адаптации. А это чревато
- невозможно реализовать адаптивный алгоритм целочисленно, во всяком случае с 16-разрядной арифметикой
- будет очень большим, практически неприемлемым время сходимости

В полнодуплесных модемах адаптивные эхоподавители могут так и работать невзирая на встречный канал. А в голосовой телефонии адаптацию, как правило, ведут только в паузах обратного канала. Иначе геморой с разрядностью (1) и сходится долго (2)
genadiy
Цитата(fontp @ Apr 9 2008, 11:39) *
Обычно есть. Есть паузы. Говорят по очереди.

Теоретически адаптивные фильтры могут работать и если нет тишины. Адаптивный фильтр выделяет как коррелятор в принятом сигнале только то, что есть в передаваемом. А "double-talk" в этом смысле можно рассматривать как некоррелированый шум. Но при таком низком "отношении сигнал шум" =1 cходимость можно обеспечить только работая с очень низкими коэффициентами адаптации. А это чревато
- невозможно реализовать адаптивный алгоритм целочисленно, во всяком случае с 16-разрядной арифметикой
- будет очень большим, практически неприемлемым время сходимости

В полнодуплесных модемах адаптивные эхоподавители могут так и работать невзирая на встречный канал. А в голосовой телефонии адаптацию, как правило, ведут только в паузах обратного канала. Иначе геморой с разрядностью (1) и сходится долго (2)

Вы написали как коррелятор. А почему не именно коррелятор: принятого сигнала с сигналом, который может содержаться в результате отражения. По теории статистических решений достаточной статистикой обнаружения сигнала в сумме двух сигналов и есть коррелятор. А алгоритмом принятия решения в ту или другую сторону является сравнение с порогом значение которого находится согласно разным критериям качества(Неймана-Пирсона, и др). А характеристика такого алгоритма, здесь я с вами соглашусь зависит от отношения сигнал/шум но и пропорциональна квадратному корню из размера выборки. И существует возможность при маленьком отношении сигнал/шум удовлетворить заданную характеристику путём увеличения размера коррелированной выборки. Ну вот так по-моему.
fontp
Цитата(genadiy @ Apr 9 2008, 15:28) *
Вы написали как коррелятор. А почему не именно коррелятор: принятого сигнала с сигналом, который может содержаться в результате отражения. По теории статистических решений достаточной статистикой обнаружения сигнала в сумме двух сигналов и есть коррелятор. А алгоритмом принятия решения в ту или другую сторону является сравнение с порогом значение которого находится согласно разным критериям качества(Неймана-Пирсона, и др). А характеристика такого алгоритма, здесь я с вами соглашусь зависит от отношения сигнал/шум но и пропорциональна квадратному корню из размера выборки. И существует возможность при маленьком отношении сигнал/шум удовлетворить заданную характеристику путём увеличения размера коррелированной выборки. Ну вот так по-моему.

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

Хорошая новая книга

Ali H. Sayed, Fundamentals of Adaptive Filtering, |
| Wiley, NY, 2003.

Matlab файлы к ней
http://iracema.icsl.ucla.edu/index.php?opt...5&Itemid=75
jerkin
помогите плиз с моделированием самого простого алгоритма эхоподавления в матлабе! 05.gif
fontp
Цитата(jerkin @ May 19 2008, 02:49) *
помогите плиз с моделированием самого простого алгоритма эхоподавления в матлабе! 05.gif


Пойдёт?
http://www.mathworks.com/matlabcentral/fil...objectType=file
jerkin
спасиб большое,я конечно расчитывал что он будет в симулинке нарисован,но это тоже подойдетsmile.gif
jerkin
блин, чет не работает,мжет конечно эт я такой чайник,но она ни в какую работать не хочет 05.gif
fontp
Там и в Симулинке есть
http://www.mathworks.com/matlabcentral/fil...objectType=file

только оно такое большое что уж точно не заработает ;-)
kollibri
Ребят, помогите пожалйста. Я в матлабе полный ноль(( а мне нужно сздать модель эхокомпенсатора.
Сам эхокомпенсатор - нужно сделать с помощью s-function. честно говоря меня больше интересует что писать в самой функции.
вот математическая модель:


http://webfile.ru/5351331 - формулы к схеме
http://webfile.ru/5351332 - схема

усли нужна какая то еще информация, пишите
Genich
Цитата(Misa @ Feb 20 2007, 18:18) *
Для подавления эха использую метод Frequency-Domain Adaptive Filter. По экспериментам - сходится быстрее NLMS.

Здравствуйте. Подскажите, пожалуйста, пример реализации данного фильтра (если конкретнее, интересует адаптивный фильтр на основе ДКП).
Прочитал очень много литературы по данной теме, пытался реализовать несколько вариантов данного алгоритма, но безуспешно. Фильтр либо расходится, либо (при выборе параметра mu очень маленьким) показывает хуже результаты, чем NLMS.
В работе алгоритма имеется такая важная особенность, как нормировка на мощность каждого ДКП-отсчета при обновлении коэффициентов фильтра. Так вот, если я заменяю ее на нормировку на сумму мощностей (по аналогии с NLMS), то все прекрасно сходится, но результаты получаются аналогичными NLMS.

Порядки фильтров, которые использую: 128, 256, 512, 1024
shishka
Здравствуйте. Может кто-то подскажет методику по оценке работы системы эхокомпенсации или шумоподавления в звуковых сигналах. Хотелось бы получить ссылку на нормальный стандарт или хорошую книгу.
Спасибо.
Corner
А алгоритмы эхокомпенсации с дополнительным микрофоном это не православно?
asoharev
shishka, тема мутная очень, много кого интересует, мало кто реально что-то делает. Гуглить стоит не только по эхоподавлению, а вообще по speech enhancement
Кажется, я когда-то видел статью на эту тему в спрингеровском хендбуке (Springer Handbook of Speech Processing).
Жопыт подсказывает, что большинство компаний, занимающихся voip, тестируют исключительно субъективно (звонят, болтают, потом отчитываются о эхе, качестве и тд.)

Corner, а что ты подразумеваешь под словом "православно"?
Почти всегда второй микрофон используется только для шумоподавления (обычно для более-менее "пристойных" шумов).
Лично я пока не представляю адекватного использования информации со второго микрофона для эхоподавления. Если у тебя есть идеи или ты знаешь статью, в которой описано, можем обсудить (у меня есть некоторый опыт работы с несколькими микрофонами и с эхоподавлением).
asoharev
Цитата(shishka @ Mar 13 2014, 08:35) *
Здравствуйте. Может кто-то подскажет методику по оценке работы системы эхокомпенсации или шумоподавления в звуковых сигналах. Хотелось бы получить ссылку на нормальный стандарт или хорошую книгу.
Спасибо.


Можно еще тут подсмотреть что-нибудь http://www.itu.int/rec/T-REC-P.835-200311-I/en
Genadi Zawidowski
Цитата(fontp @ Oct 7 2006, 18:14) *
Программа размещена "как есть" и комментариев я давать не буду.
У меня нет времени вспоминать почему и что и как

Много воды утекло... Похоже, аттачмент потерялся. Не можете восстановить?
Myron
Цитата(Genadi Zawidowski @ Jun 1 2014, 12:08) *
Много воды утекло... Похоже, аттачмент потерялся. Не можете восстановить?

Вот это в наличии
Genadi Zawidowski
Цитата(Myron @ Jun 1 2014, 22:09) *
Вот это в наличии

В цитате ссылка на первое сообшение, в котором было:
Цитата
Чтобы заполнить пробел размещаю прямо здесь свою модель эхоподавителя с которой начиналась моя разработка эхоподавителя. Модель целочисленная на С, со всеми прибабахами, настраивалась в реальном времени (понятно что быстродействие не очень и нужно переписывать на ассемблер хотя-бы внутренний цикл). Обработка блочная, программа организована правильно, вложеными циклами (а не наоборот, когда напишут сначала адаптивный фильтр, а потом подвешивают на счётчики всё остальное). Линейный адаптивный фильтр -NLMS. Можно ли сделать с него G168? Можно. Только будет неэффективно, если по максимуму. G168 - стандарт расплывчатый. Требований по испытаниям много, но они для цифровой реализации - тривиальны. А по длине задержки эхо (эффективной длине адаптивного фильтра) там нет жёстких требований. Можно делать на 30 мс. Стандарт не требует, чтобы эхоподавитель был дальний
fontp
QUOTE (Genadi Zawidowski @ Jun 2 2014, 03:25) *
В цитате ссылка на первое сообшение, в котором было:


попробуйте этот, OSLEC, стандартный для LINUX
здесь вся информация и исходники
http://www.rowetel.com/blog/?page_id=454

также в SPEEX есть open-source EchoCanceller в спектральном домене
там http://www.speex.org/downloads/

мой nlms с double-talk детектором
Genadi Zawidowski
Спасибо, попробую применить. OSLEC попадался (там написано, что теперь часть ядра, кажется?).
fontp
QUOTE (Genadi Zawidowski @ Jun 13 2014, 03:55) *
Спасибо, попробую применить.


Это работающий прототип. Использует библиотеку операций ETSI элементарных операций DSP
Кодировался потом для DSP на ассемблере, в первую очередь внутренний цикл, lms
Применять модель на С не очень эффективно, но из нее можно сделать ассемблерную или даже аппаратную реализацию

Алгоритм в основном соответствовал модели Месершмита, упомянутой по ссылке
http://global-4-lvs-odra.opera-mini.net/hn...536/spra129.pdf
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.