2015-08-01 4 views
0

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

Сначала я хотел реализовать его и протестировать алгоритм в Matlab, но у меня все еще есть некоторые проблемы. Я думаю, что у меня может быть теоретическая проблема в моем алгоритме. У меня есть грубое понимание времени, что будет «желательным сигналом» в алгоритме, поскольку у меня нет доступа к неповрежденному сигналу.

Вот краткий обзор моего наивного способа реализации этого в Matlab. Simulink diagram here

Link to Simulink code (.slx)

Сейчас код не может скомпилировать из-за «algeabric ошибки контура» в Simulink, но у меня есть чувство, что больше к этой проблеме.

Любая помощь будет оценена по достоинству.

+0

Вы прочитали статью о документации по алгебраическим циклам? http://de.mathworks.com/help/simulink/ug/algebraic-loops.html – Daniel

+1

Возможно, я полностью не понимаю вашу проблему, но что вы имеете в виду, что у вас «нет доступа к неповрежденному сигналу»? Разве вы не можете просто выключить динамик и записать аудио-образец? Является ли ваше эхо буквально, вход от микрофона также передается через динамик с небольшой задержкой? –

+0

Можете ли вы разместить снимок экрана модели? Взгляните на картину алгоритма на http://www.ti.com/lit/an/spra063/spra063.pdf, которая должна помочь моделировать это. – Navan

ответ

0

У вас есть не совсем правильная модель. Для акустической эхоподавления вы используете адаптивный фильтр для моделирования комнаты. Вы определяете характеристики комнаты с помощью адаптивного фильтра. После этого вы можете использовать свой адаптивный фильтр, чтобы идентифицировать часть сигнала дальнего конца громкоговорителя, который возвращается в микрофон, и вычесть его из сигнала микрофона, чтобы удалить эхо.

Для вашего адаптивного фильтра ваш вход должен быть сигналом с дальнего конца, который будет сигналом к ​​громкому динамику в комнате. Ваш желаемый сигнал - это сигнал, выходящий из микрофона в комнате. Сигнал микрофона содержит сигналы от голоса человека в комнате, а также часть звука от громкоговорителя, который является эхом.

Sound from far end   ----|In    | Out (You can ignore this) 
           | Adaptive Filter | 
Sound from local microphone ----|Desired   | Error 

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

Для имитации этой системы в Simulink вам понадобится фильтр для представления комнаты. Для этого вы можете использовать обычный FIR-фильтр. Вы должны быть в состоянии получить импульсные ответы в Интернете. Обычно это длинные (~ 1000) медленно затухающие импульсные ответы. Ваш аудиоисточник может представлять сигнал от громкоговорителя. Вы подаете тот же звуковой сигнал в этот фильтр отклика комнаты, и вы получите желаемый сигнал. При подаче в адаптивный фильтр адаптивный фильтр будет адаптироваться к фильтру отклика комнаты.

+0

Большое спасибо Navan. Скорее всего, это поможет мне разобраться в моей проблеме. –

+0

Я понял, что ваша реализация не работает, поскольку алгоритм NLMS имеет тенденцию корректировать весы фильтра FIR, чтобы уменьшить сигнал ошибки. В вашем случае мы не хотим, чтобы сигнал ошибки был уменьшен, поэтому мы получаем странный результат, когда фильтр пытается адаптироваться. Поскольку ошибка является результатом - желаемый и выходной в нашем случае является прогнозируемым эхом, для этого, не нужно ли нам вводить желаемое фактическое эхо? Но у меня нет доступа к такому сигналу. У вас есть другое решение? –

+0

Сначала кажется странным смотреть на эту модель, поскольку сигнал ошибки - это сигнал, который вы хотите. Предположение с этой моделью состоит в том, что нет корреляции с сигналом дальнего конца и сигналом ближнего конца. Несмотря на то, что адаптивный фильтр пытается свести к минимуму ошибку, он не может идти ниже удаления эха из-за предположения о корреляции. Какой был странный результат? – Navan