|
Эхоподавление(если можно так сказать), Нужен реальный совет под реальную задачу. |
|
|
|
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...
|
|
|
|
|
 |
Ответов
(45 - 59)
|
Aug 23 2009, 13:43
|

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

|
Цитата(ryhor @ Aug 23 2009, 17:34)  ало внимание - у нас голос  А G.168 - что? Стандарт для голосовых линейных шумоподавителей. Естественно требования стандарта не могут относиться к голосу. Ало Всякий голос нестандартен. Естественно, стандарт содержит набор воспроизводимых тестов. Без всякого голоса Остальной ваш шум, нет смысла обсуждать Цитата(ryhor @ Aug 23 2009, 17:34)  Что значит я уверен или не уверен? я тут не причем - это все природа. Хочет меняет хочет не меняет  . Т.е. как бы дело не в уверенности или не уверенности, а в том что практика говорит (в прямом смысле в этом случае  ). Т.е. еще раз параметры эхоканала - меняются (считайте что это дано). Бла-бла-бла Всё меняется в этом мире. Проблема в балансе - как быстро меняется по отношению к адаптации.
|
|
|
|
|
Aug 23 2009, 14:01
|
Участник

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

|
Цитата(fontp @ Aug 23 2009, 16:43)  А G.168 - что? Стандарт для голосовых линейных шумоподавителей. Естественно требования стандарта не могут относиться к голосу. Ало Голос нестандартен. Естественно, стандарт содержит набор воспроизводимых тестов
Остальной ваш шум, нет смысла обсуждать
Бла-бла-бла Всё меняется в этом мире. Проблема в балансе - как быстро меняется по отношению к адаптации. я близок к тому что бы засчитать ваш слив хе хе хе но как бы аннонсированная цель - помочь автору топика посему я повторю свой рецепт: Цитата я немного повторюся - для акустического канала вам надо 1. найти ИХ - в частности ее длину - отсюда станет ясна длина вашего адаптивного КИХ фильтра. 2. поглядеть АЧХ - насколько оно линейное - т.е вы в него синус - а оно вам в ответ насколько не синус? но тут если уж совсем каких то косяков железячных нет - все должно быть более менее - посему это больше как упражнение на разминку. 3. читаем про LMS и NLMS адаптивные фильтры. 4. Делаем реализацию фильтра с КИХ (3-4 строчки?) и реализацию "адаптатора" этого КИХ фильтра алгоритмом NLMS - столько же строчек по существу вопроса. 5. смотрим на результат - радуемся или плачем - в зависимости от успеха 6. думаем про "детектор двойного разговора" 7. конец ... через какое то время 8. если хочется бооольшего подавления - начинаем читать про RLS алгоритмы адаптации могли бы вы привести кратко возражения по существу (или привести ваш план график работ)? При этом думать не обо мне, а о задаче и ее решении т.е. сделать это так что бы это было полезно автору топика?
|
|
|
|
|
Aug 23 2009, 14:05
|

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

|
Цитата(ryhor @ Aug 23 2009, 18:01)  я близок к тому что бы засчитать ваш слив хе хе хе но как бы аннонсированная цель - помочь автору топика посему я повторю свой рецепт: могли бы вы привести кратко возражения по существу (или привести ваш план график работ)? При этом думать не обо мне, а о задаче и ее решении т.е. сделать это так что бы это было полезно автору топика? Я вроде бы и не возражал против плана  Заметил только, что в 3 строчки не получится
|
|
|
|
|
Aug 23 2009, 23:03
|

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

|
Завтра, не смотря на праздник, постараюсь поработать и до вечера выложить ИХ и АЧХ дабы уже более-менее прикинуть что к чему... В общем, саму концепцию эходавления(линейного) я понял. Работу фильтра, роль алгоритма адаптации и почему фильтр "разносит" при дабл токе - тоже понял. Т.е. определенный просвет есть уже... времени не много..чувствую неделька будет в авральном режиме. И, как это часто бывает, буду учиться по ходу выполнения задачи  P.S. на fontp не наезжайте, по моим наблюдениям(возможно субъективным) он даёт дельные советы в 99 случаях из 100
--------------------
The truth is out there...
|
|
|
|
|
Aug 27 2009, 00:42
|

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

|
В общем-то, по-моему всё очень неплохо складывается.... Слишком сильно не задирая чувствительность микрофона вполне можно пользоваться системой как есть(без эходава). Основной задачей была отдача комплекта на испытания и она выполнена. Время на доработку теперь побольше. Замерял импульсную. Возмущения от импульса видны на отрезке 5ms - далее "подстилающий" шум кулеров  АЧХ не мерял. Уровень импульса приличный! Прилагаю три пикчера(слева на право): 1. без подачи импульса(отладочная плата) - 250ms 2. без подачи импульса(всё смонтировано в телефон) - 250ms 2. подан импульс(всё смонтировано в телефон) - тут видна 71ms область, где наблюдаем импульс Мне не удалось добиться более-менее чистого графика без подачи импульса. Как-то странно он улавливает шум компа... Всё 10раз проверил - ошибок никаких не нашел. Думается мне, что может вовсе и не шум это, а наводки от цифровой части.... Замер делал так-же на отладочной плате - там микрофон просто висит в воздухе и никакого корпуса нет. Выдаёт примерно такую-же рваную картину, но только на порядок(а то и на два) меньшей амплитуды.... На слух ничего этого не слышно. Делал loopback, посылая отсчёты ADC сразу в DAC. Видно, что импульс совпал во времени с всплеском шума/помехи(характерный резкий скачек вверх и окончание с провалом)... Я постарался выделить область, где мы имеем поданный импульс и реакцию на него. Получается 5-6ms. Ну и в любом случае не более 11(это если вообще всё выделить). Но амплитуда, конечно, внушительная получается  Думается мне, что проблема будет успешна решена достаточно коротким фильтром с LMS адаптацией. Всё-таки пока не до конца понятно как будет работать фильтр, скажем, вот в такой обстановке как у меня. Шум + пробившийся от динамика сигнал(в данном случае импульс). А шум может быть постоянным и достаточно сильным(к примеру в автомобиле)... Сам механизм работы непонятен. Т.е. за желаемый результат мы принимаем тишину(в случае отсутствия дабл тока) и начинаем адаптировать фильтр. Т.е. по идее, если шум меняется медленнее, чем адаптируется фильтр - то всё хорошо будет(заодно и шум тоже сведем на нет). Но тут у меня другой вопрос: а что если шум "длиннее" фильтра? Будет выкусывать из него куски и шум превратится в .... Чуток подскажите тут, чтоб у меня уже мозайка сложилась, так сказать. Сложно ли реализовать нормальный дабл ток детектор? Читал, что в OSLEC у них там были кое-какие проблемы с этим делом....
Эскизы прикрепленных изображений
--------------------
The truth is out there...
|
|
|
|
|
Aug 27 2009, 01:46
|

Участник

Группа: Свой
Сообщений: 41
Регистрация: 4-05-08
Из: Новосибирск
Пользователь №: 37 258

|
На правом рисунке сколько по времени ширина выделенной зоны - 5мс ?
По характеру характеристики видно, что до уровня -30дб будет лежать в пределах 9мс -> следовательно желателен алгоритм на 16 мс . (а ниже уровня -30дб включается нелинейный процесс с ограничением амплитуды - clip и додавливает эхо)
Шум автомобиля громкий для эхоподавителя это гуд, он всё эхо и без эхоподавителя задавит )
OSLEC не давит шумы автомобиля . Это из области реализаций AEC.
OSLEC для вашей ситуации более чем достаточно, причём нужно стремиться к уменьшению алгоритма от 16мс до 9мс, найдя оптимум при этом. При меньшем количестве TAP резко улучшается скорость сходимости и качество поиска коэффициентов фильтра.
Если не весь хвост эха будет накрываться фильтром, то эти ненакрытые остатки вы и услышите в остатках эхо или их сьест нелинейный процесс OSLEC. В любом случае чем дальше хвост эха, тем он меньше по амлитуде - тут необходим подбор количеества TAP, чтобы опредилить что нужно давить.
Механизм работы OSLEC простой - адаптация теневой модели ведётся всегда!, а вот копирование коэффициентов фильтра в рабочую модель происходит только при благоприятных условиях: нет двойного разговора, новые коэффициенты лучше рабочих и тп ...
Думаю даже, что все мои обьяснения лишние - самое правильное см. первоисточник OSLEC - echo.c
|
|
|
|
|
Aug 27 2009, 11:42
|

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

|
Эхо хоть и короткое, но и неслабое. ОSLEC или любая другой готовый линейный эхоподавитель подойдёт. NLMS c dоuble-talk детектором и прочими стандартными наворотами вполне достаточно. (Но из SPEEX mdf.c был бы ещё круче) Наверное, лучше всё таки взять готовый. 3 строками не обойдётся. Скорее сотней. 16 мс - это 128 отсчётов, двигайтесь по направлению к 8*9=72 как сказано выше. Не забывайте, что условия стабильности позволяют при этом пропорционально увеличивать шаг адаптации для более быстрой сходимости. Условия стабильности есть везде, можете взять хоть здесь (кратко и на русском) http://multicore.ru/fileadmin/user_upload/...ectric-echo.pdfВ программе хорошо бы иметь вычисление ERLE для объективного контроля качества.
|
|
|
|
|
Aug 27 2009, 12:00
|
Участник

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

|
Вот - половина (большая) дела сделана. Теперь вы знаете длительность ИХ и соотвественно все понятно по длине фильтра. Но картинки ваши настораживают вот по таким пунктам - что это за ассиметричный сигнал в 8000 (*2^-15) амплитуды? к нему два вопроса: 1. самый главный - почему он ассиметричный если это внешний звук или шум 2. он слишком большой - ИХ имеет слишком большую амплитуду - т.е. все сказанное из динамика с амп 1 попадает в микрофон и после оцифровки получается размахом во всю шкалу. Это очень интересно - и очень плохо  что надо поделать - посмотрите не стоит ли у вас АРУ где то в канале в том или ином виде - с АРУ надо осторожно, если вообще надо в вашем случае - порегулировать коэфф усиленя микрофона - он слишком чувствительный у вас прямо сейчас - разобраться откуда ассимитрия "шумового/внешнего" сигнала При таком уровне соотношения амплитуд (2^-15*) 8000..6000/32000 = 0.25 вы больше ~-12-15дБ подавления не получите. Еще интересно - ИХ более менее симметричная в +и-, а вот это "нечто" сугубо в одну сторону - там явно где то косяк. UPD - вот первая картинка не плохо выглядит в качестве как бы "тишины", а выбросы положительные это что от не то.
Сообщение отредактировал ryhor - Aug 27 2009, 12:14
|
|
|
|
|
Aug 27 2009, 16:52
|

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

|
Ой ой ой! Нагнал я вчера по ночи  Пропустил я в аудиоредакторе диалог с выбором Intel PCM(LSB,MSB) и Motorola PCM(MSB,LSB) и тупо даванул Ok вчера. Так вот выдавал я в порт я LSB,MSB а файл открывался как MSB,LSB. От того и такая амплитуда импульса вышла. Waveform промасштабирован в недетское кол-во раз чтобы хоть что-то было видно(справа есть шкала - по ней можно сориентироваться по сравнению с предыдущими скриншотами). И взял другую трубку - там на фоне вообще почти полная тишина получается. На самом деле выглядит это так:
Эскизы прикрепленных изображений
--------------------
The truth is out there...
|
|
|
|
|
Aug 27 2009, 19:28
|
Участник

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

|
Цитата(sigmaN @ Aug 27 2009, 20:52)  Ой ой ой! Нагнал я вчера по ночи  Пропустил я в аудиоредакторе диалог с выбором Intel PCM(LSB,MSB) и Motorola PCM(MSB,LSB) и тупо даванул Ok вчера. Так вот выдавал я в порт я LSB,MSB а файл открывался как MSB,LSB. От того и такая амплитуда импульса вышла. Waveform промасштабирован в недетское кол-во раз чтобы хоть что-то было видно(справа есть шкала - по ней можно сориентироваться по сравнению с предыдущими скриншотами). И взял другую трубку - там на фоне вообще почти полная тишина получается. На самом деле выглядит это так: ну теперь если с выходом и входом не напутано - т.е. - "пикали" на макс громкости - захватывали на той чувствительности что будет работать микрофон то можно сказать что акустического эха у вас нет И как следствие можно вообще ничего не делать в этом направлении. Проверьте все еще раз на всякий случай. Один из вариантов - проговариваете в динамик речь и пишете что слышит микрофон. Если вы ИХ правильно намеряли записанная речь должна быть в теже дБ что на картинке меньше.
|
|
|
|
|
Aug 28 2009, 23:34
|

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

|
Влепил я туда OSLEC. Попариться пришлось не очень много. Стандартный Сишный код по быстродействию реалтайма мне не обеспечил, поэтому пришлось закатать рукава и поработать над асмовой оптимизацией фильтра. На этом пути меня ждало много интересного. Раньше оптимайзил плывучие функции Speex, поэтому о переполнениях, Sign extension и прочем даже не задумывался. Я тут вот, пришлось узнать об этом по подробнее  Только что произвел тестовый звонок. Длина фильтра = 80 отсчётов. Небольшие отдельные кусочки эха иногда прослушиваются, но достаточно тихо и совсем ненавязчиво. Дабл ток проверю завтра ибо собеседника мне не найти - все спят уже  Разберусь до конца с оптимизацией, посмотрю, поиграюсь с длиной фильтра... думаю всё будет замечательно! ВСЕМ СПАСИБО ЗА ПОМОЩЬ!
--------------------
The truth is out there...
|
|
|
|
|
Aug 29 2009, 09:40
|

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

|
Цитата(shf_05 @ Aug 29 2009, 12:45)  посмотрите сюда http://focus-webapps.ti.com/general/docs/s...opic=1653260327там и про акустическое и электрическое эхо есть теория ипрактика. Там есть несколько классических Application Notes, а в основном жлобские 3-d party реализации, за много килобаксов, соизмеримого качества или даже хуже. Фирменные коммерческие реализации вовсе не лучше Open-source по части алгоритмов. Главная особенность гнушных open-source реализаций - это межплатформенная мобильность. Поэтому гнушные алгоритмы реализуются на С, а вся оптимизация там крайне сомнительна. Лишь бы дырки заткнуть. Open-source реализации таким образом нацелены в будущее (производительность будет расти вместе с производительностью процессоров без всяких программистских затрат), а коммерческие реализации нацелены на текущие сиюминутные прибыли - примерно раза в три производительней, но умрут вместе с конкретным процессором или платформой :-) В open-source нам доступны реализации всех основных алгоритмов - mdf - в SPEEX nlms - в OSLEC fast RLS - в LEC/AEC Цитата(sigmaN @ Aug 29 2009, 03:34)  Только что произвел тестовый звонок. Длина фильтра = 80 отсчётов. Небольшие отдельные кусочки эха иногда прослушиваются, но достаточно тихо и совсем ненавязчиво. Дабл ток проверю завтра ибо собеседника мне не найти - все спят уже  Разберусь до конца с оптимизацией, посмотрю, поиграюсь с длиной фильтра... думаю всё будет замечательно! Если выч. ресурс достаточен, не стремитесь минимизировать длину фильтра - оставьте с запасом, например 128 . Совсем небольшие похрюкивания <-40 дб часто порождаются нелинейными эффектами и линейными алгоритмами не подавляются. В стандарте предлагают для их подавления использовать нелинейные ограничители опционально. Т.е. оставить возможность выбора между незначительной потерей качества передачи слабых сигналов и незначительным остаточным нелинейным эхом. Поиграйтесь с длиной фильтра в частности и параметрами алгоритма вообще. Всё будет кокаколой ))
|
|
|
|
|
Aug 30 2009, 22:11
|

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

|
Всё кокаколой! Спасибо! Там в ослике надо было ещё заюзать такие штуки как ECHO_CAN_USE_TX_HPF и ECHO_CAN_USE_RX_HPF. Реально выручили меня именно эти фичи, которые я изначально не включил и таки вместо похрюкиваних <-40 дб получал вполне приличные отрывки эха, когда громкость динамика/чувствительность микрофона ставил побольше. Сейчас используются все фичи эходава, включая нелинейный ограничитель ECHO_CAN_USE_NLP. Хоть бы что-то хрюкнуло! Тишина теперь вообще!  )))))))))))
--------------------
The truth is out there...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|