Эхо не отменялось с помощью speex aec в Android с более высокой частотой дискретизации?

Я успешно интегрировал speex aec в Android (интегрирован в Android/frameworks/av/media/libeffects/preprocessing).

Эхо подавлялось, когда я использовал частоты дискретизации 8k и 11k для захвата. Но он работает хуже, когда я перехожу к более высоким частотам дискретизации, таким как 16k, 22k, 32k и так далее.

Я использую ресемплер speex только для повторной выборки моих входных данных. Я не знаю, почему Echo не отключается при более высоких частотах дискретизации.

Может ли кто-нибудь объяснить решение для этого?


person swetha    schedule 10.07.2014    source источник


Ответы (1)


Основываясь на ваших данных захвата на 8 кГц, проблема заключается в 2 аспектах: (1) сигнал на ближнем конце почти не имеет задержки (или, может быть, даже немного раньше!) от сигнала на дальнем конце. Добавьте короткую задержку (например, 10 мс) перед тем, как сработает сигнал близкого окончания. (2) ERL превышает -12 дБ. Таким образом, вы должны настроить модуль AEC для установки какого-либо элемента конфигурации, такого как «worstExpectedERLdB», превышающего 12 дБ.

person gary    schedule 12.07.2014
comment
Спасибо за ваш ответ. Я сделал именно так, как вы сказали (я имею в виду, что применил AEC до кодека speex), но все равно эхо остается прежним после процесса AEC. Я борюсь с этой проблемой с 1 недели. Даже я пробовал со скриптом Matlab, например, echo_diagnostic.m. С помощью этого скрипта я заметил, что задержка была нормальной, и дрейф часов также был нормальным. Но все еще не смог отменить эхо. Я не знаю, в чем проблема. Я пытался разными способами. Но все еще сталкиваюсь с той же проблемой. другое решение. - person swetha; 14.07.2014
comment
Есть много ограничений, прежде чем AEC заработает. Одной из самых популярных проблем является массовая задержка. Не могли бы вы записать образцы аудио и отправить мне на анализ? просто сохраните их в необработанные файлы PCM перед вызовом функции AEC. - person gary; 14.07.2014
comment
да, конечно. Я передискретизировал данные на ближнем конце, а также данные на дальнем конце до 8k с 16k, используя передискретизатор Speex. Потому что Speex AEC будет работать с частотой дискретизации 8k. Но эхо не отменяется. drive.google.com/ найдите входные данные SPEEX AEC по приведенной выше ссылке. Не могли бы вы помочь мне в этом? - person swetha; 14.07.2014
comment
Я понял. Ваша проблема заключается в двух аспектах: (1) Сигнал ближнего конца почти не имеет задержки (или, может быть, даже немного раньше!) от сигнала дальнего конца. Как идет? Обычно в системе Android между ними должна быть задержка в десятки миллисекунд. Как получить свою запись? (2) ERL превышает 12 дБ. Таким образом, вы должны настроить модуль AEC, чтобы установить какой-либо элемент конфигурации, например, наихудшийожидаемыйERLdB, превышающий 12 дБ. - person gary; 14.07.2014
comment
ERL больше 12 дБ... что это значит? извини, я тебя не понял. И еще одно, что я хочу сказать, в андроиде есть компенсатор задержки (в файле echo_reference.c). Это компенсирует задержку рендеринга, добавляя нули в данные дальнего конца. Таким образом, мы получаем данные дальнего и ближнего конца с одинаковыми временными интервалами. Но с приложением частоты дискретизации 8K оно работает нормально. - person swetha; 14.07.2014
comment
ERL означает потерю отраженного сигнала. Отрицательное значение означает выигрыш, а не убыток. -12 дБ означает, что ваше эхо даже намного громче, чем сигнал на дальнем конце. Большинство алгоритмов эхоподавления могут очень хорошо обрабатывать эхо ниже -3 дБ (или не более -6 дБ). Но если эхо-сигнал сильнее, чем -6 дБ ERL, вы должны проверить, есть ли в этом алгоритме AEC какой-либо элемент конфигурации для изменения WorstExpectedERL. (в предыдущем комментарии я пропустил отрицательный знак перед 12, обратите внимание.) - person gary; 14.07.2014
comment
Вы можете попробовать ослабить ближний сигнал на -12 дБ (просто умножьте на 0,063) и сделать AEC, а затем усилить его, чтобы восстановить уровень (умножить на 15,8). Если затем Speex AEC сработает, он может доказать эту первопричину. - person gary; 14.07.2014
comment
Большое вам спасибо. Я вручную отложил почти конечные данные на 10 миллисекунд, добавив нули. Эхо отменено полностью. Я удивлен. Но здесь у меня есть еще одно сомнение, что я могу отменить эхо, когда я использую частоту дискретизации захвата как 8k в приложении, но для того же кода я не могу отменить эхо с частотой дискретизации захвата как 16k. Единственная разница в том, что я просто делаю процесс повторной выборки с приложением 16k. Я не думаю, что процесс повторной выборки повлияет на процесс AEC. - person swetha; 14.07.2014
comment
Приятно видеть, что это работает сейчас! Тема AEC настолько сложна, что вам лучше разделить ее на разные темы на stackOverflow :) Для решения проблемы с ресемплером вам нужно собрать образцы до и после вашего ресемплера и отправить мне на анализ. - person gary; 14.07.2014
comment
общие файлы по ссылке drive.google.com/ . - person swetha; 14.07.2014
comment
Вам не кажется, что эти ответы полезны? не забудьте нажать стрелку вверх, чтобы пометить ответ как полезный. Эти выходные данные ресемплера хороши, никаких новых проблем, точно так же, как и файлы с частотой дискретизации 8 кГц, небольшая задержка на ближнем конце сигнала должна работать. - person gary; 14.07.2014
comment
Большое спасибо, и мне очень жаль, что я не могу щелкнуть стрелку вверх, мне нужно 15 репутаций, чтобы сделать это, иначе я сделаю это в самом начале. Я новый пользователь этого сайта. Но ваш ответ был действительно полезным. - person swetha; 15.07.2014
comment
@gary, не могли бы вы поделиться, как вы анализируете ERL? - person rightaway717; 03.12.2015