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

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

|
Имеем трубку(телефон), режим связи: обычный(не "громкая связь"). Микрофон и динамик имеют аккустическую связь, которую конструктивными методами устранить не удаётся никак. Имеем эффект эха, задержка в канале большая - поэтому эхо мозговым фильтром пользователя не компенсируется и вызывает раздражение  В девайсе использован вокодер Speex, однако стандартная реализация его echo сanceller очень громоздка и предназначена больше для организации громкой связи. Для применения этой фичи as is нет оперативки, да и оптимизировать опять много чего придётся.....в общем не вариант. Нужно как-то организовать простой алгоритм эхоподавления применительно к конкретной трубке, с конкретными параметрами ну и т.д. Как бы сделать простое "вычитание" воспроизводимого динамиком сигнала из того, что поступает в микрофон и не передавать удалённому абоненту его-же голос?
--------------------
The truth is out there...
|
|
|
|
|
 |
Ответов
|
Aug 22 2009, 18:05
|
Участник

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

|
ну тогда первая строка гугла на запрос "импульсная характеристика" http://ru.wikipedia.org/wiki/Импульсная_переходная_функцият.е. как бы импульс для импульсной характеристики вполне определенная "весч". Что есть дельта функция для вас? - это один такой отсчет макс аплитуды (можно меньше) вокруг которого тишина... как звук попадает в микрофон? - через динамик как звук попадает в динамик? - вы его в него и посылаете через ЦАП ну вот и приготовьте правильную посылку в ЦАП и пошлите ее да - не шумите в комнате когда будете ИХ мерять и так же уберите возможные доп акустические каналы  . Ну на стол не ложите например - т.е. должен быть реальный акустисческий канал - подумайте как у вас там звук бегает - по воздуху - по плате - по корпусу ... я немного повторюся - для акустического канала вам надо 1. найти ИХ - в частности ее длину - отсюда станет ясна длина вашего адаптивного КИХ фильтра. 2. поглядеть АЧХ - насколько оно линейное - т.е вы в него синус - а оно вам в ответ насколько не синус? но тут если уж совсем каких то косяков железячных нет - все должно быть более менее - посему это больше как упражнение на разминку. 3. читаем про LMS и NLMS адаптивные фильтры. 4. Делаем реализацию фильтра с КИХ (3-4 строчки?) и реализацию "адаптатора" этого КИХ фильтра алгоритмом NLMS - столько же строчек по существу вопроса. 5. смотрим на результат - радуемся или плачем - в зависимости от успеха 6. думаем про "детектор двойного разговора" 7. конец ... через какое то время 8. если хочется бооольшего подавления - начинаем читать про RLS алгоритмы адаптации Никакие готовые проекты вам не помогут - точнее они не нужны ибо сил на их анализ и привязывание к вашей ситуации надо гораздо больше чем сделать самом. Т.е. или вы осознаете что вам надо или нет: если нет - готовые решения не помогут если да - они вам не нужны  - вот такие пироги. По сути же вопроса (если не вдаваться в теорию по уши как говорится) - надо реализовать два алгоритма каждый из которых математически выражается одной строчкой. Один это КИХ, второй это NLMS. Но не вдаваясь в теорию "совсем ни капли"- вы не сможете их правильно применить - получается надо таки разобраться . Можно глубоко, можно "по месту" - вот реализация КИХ с NLMS - это нормальное такое начало для получения более менее годного для практического применения результата без погреения себя в дебрях обработки сигналов.
Сообщение отредактировал ryhor - Aug 22 2009, 18:11
|
|
|
|
|
Aug 22 2009, 18:15
|

Эксперт
    
Группа: Свой
Сообщений: 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, порождённых разрядностью)
|
|
|
|
|
Aug 22 2009, 18:29
|
Участник

Группа: Участник
Сообщений: 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 строчки на КИХ хватит ну там проверить не нули ли пришли в гости - но это лабуда NLMS в целых числах - 5 строчек считая вместе с "for(..." ну там да - пару строчек до и пару после Т.е. согласен - на все про все КИХ + NLMS 30-40 строчек в самый раз. UPD - да пересмотрел - действительно что бы быстро и точность не сильно губить в 16 битах приходится немного цикл развернуть (unroll) и пошаманить. Однако у автора плавующие звери. плавающая точка - это хорошо, но скорость адаптации все равно радует именно побыстрее. Т.е. если у вас фильтр адаптивный будет пару минут сходится к 20дБ подавления - то можно считать что его и нет. А малый коэфф адаптации именно это и подарит. ну и детектор двойного разговора - точнее его отсутствие - будет "разносить" фильт в случае чего на ура - ибо он (фильтер) будет пытаться подстроится под подавление звука который совсем даже не из динамика пришел.
Сообщение отредактировал ryhor - Aug 22 2009, 18:34
|
|
|
|
|
Aug 22 2009, 18:39
|

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

|
Цитата(ryhor @ Aug 22 2009, 22:29)  да ладно 3-4 строчки на КИХ хватит ну там проверить не нули ли пришли в гости - но это лабуда NLMS в целых числах - 5 строчек считая вместе с "for(..." ну там да - пару строчек до и пару после Т.е. согласен - на все про все КИХ + NLMS 30-40 строчек в самый раз. плавающая точка - это хорошо, но скорость адаптации все равно радует именно побыстрее. Т.е. если у вас фильтр адаптивный будет пару минут сходится к 20дБ подавления - то можно считать что его и нет. А малый коэфф адаптации именно это и подарит. ну и детектор двойного разговора - точнее его отсутствие - будет "разносить" фильт в случае чего на ура - ибо он (фильтер) будет пытаться подстроится под подавление звука который совсем даже не из динамика пришел. Так КИХ не отдельно, КИХ внутри цикла LMS Я представлял себе это так - достаточно быстрая адаптация при калибровке или вначале сеанса связи. Пока клиент снимает трубку - даблтока нет. Можно щелкнуть дельта-функцией или даже послать случайный шум в динамик. Главное, чтобы адаптация завершилась пока клиент несёт трубку к уху. А это секунда Потом работать с очень низким коэф. адаптации. Некорелированый с передатчиком шум и базар при слабой адаптации ничего не собьёт. Аналоговые модемы так и работают - замораживают коэффициент адаптации после стартапа до минимальных значений. Малый кооф.адаптации даёт большое время сходимости,да, но малую ошибку оценки. Кстати это и есть самый простой способ измерения импульсного отклика - LMS c малым коэффициентом адаптации. Если оценить все проблемы синхронизации при прямом измерении. Но я не думаю, что ему нужен импульсный отклик, разве что из любопытства. Ему нужен LMS! ))
|
|
|
|
|
Aug 22 2009, 19:52
|
Участник

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

|
Цитата(fontp @ Aug 22 2009, 21:39)  Так КИХ не отдельно, КИХ внутри цикла LMS
Я представлял себе это так - достаточно быстрая адаптация при калибровке или вначале сеанса связи. Пока клиент снимает трубку - даблтока нет. Можно щелкнуть дельта-функцией или даже послать случайный шум в динамик. Главное, чтобы адаптация завершилась пока клиент несёт трубку к уху. А это секунда Потом работать с очень низким коэф. адаптации. Некорелированый с передатчиком шум и базар при слабой адаптации ничего не собьёт. Аналоговые модемы так и работают - замораживают коэффициент адаптации после стартапа до минимальных значений. Малый кооф.адаптации даёт большое время сходимости,да, но малую ошибку оценки. Ну как любят мух отдельно от каклет - смешивать фильтр и адаптивный алгоритм - это на любителя  Адаптация 20дБ за 1 сек - это очень и очень хорошо - это даже вроде по какому то ИТУшному стандарту, но LMS и даже NLMS ее в среднем обеспечить не могут. Обычно надо несколько секунд. Потом пулять самому шум из своего динамика это конечно тема, но часто вы видели шипяще щелкающие телефоны в природе? Обычно пока дальняя сторона наговаривает нам в динамик местный фильтр успевает настроится и обеспечить отсутсвие эха для нее. Далее - акустический эхо канал устанавливается постепенно - например после того как пару динамик-микрофон к голове приложили он может и поменяться и в дальнейшем опять может поменяться - поэтому примораживать адаптацию на совсем немного "опасно". Про "двойной разговор" - Почему это нет DD пока клиент снимает трубку? это типа дано? в реальности к сожалению это совсем не так. - Любой посторонний шум (речь, звуки) попадающий в микрофон при включенном адаптаторе будут его так сказать неправильно информировать  - на что он будет хладнокровно подстраивать фильтр - в никуда. А то что коэфф адаптации маленький - это только как бы говорит что адаптатор почти выключен. Т.е. получается что "двойной разговор" "безопасен" когда нет адаптации, а если она все время нужна и достаточно активно? Цитата Кстати это и есть самый простой способ измерения импульсного отклика - LMS c малым коэффициентом адаптации. Если оценить все проблемы синхронизации при прямом измерении. Но я не думаю, что ему нужен импульсный отклик, разве что из любопытства. Ему нужен LMS! )) Начнем с конца - какой длинны LMS ему таки нужен?  Хватит 32 тапа? или там все 200мс эха? Ну и как бы ИХ меряется очень просто - посредством измерения ИХ  . Кстати не вижу какие там проблеммы с синхронизацие? пикнул и пиши звук. а вот LMS с малым коэф. может намерять такого что никакой ИХ не снилось. Как долго давать адаптироваться? Ну в общем то в сферическом (в вакууме) случае они конечно сойдутся к одному и тому же, но все же лучше дейстовать прямыми методами, тем более что они проще и гораздо менее подвержены ошибкам.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|