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

 
 
 
Reply to this topicStart new topic
Tpeck
сообщение Apr 1 2016, 17:06
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 14-03-06
Пользователь №: 15 243



Доброго времени суток.
Встала задача разобраться в аппаратной реализации алгоритма Витерби на ПЛИС.
Открыл документацию на IP ядро Xilinx viterbi_ds247, а там в табл. 8 на стр. 28 есть три варианта реализации, параллельный, последовательный и мультиканальный.
Вот смотрю я на параллельный вариант со следующими параметрами K=7, R=1/2, Traceback=96, Soft Width=3. А там пропускная способность равна тактовой. 8-).
Вот как так получается, что там 64 состояния с разрядностью не менее 3 бит, т.е. не менее 192 бит, за один такт надо положить в два (!) блока памяти.
У меня получается даже в True Dual Port Mode, за такт можно положить не более 36*2*2=144 бит.
Подскажите пожалуйста, где я что-то упустил или не так понял.
Всем спасибо.

PS Интересно а внутренние метрики какой разрядности?
PPS Файл прикрепил.



Прикрепленные файлы
Прикрепленный файл  viterbi_ds247.pdf ( 1.21 мегабайт ) Кол-во скачиваний: 22
 
Go to the top of the page
 
+Quote Post
des00
сообщение Apr 2 2016, 02:33
Сообщение #2


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Там же только трейсбек на памяти реализован. ACS реализован без памяти, под каждое состояние свой аккумулятор. Трейсбек не требует записи мягкой метрики состояния, т.к. для двоичных решеток, там будет 1 бит на состояние. Ну и реализуется трейсбек как LIFO, поэтому и стоит там 2 LIFO, для работы в режиме интерливинга.


--------------------
Go to the top of the page
 
+Quote Post
Tpeck
сообщение Apr 4 2016, 07:19
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 14-03-06
Пользователь №: 15 243



Цитата(des00 @ Apr 2 2016, 05:33) *
Там же только трейсбек на памяти реализован.


Видимо, я не так понимаю этот процесс.
Подскажите пожалуйста, где про трейсбек и извлечения декодированных данных написано по подробнее, чем в прокисе?
Спасибо.
Go to the top of the page
 
+Quote Post
des00
сообщение Apr 4 2016, 07:39
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Tpeck @ Apr 4 2016, 14:19) *
Видимо, я не так понимаю этот процесс.
Подскажите пожалуйста, где про трейсбек и извлечения декодированных данных написано по подробнее, чем в прокисе?

мне морелоса-сарагосы хватило, а так в сети информации как грязи. а набрав в матлабе hdlcoderviterbi у вас будет прекрасная возможность изучить на кубиках как строиться декодер витерби без обратного прохода (на регистрах)


--------------------
Go to the top of the page
 
+Quote Post
Tpeck
сообщение Apr 4 2016, 08:14
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 14-03-06
Пользователь №: 15 243



Цитата(des00 @ Apr 4 2016, 10:39) *
А так в сети информации как грязи.


В этом и проблема, чтобы найти что-то достойное надо перелопатить кучу не очень достойного.

Цитата(des00 @ Apr 4 2016, 10:39) *
а набрав в матлабе hdlcoderviterbi


hdl coder viterbi sm.gif
Спасибо.

Цитата(des00 @ Apr 2 2016, 05:33) *
Там же только трейсбек на памяти реализован. ACS реализован без памяти, под каждое состояние свой аккумулятор. Трейсбек не требует записи мягкой метрики состояния, т.к. для двоичных решеток, там будет 1 бит на состояние. Ну и реализуется трейсбек как LIFO, поэтому и стоит там 2 LIFO, для работы в режиме интерливинга.

Извините, еще пара уточняющих вопросов.
Допустим трейсбек равен 100. R=1/2. Декодер начинает, декодировать из нулевого состояния.
Правильно ли я понимая, что через 100 информационных бит (200 символов) он должен выбрать максимальную метрику и из этой метрики будет только один путь назад? Таким образом все данные можно извлечь или только, тот бит который был 200 символов назад.
Спасибо.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Apr 4 2016, 10:04
Сообщение #6


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Все зависит от конструкции кода. Почитайте, как вам советовал Des00,

Искусство помехоустойчивого кодирования - методы, алгоритмы, применение
Морелос-Сарагоса Р.

Там описаны особенности применения алгоритма Витерби для блоковых конструкций с termination и tail-biting.

При размере блока много большем, чем длина пути, наблюдаемая в декодере, в установившемся режиме вы извлекаете 1 бит или 1 состояние лз кодера из начала пути с макс. путевой метрикой для каждого вектора реберных метрик на входе декодера.

Цитата(Tpeck @ Apr 4 2016, 12:14) *
Допустим трейсбек равен 100. R=1/2. Декодер начинает, декодировать из нулевого состояния.
Правильно ли я понимая, что через 100 информационных бит (200 символов) он должен выбрать максимальную метрику и из этой метрики будет только один путь назад? Таким образом все данные можно извлечь или только, тот бит который был 200 символов назад.
Go to the top of the page
 
+Quote Post
Tpeck
сообщение Apr 4 2016, 14:33
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 14-03-06
Пользователь №: 15 243



Цитата(Fat Robot @ Apr 4 2016, 13:04) *
Все зависит от конструкции кода. Почитайте, как вам советовал Des00,


Спасибо.
Go to the top of the page
 
+Quote Post
Tpeck
сообщение Apr 15 2016, 12:57
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 14-03-06
Пользователь №: 15 243



Цитата(Fat Robot @ Apr 4 2016, 13:04) *
При размере блока много большем, чем длина пути, наблюдаемая в декодере, в установившемся режиме вы извлекаете 1 бит или 1 состояние лз кодера из начала пути с макс. путевой метрикой для каждого вектора реберных метрик на входе декодера.

Чтобы получить один бит данных.
Для линии задержки - это одно обращение к памяти, а для обратного прохода (длиной TB) - количество обращений к памяти равно TB.
Это так?

Но при этом в случае использования обратного прохода - объем памяти равен равен 2^(K-1)*TB, а в случае линии задержки 2^(K-1)*TB^2?
K- кодовое ограничение.

Я правильно понял Морлеса-Саргосу?



Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Apr 15 2016, 14:53
Сообщение #9


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Есть 2 способа обновления памяти путей и получения информационного бита:

1. Обратный проход (Trace back). Обычно используется в аппаратной реализации, в которой память путей реализована на триггерах (ЛЗ). Требует [2^(K-1)]*TB бит для памяти путей 1 канала декодирования. Потенциально может работать на скорости 1 бит на выходе за 1 такт.

2. Обмен между регистрами (Register exchange). Обычно используется при реализации, в которой память путей реализована на блоке или блоках памяти, например при программной реализации. Требует [2^(K-1)]*TB*2 бит для памяти путей

Разница между ними в том, когда применяется диаграмма состояний кодера. Для (1) - при вычитывании информационного бита, для (2) - при обновлении путей декодирования и путевых метрик.

Литературы и примеров для обоих способов очень много.

Цитата(Tpeck @ Apr 15 2016, 16:57) *
Go to the top of the page
 
+Quote Post

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

 


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


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