реклама на сайте
подробности

 
 
> Эхоподавление(если можно так сказать), Нужен реальный совет под реальную задачу.
sigmaN
сообщение Jul 31 2009, 22:37
Сообщение #1


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Имеем трубку(телефон), режим связи: обычный(не "громкая связь").
Микрофон и динамик имеют аккустическую связь, которую конструктивными методами устранить не удаётся никак.
Имеем эффект эха, задержка в канале большая - поэтому эхо мозговым фильтром пользователя не компенсируется и вызывает раздражение smile.gif

В девайсе использован вокодер Speex, однако стандартная реализация его echo сanceller очень громоздка и предназначена больше для организации громкой связи. Для применения этой фичи as is нет оперативки, да и оптимизировать опять много чего придётся.....в общем не вариант.


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

Как бы сделать простое "вычитание" воспроизводимого динамиком сигнала из того, что поступает в микрофон и не передавать удалённому абоненту его-же голос?


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ryhor
сообщение Aug 22 2009, 18:05
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 3-04-06
Пользователь №: 15 742



ну тогда первая строка гугла на запрос "импульсная характеристика"

http://ru.wikipedia.org/wiki/Импульсная_переходная_функция

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

да - не шумите в комнате когда будете ИХ мерять и так же уберите возможные доп акустические каналы smile.gif. Ну на стол не ложите например - т.е. должен быть реальный акустисческий канал - подумайте как у вас там звук бегает
- по воздуху
- по плате
- по корпусу
...



я немного повторюся - для акустического канала вам надо
1. найти ИХ - в частности ее длину - отсюда станет ясна длина вашего адаптивного КИХ фильтра.
2. поглядеть АЧХ - насколько оно линейное - т.е вы в него синус - а оно вам в ответ насколько не синус? но тут если уж совсем каких то косяков железячных нет - все должно быть более менее - посему это больше как упражнение на разминку.
3. читаем про LMS и NLMS адаптивные фильтры.
4. Делаем реализацию фильтра с КИХ (3-4 строчки?) и реализацию "адаптатора" этого КИХ фильтра алгоритмом NLMS - столько же строчек по существу вопроса.
5. смотрим на результат - радуемся или плачем - в зависимости от успеха
6. думаем про "детектор двойного разговора"
7. конец
... через какое то время
8. если хочется бооольшего подавления - начинаем читать про RLS алгоритмы адаптации


Никакие готовые проекты вам не помогут - точнее они не нужны ибо сил на их анализ и привязывание к вашей ситуации надо гораздо больше чем сделать самом. Т.е. или вы осознаете что вам надо или нет:
если нет - готовые решения не помогут
если да - они вам не нужны
smile.gif - вот такие пироги. По сути же вопроса (если не вдаваться в теорию по уши как говорится) - надо реализовать два алгоритма каждый из которых математически выражается одной строчкой. Один это КИХ, второй это NLMS. Но не вдаваясь в теорию "совсем ни капли"- вы не сможете их правильно применить - получается надо таки разобраться .
Можно глубоко, можно "по месту" - вот реализация КИХ с NLMS - это нормальное такое начало для получения более менее годного для практического применения результата без погреения себя в дебрях обработки сигналов.

Сообщение отредактировал ryhor - Aug 22 2009, 18:11
Go to the top of the page
 
+Quote Post
fontp
сообщение Aug 22 2009, 18:15
Сообщение #3


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



Цитата(ryhor @ Aug 22 2009, 22:05) *
ну тогда первая строка гугла на запрос "импульсная характеристика"

http://ru.wikipedia.org/wiki/Импульсная_переходная_функция

т.е. как бы импульс для импульсной характеристики вполне определенная "весч".

3. читаем про LMS и NLMS адаптивные фильтры.
4. Делаем реализацию фильтра с КИХ (3-4 строчки?) и реализацию "адаптатора" этого КИХ фильтра алгоритмом NLMS - столько же строчек по существу вопроса.
5. смотрим на результат - радуемся или плачем - в зависимости от успеха
6. думаем про "детектор двойного разговора"
7. конец
... через какое то время
8. если хочется бооольшего подавления - начинаем читать про RLS алгоритмы адаптации


Обычно в целочисленной реализации 3-4 строчки никак не получается, даже 30-40 не получится. Но к счастью, у автора темы процессор - floating-point.
NLMS можно было бы давно уже сделать в десяток строк. На floating-point процессоре, если время сходимости не напрягает - вообще может работать простейший LMS с очень низким коэффициентом адаптации, причём double-talk-detector в этом случае не нужен. ( Для 16-разрядных вычислений такое никак не пройдёт - потому не используется - у TI есть Application по поводу проблем LMS, порождённых разрядностью)
Go to the top of the page
 
+Quote Post
ryhor
сообщение Aug 22 2009, 18:29
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 3-04-06
Пользователь №: 15 742



Цитата(fontp @ Aug 22 2009, 21:15) *
Обычно в целочисленной реализации 3-4 строчки не получается, даже 30-40 не получится. Но к счастью, у автора темы процессор - floating-point.
B NLMS можно было бы давно уже сделать в десяток строк. На floating-point процессоре вообще может работать простейший LMS с очень низким коэффициентом адаптации, причём double-talk-detector в этом случае не нужен


да ладно 3-4 строчки на КИХ хватит smile.gif
ну там проверить не нули ли пришли в гости - но это лабуда

NLMS в целых числах - 5 строчек считая вместе с "for(..."
ну там да - пару строчек до и пару после

Т.е. согласен - на все про все КИХ + NLMS 30-40 строчек в самый раз.

UPD - да пересмотрел - действительно что бы быстро и точность не сильно губить в 16 битах приходится немного цикл развернуть (unroll) и пошаманить. Однако у автора плавующие звери.


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

ну и детектор двойного разговора - точнее его отсутствие - будет "разносить" фильт в случае чего на ура - ибо он (фильтер) будет пытаться подстроится под подавление звука который совсем даже не из динамика пришел.

Сообщение отредактировал ryhor - Aug 22 2009, 18:34
Go to the top of the page
 
+Quote Post
fontp
сообщение Aug 22 2009, 18:39
Сообщение #5


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



Цитата(ryhor @ Aug 22 2009, 22:29) *
да ладно 3-4 строчки на КИХ хватит smile.gif
ну там проверить не нули ли пришли в гости - но это лабуда

NLMS в целых числах - 5 строчек считая вместе с "for(..."
ну там да - пару строчек до и пару после

Т.е. согласен - на все про все КИХ + NLMS 30-40 строчек в самый раз.

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

ну и детектор двойного разговора - точнее его отсутствие - будет "разносить" фильт в случае чего на ура - ибо он (фильтер) будет пытаться подстроится под подавление звука который совсем даже не из динамика пришел.



Так КИХ не отдельно, КИХ внутри цикла LMS

Я представлял себе это так - достаточно быстрая адаптация при калибровке или вначале сеанса связи. Пока клиент снимает трубку - даблтока нет.
Можно щелкнуть дельта-функцией или даже послать случайный шум в динамик. Главное, чтобы адаптация завершилась пока клиент несёт трубку к уху. А это секунда
Потом работать с очень низким коэф. адаптации. Некорелированый с передатчиком шум и базар при слабой адаптации ничего не собьёт. Аналоговые модемы так и работают - замораживают коэффициент адаптации после стартапа до минимальных значений. Малый кооф.адаптации даёт большое время сходимости,да, но малую ошибку оценки.
Кстати это и есть самый простой способ измерения импульсного отклика - LMS c малым коэффициентом адаптации. Если оценить все проблемы синхронизации при прямом измерении. Но я не думаю, что ему нужен импульсный отклик, разве что из любопытства. Ему нужен LMS! ))
Go to the top of the page
 
+Quote Post
ryhor
сообщение Aug 22 2009, 19:52
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 3-04-06
Пользователь №: 15 742



Цитата(fontp @ Aug 22 2009, 21:39) *
Так КИХ не отдельно, КИХ внутри цикла LMS

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



Ну как любят мух отдельно от каклет - смешивать фильтр и адаптивный алгоритм - это на любителя smile.gif

Адаптация 20дБ за 1 сек - это очень и очень хорошо - это даже вроде по какому то ИТУшному стандарту, но LMS и даже NLMS ее в среднем обеспечить не могут. Обычно надо несколько секунд. Потом пулять самому шум из своего динамика это конечно тема, но часто вы видели шипяще щелкающие телефоны в природе? Обычно пока дальняя сторона наговаривает нам в динамик местный фильтр успевает настроится и обеспечить отсутсвие эха для нее. Далее - акустический эхо канал устанавливается постепенно - например после того как пару динамик-микрофон к голове приложили он может и поменяться и в дальнейшем опять может поменяться - поэтому примораживать адаптацию на совсем немного "опасно".

Про "двойной разговор"
- Почему это нет DD пока клиент снимает трубку? это типа дано? в реальности к сожалению это совсем не так.
- Любой посторонний шум (речь, звуки) попадающий в микрофон при включенном адаптаторе будут его так сказать неправильно информировать smile.gif - на что он будет хладнокровно подстраивать фильтр - в никуда. А то что коэфф адаптации маленький - это только как бы говорит что адаптатор почти выключен. Т.е. получается что "двойной разговор" "безопасен" когда нет адаптации, а если она все время нужна и достаточно активно?



Цитата
Кстати это и есть самый простой способ измерения импульсного отклика - LMS c малым коэффициентом адаптации. Если оценить все проблемы синхронизации при прямом измерении. Но я не думаю, что ему нужен импульсный отклик, разве что из любопытства. Ему нужен LMS! ))


Начнем с конца - какой длинны LMS ему таки нужен? smile.gif Хватит 32 тапа? или там все 200мс эха?
Ну и как бы ИХ меряется очень просто - посредством измерения ИХ smile.gif. Кстати не вижу какие там проблеммы с синхронизацие? пикнул и пиши звук.

а вот LMS с малым коэф. может намерять такого что никакой ИХ не снилось. Как долго давать адаптироваться? Ну в общем то в сферическом (в вакууме) случае они конечно сойдутся к одному и тому же, но все же лучше дейстовать прямыми методами, тем более что они проще и гораздо менее подвержены ошибкам.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sigmaN   Эхоподавление(если можно так сказать)   Jul 31 2009, 22:37
- - fontp   Цитата(sigmaN @ Aug 1 2009, 02:37) Имеем ...   Aug 1 2009, 07:22
|- - zltigo   Цитата(fontp @ Aug 1 2009, 10:22) Главным...   Aug 1 2009, 07:42
|- - fontp   Цитата(zltigo @ Aug 1 2009, 11:42) С како...   Aug 1 2009, 07:46
- - zltigo   Цитата(sigmaN @ Aug 1 2009, 01:37) Микроф...   Aug 1 2009, 07:57
|- - fontp   Цитата(zltigo @ Aug 1 2009, 11:57) А я пр...   Aug 1 2009, 08:05
|- - zltigo   Цитата(fontp @ Aug 1 2009, 11:05) Можно д...   Aug 1 2009, 11:41
|- - fontp   Цитата(zltigo @ Aug 1 2009, 15:34) Трубка...   Aug 1 2009, 11:41
|- - zltigo   Цитата(fontp @ Aug 1 2009, 14:41) У телеф...   Aug 1 2009, 11:57
|- - fontp   Цитата(zltigo @ Aug 1 2009, 15:57) Ну и к...   Aug 1 2009, 12:05
- - HardJoker   Цитата(sigmaN @ Aug 1 2009, 02:37) Имеем ...   Aug 1 2009, 10:46
- - sigmaN   Цитататогда "трубка" эмулирует станцию (...   Aug 1 2009, 11:06
|- - fontp   Цитата(sigmaN @ Aug 1 2009, 15:06) Как я ...   Aug 1 2009, 11:22
- - sigmaN   Хорошо. Вопрос сводится к минимуму: На каких прин...   Aug 1 2009, 12:07
|- - fontp   Цитата(sigmaN @ Aug 1 2009, 16:07) Хорошо...   Aug 1 2009, 12:08
|- - shf_05   посмотрите сюда http://focus-webapps.ti.com/genera...   Aug 29 2009, 08:45
|- - fontp   Цитата(shf_05 @ Aug 29 2009, 12:45) посмо...   Aug 29 2009, 09:40
- - sigmaN   Я в этих делах не так силён....может быть ссылку х...   Aug 1 2009, 12:15
|- - fontp   Цитата(sigmaN @ Aug 1 2009, 16:15) Я в эт...   Aug 1 2009, 12:24
- - sigmaN   Неет. Вы спрашивайте - я ж ничего не скрываю Прос...   Aug 1 2009, 12:40
|- - fontp   Цитата(sigmaN @ Aug 1 2009, 16:40) Неет. ...   Aug 1 2009, 12:53
- - sigmaN   Спасибо. Если всё так - то и правда speex допилит...   Aug 1 2009, 13:04
- - Harbour   oslec вообще-то растет из spandsp, и выковыриваетс...   Aug 2 2009, 06:03
|- - Ковылин_Константин   Цитата(Harbour @ Aug 2 2009, 13:03) oslec...   Aug 11 2009, 10:28
- - ryhor   Аффтар топика - какая платформа в виде софта? ес...   Aug 4 2009, 15:11
- - sigmaN   >- какая платформа в виде софта? если ли оболчк...   Aug 4 2009, 20:54
|- - ryhor   Цитата(sigmaN @ Aug 5 2009, 00:54) >- ...   Aug 5 2009, 13:32
- - sigmaN   >Итак у вас техас 28хх серии для всего с голосо...   Aug 5 2009, 14:09
|- - ryhor   Цитата(sigmaN @ Aug 5 2009, 18:09) Непроз...   Aug 5 2009, 14:30
|- - glock17   Цитата(ryhor @ Aug 5 2009, 23:30) ну кром...   Aug 21 2009, 08:42
|- - ryhor   Цитата(glock17 @ Aug 21 2009, 12:42) Про...   Aug 22 2009, 15:48
- - sigmaN   Спасибо, посмотрим. Щас пока жду платы, чтоб всё...   Aug 11 2009, 18:28
- - sigmaN   Итак, к делу Почитал пару-тройку статеек с сайта...   Aug 22 2009, 00:52
|- - DRUID3   Цитата(sigmaN @ Aug 22 2009, 03:52) По сн...   Aug 22 2009, 03:54
- - Harbour   только следует учесть что oslec это линейный эхода...   Aug 22 2009, 02:03
- - sigmaN   Ну как. Мы же определяем характеристики эхо канала...   Aug 22 2009, 10:14
|- - fontp   Цитата(sigmaN @ Aug 22 2009, 14:14) Это д...   Aug 22 2009, 17:32
- - sigmaN   1. Нет. Ну я хоть и чайник в этих делах, но опреде...   Aug 22 2009, 16:30
|- - fontp   Цитата(ryhor @ Aug 22 2009, 23:52) Ну как...   Aug 23 2009, 09:36
|- - ryhor   умилительно читать ваше словоблудие - нет с вам с...   Aug 23 2009, 12:55
||- - fontp   Цитата(ryhor @ Aug 23 2009, 16:55) чисто ...   Aug 23 2009, 13:28
|- - ryhor   Цитата(fontp @ Aug 23 2009, 12:36) Станда...   Aug 23 2009, 13:34
|- - fontp   Цитата(ryhor @ Aug 23 2009, 17:34) ало вн...   Aug 23 2009, 13:43
|- - ryhor   Цитата(fontp @ Aug 23 2009, 16:43) А G.16...   Aug 23 2009, 14:01
|- - fontp   Цитата(ryhor @ Aug 23 2009, 18:01) я близ...   Aug 23 2009, 14:05
- - sigmaN   Завтра, не смотря на праздник, постараюсь поработа...   Aug 23 2009, 23:03
- - sigmaN   В общем-то, по-моему всё очень неплохо складываетс...   Aug 27 2009, 00:42
- - Ковылин_Константин   На правом рисунке сколько по времени ширина выделе...   Aug 27 2009, 01:46
- - fontp   Эхо хоть и короткое, но и неслабое. ОSLEC или люба...   Aug 27 2009, 11:42
- - ryhor   Вот - половина (большая) дела сделана. Теперь вы ...   Aug 27 2009, 12:00
- - sigmaN   Ой ой ой! Нагнал я вчера по ночи Пропустил я...   Aug 27 2009, 16:52
|- - ryhor   Цитата(sigmaN @ Aug 27 2009, 20:52) Ой ой...   Aug 27 2009, 19:28
- - sigmaN   Влепил я туда OSLEC. Попариться пришлось не очень...   Aug 28 2009, 23:34
- - sigmaN   Всё кокаколой! Спасибо! Там в ослике надо ...   Aug 30 2009, 22:11
- - Harbour   ЦитатаOpen-source реализации таким образом нацелен...   Aug 31 2009, 12:30
- - sigmaN   чё-то ослик всё куда-то убегает После 5 - 7 мин...   Sep 4 2009, 01:38
- - Ковылин_Константин   5-7минут не пробовал - проверю на своём алгоритме....   Sep 4 2009, 03:05
- - sigmaN   даа-так и есть Скорее всего где-то маху дал, ко...   Sep 4 2009, 16:41


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 10:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01494 секунд с 7
ELECTRONIX ©2004-2016