|
|
  |
Алгоритм Витерби., Не могу понять, как так получается. |
|
|
|
Apr 1 2016, 17:06
|
Местный
  
Группа: Свой
Сообщений: 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 Файл прикрепил.
|
|
|
|
|
Apr 4 2016, 07:19
|
Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 14-03-06
Пользователь №: 15 243

|
Цитата(des00 @ Apr 2 2016, 05:33)  Там же только трейсбек на памяти реализован. Видимо, я не так понимаю этот процесс. Подскажите пожалуйста, где про трейсбек и извлечения декодированных данных написано по подробнее, чем в прокисе? Спасибо.
|
|
|
|
|
Apr 4 2016, 08:14
|
Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 14-03-06
Пользователь №: 15 243

|
Цитата(des00 @ Apr 4 2016, 10:39)  А так в сети информации как грязи. В этом и проблема, чтобы найти что-то достойное надо перелопатить кучу не очень достойного. Цитата(des00 @ Apr 4 2016, 10:39)  а набрав в матлабе hdlcoderviterbi hdl coder viterbi  Спасибо. Цитата(des00 @ Apr 2 2016, 05:33)  Там же только трейсбек на памяти реализован. ACS реализован без памяти, под каждое состояние свой аккумулятор. Трейсбек не требует записи мягкой метрики состояния, т.к. для двоичных решеток, там будет 1 бит на состояние. Ну и реализуется трейсбек как LIFO, поэтому и стоит там 2 LIFO, для работы в режиме интерливинга. Извините, еще пара уточняющих вопросов. Допустим трейсбек равен 100. R=1/2. Декодер начинает, декодировать из нулевого состояния. Правильно ли я понимая, что через 100 информационных бит (200 символов) он должен выбрать максимальную метрику и из этой метрики будет только один путь назад? Таким образом все данные можно извлечь или только, тот бит который был 200 символов назад. Спасибо.
|
|
|
|
|
Apr 4 2016, 10:04
|
ʕʘ̅͜ʘ̅ʔ
    
Группа: Свой
Сообщений: 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 символов назад.
|
|
|
|
|
Apr 4 2016, 14:33
|
Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 14-03-06
Пользователь №: 15 243

|
Цитата(Fat Robot @ Apr 4 2016, 13:04)  Все зависит от конструкции кода. Почитайте, как вам советовал Des00, Спасибо.
|
|
|
|
|
Apr 15 2016, 12:57
|
Местный
  
Группа: Свой
Сообщений: 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- кодовое ограничение. Я правильно понял Морлеса-Саргосу?
|
|
|
|
|
Apr 15 2016, 14:53
|
ʕʘ̅͜ʘ̅ʔ
    
Группа: Свой
Сообщений: 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) 
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|