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

 
 
 
Reply to this topicStart new topic
> Подавление акустического эха с помощью FPGA, Какие алгоритмы подходят, и вообще, реализуемо ?
bsp
сообщение Aug 2 2009, 14:29
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 339
Регистрация: 27-08-05
Пользователь №: 8 013



Рассматривается система, в которой есть полностью четырехпроводный речевой тракт с выходом во внешний мир через цифру. Частота следования отсчетов 8 КГц, 16 разрядов. Есть необходимость кроме использования телефонной трубки обеспечить громкоговорящую связь для одного такого канала. Из свободных ресурсов - половина LE в Циклон 3 ( EP3C5 ) и почти все умножители ( 20 - 21 ) и ОЗУ ( блоков 40 ). Посмотрел применяемые алгоритмы в системах на DSP, похоже, самый популярный - компенсация по методу наименьших квадратов. Опыта в цифровой обработке сигнала у меня мало, прикинул, вроде могу втиснуть что-то такое, но никакой уверенности в том, что ресурсов хватит и что работать будет как надо, нет. Как последний вариант, можно сделать систему с переключением, но этого очень не хочется. Просьба помочь советом, где посмотреть самые "модные" алгоритмы с прицелом на FPGA и насколько это вообще реализуемо при таких ресурсах.
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 2 2009, 16:07
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Если задача для Вас новая - прицепите DSP и отладьте алгоритм в нем. А потом сами легко оцените, уберется он внутрь, или нет. В AEC очень много подводных камней, которые отловить на моделе крайне сложно, а реализация в FPGA очень негибкая с точки зрения отладки алгоритма. Что касается собственно алгоритма - да, разумеется, это адаптивные фильтры, и часто обычный LMS (NLMS), который несмотря на свою простоту обладает и довольно серьезными недостатками, как то медленная сходимость и разваливаемость при попытках повышения скорости. Я бы посоветовал обратить внимание еще и на Fast RLS реализации, как то например адаптивные фильтры на структурах Лягерра, они (у меня) показали значительно лучшие результаты на подавлении акустического эха.

ЗЫ. Касаемо ресурсов - должно хватить с запасом.
Go to the top of the page
 
+Quote Post
bsp
сообщение Aug 3 2009, 07:03
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 339
Регистрация: 27-08-05
Пользователь №: 8 013



Спасибо SM, про достаточность ресурсов приятно слышать. Что касается DSP, то с ними на уровне программ я вообще не работал, надо нагружать человека, и так занятого выше головы. Посмотрел Матлаб, им хоть как-то пользовался. Но там другая проблема - в реальном времени не выйдет поэксперементировать. Придется прямо на FPGA разбираться, благо железо готовое есть. В связи с этим очень хотелось-бы посмотреть примеры реализации похожих систем на FPGA. Если есть ссылки или сами тексты, очень буду признателен за помощь! Мне в основном попадаются примеры на "C", а это не то, что привычный Verilog, да и рассчитано на DSP.
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 3 2009, 07:31
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(bsp @ Aug 3 2009, 11:03) *
Мне в основном попадаются примеры на "C", а это не то, что привычный Verilog, да и рассчитано на DSP.


Я тоже не видел описаний для ПЛИС, да и не слышал, чтобы кто-то использовал ПЛИС для этой цели в принципе (разве что ASIC-остроители в прототипах, но те ничего никому за так не дадут). ПЛИС для речевого сигнала - это как из С-300 по воробью. Если с ДСП нет желания связываться - тогда предлагаю два других варината:

1) Матлаб, и несколько разных моделей тракта ЦАП -> усилитель -> динамик -> корпус_устройства+помещение+окр.среда+шум+сигнал -> микрофон -> усилитель -> АЦП, и гонять на нескольких вариантах моделей помещения с разными шумами и полезным сигналом. Снять параметры модели "корпус_устройства+помещение+окр.среда" можно тем же матлабом и звуковой картой, выдав ограниченный по спектру псевдослучайный сигнал на динамик, который в корпусе, и приняв сигнал с микрофона, после чего в матлаб.

2) Временно запаять ПЛИС пожирнее, вогнать туда софт-процессор достаточной мощности, и отладить на нем алгоритм в виде программы, после чего реализовать железно. Алгоритм такой сложности, написанный на С, переделывается в описание устройства, его исполняющего, на раз одной левой.
Go to the top of the page
 
+Quote Post
bsp
сообщение Aug 5 2009, 08:05
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 339
Регистрация: 27-08-05
Пользователь №: 8 013



Вот еще вопрос. Есть плата с микросхемой Cirrus Logic CS6422, представляет из себя адаптивный компенсатор акустического и сетевого эха, четырехпроводная, внутри цифровая, на входах выходах АЦП ЦАП. В нее заложена возможность при перехода в полудуплексный режим, если компенсация не справляется. Означает-ли это, что гарантированной устойчивости компенсации во всех ситуациях нельзя добиться, или есть примеры, говорящие об обратном? Лирическое отступление - свалилась другая срочная работа совершенно отличающегося характера, теперь месяц или два эхоподавлением придется заниматься в фоновом режиме ( хотя эту работу тоже никто не отменял, и тянуть с ней сильно нельзя ). А изучить в области цифровой обработки сигналов похоже, придется много. Может кто посоветует хорошую литературу для изучения. С основами был знаком когда-то, но многое уже забыл.
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 5 2009, 08:25
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(bsp @ Aug 5 2009, 12:05) *
Означает-ли это, что гарантированной устойчивости компенсации во всех ситуациях нельзя добиться, или есть примеры, говорящие об обратном?

Да, означает. Всегда может быть эхо с такой задержкой, с которой не справится адаптивный фильтр имеющейся длины. Более того, возможно, что существует такое эхо (или сигнал), которое "развалит" адаптивный фильтр с заложенными параметрами. Особенно это касается узкополосных (около-гармонических сигналов).

Цитата(bsp @ Aug 5 2009, 12:05) *
А изучить в области цифровой обработки сигналов похоже, придется много. Может кто посоветует хорошую литературу для изучения. С основами был знаком когда-то, но многое уже забыл.

Ну тут вопрос - с какого уровня. Вспомнить основы - "библию" - например Оппенгейма с Шафером или Рабинера с Голдом. Конкретно по теме - Адаптивная обработка сигналов, Б. Уидроу, С.Стирнз. Еще я бы сам посоветовал обратить внимание на публикации Ali H.Sayed и Ricardo Merched на тему адаптивной фильтрации, про быстрые RLS-ы.
Go to the top of the page
 
+Quote Post
Ковылин_Констант...
сообщение Aug 12 2009, 06:29
Сообщение #7


Участник
*

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



Да, результаты Fast RLS реализации, особенно на структурах Лягерра впечатляют (на графиках из статей Ali H.Sayed и Ricardo Merched).

Одно но - при беглом взгляде на алгоритм, для реализации RLS нужно использовать деление, что для FPGA неудобно.

2SM: Вы использовали деление в своих алгоритмах fast RLS?

2bsp: http://www.rowetel.com/ucasterisk/oslec.html - собираюс реализовать эот алгоритм в FPGA тк без делений, но он не очень подходит для подавления при громкой связи ( этот алгоритм скорее рассчитан на остаточное эхо ).
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 12 2009, 07:29
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Ковылин_Константин @ Aug 12 2009, 09:29) *
нужно использовать деление, что для FPGA неудобно.

Какие проблемы? Наличие большого количества аппаратных умножителей в FPGA обыденное дело по нынешним временам.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 12 2009, 07:39
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Ковылин_Константин @ Aug 12 2009, 10:29) *
2SM: Вы использовали деление в своих алгоритмах fast RLS?

Разумеется использовал. Более того, деление нужно и в классическом NLMS. А в чем, собственно, проблема? Делитель в FPGA занимает примерно столько же, сколько и умножитель. Однако я это все в ФПГА не раскладывал, я на DSP все делал.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Aug 12 2009, 09:00
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(SM @ Aug 12 2009, 11:39) *
Делитель в FPGA занимает примерно столько же, сколько и умножитель.

Это ошибка. Например, умножитель 36*36 занимает просто 4 аппаратных умножителя 18*18 и чуть-чуть логики, при этом имеет высокую скорость (сотни мегагерц) _И_ низкую латентность (единицы тактов). А делитель 36/36 занимает 17 таких умножителей плюс около тысячи лутов, при этом имеет ИЛИ большую латентность (30 тактов), ИЛИ низкую частоту (30 МГц). По информации Xilinx Coregen.
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 12 2009, 09:03
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(DmitryR @ Aug 12 2009, 13:00) *
Это ошибка.

Никакой ошибки нет. Так как речи об использовании аппаратного умножителя в моем посте не шло. Я подразумевал построение полностью комбинаторной схемы на LUT-ах.
Go to the top of the page
 
+Quote Post
Ковылин_Констант...
сообщение Aug 12 2009, 09:38
Сообщение #12


Участник
*

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



Цитата(SM @ Aug 12 2009, 14:39) *
Разумеется использовал. Более того, деление нужно и в классическом NLMS...


Это одно место с делением на усреднённую мощность в NLMS красиво обходится : Поправка коэффициентов в фильтре всё-равно с эмпирическим коэффициентом, и значение усреднённой мощности для нормализации поправок (N-нормализация) берётся с точностью до одного бита (те коэффициент от этого скачет от 1 до 2х). Далее деление заменяется на сдвиг и всё )
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 12 2009, 10:12
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Ковылин_Константин @ Aug 12 2009, 13:38) *
Это одно место с делением на усреднённую мощность в NLMS красиво обходится

Оно обходится и по-другому. Т.е. его обходить вообще не надо. Мощность считаем на первом такте обсчета самого фильтра, вычитая из аккумулятора мощности квадрат самой старой выборки и прибавляя квадрат новой. Далее параллельно с вычислением самого фильтра спокойно делим последовательным делителем хоть до какой точности, так как длина фильтра не маленькая. Последовательный делитель это вообще пренебрежимые копейки площади.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 14th July 2025 - 17:34
Рейтинг@Mail.ru


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