Перейти к содержанию
    

Декодер LDPC

Всем привет.

Интересует подход к созданию soft декодера LDPC.

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

А отсюда вопрос а как кто делает? И как правильно? Если это важно, то длина блока 2016.

Заранее спасибо за ответы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и там еще есть wimax LDPC на другой архитектуре.

Автоматы там на 8-16 состояний. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, Anton1990 said:

И как правильно? Если это важно, то длина блока 2016.

ИМХО, надо смотреть что за код. Если QC-LDPC то отображение и декомпозиция нативная. А дальше 2 варианта - либо сверхширокий барреловский сдвигатель либо кучка узких. Ну и еще надо учесть метод декодирования если у вас 2D-min-sum то один вариант, если вы ушли на послойное декодирование (что в принципе ловчее) то другой вариант. 

Если у вас какой-нибудь код со случайной матрицей, совсем без регулярной структуры, тогда ой. Но, судя по длине в 2016, там что-то типа Wimax QC-LDPC

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 hours ago, des00 said:

ИМХО, надо смотреть что за код. Если QC-LDPC то отображение и декомпозиция нативная. А дальше 2 варианта - либо сверхширокий барреловский сдвигатель либо кучка узких. Ну и еще надо учесть метод декодирования если у вас 2D-min-sum то один вариант, если вы ушли на послойное декодирование (что в принципе ловчее) то другой вариант. 

Если у вас какой-нибудь код со случайной матрицей, совсем без регулярной структуры, тогда ой. Но, судя по длине в 2016, там что-то типа Wimax QC-LDPC

Спасибо, конечно, но почти ничего не понял.

Возможно я в силу своей тупости не корректно задаю вопрос.

У меня сообщение 2016 бит при 5 битах softполучаем 10080 битовый регистр, а таких в проекте получается много, да еще умножаем на количество итераций. Всё это програмируется легко, но для плис неподъемно. Попытался сообщение записать в память по 84 бита ( а точнее soft 5 бит) в строке памяти. Ну и мо мере надобности автоматом извлекать нужные данные. Стало чуть легче (теперь ведь работает с 84×5=420 битным регистром), но автомат чтения и записи крайне сложный и непонятный. Интуитивно хочется поставить двухпортовую память и микроблейзер. Демодулятор пишет в память, а проц декодирует. В этом случае программа декодера становится похожа на программу на с#, а значмт более понятна. Ну мне так кажется. Вот у меня и вопрос. А какую архитектуру выбрать?

Или вся слодность у меня из за неправильного алгоритма декодирования?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

27 minutes ago, Anton1990 said:

Спасибо, конечно, но почти ничего не понял.

Или вся слодность у меня из за неправильного алгоритма декодирования?

Хмм, вы сами написали программную модель декодера или вам тупо дали код? Очень уж странные вопросы. 

Для того чтобы вести конструктивный диалог, нужно знать:

1. какой код вы используете и его проверочная матрица?

2. какой алгоритм декодирования вы реализовали в программной модели?

3. Какие требуются входные и выходные интерфейсы декодера?

По сути вашего описания: судя по тому что у вас мягкое решение, вы декодируете не перестановкой битов,  где то у вас там есть горизонтальный и вертикальный шаг декодирования.  Декодирование  у вас итеративное, поэтому нужно будет где-то сделать аккумулятор метрик или хранить node после вертикального и горизонтального шага.  Да, если вы работаете с 5 бит метриками и размером node в 5 бит, то у вас всё умножается на 5.

Без четкого ответа на вопросы 1-3, диалог не сложится. 

 

PS. Можно все сделать на микробе, но скорость декодирования у вас будет маленькая. Вас это точно устроит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что значит какой код? Ldpc?

Матрица известна. Каких то особенностей кода нам не известно.

Алгоритм декодирования самодельный итеративный (вычисление llr и их суммирование  и т.д.).

Я так понимаю, что основная проблема у меня из-за самопальности алгоритма декодирования. Отсюда и сложность его реализации. Есть мнение его реализовать на компьютере в реалтайме. На какую скорость выйду пока непонятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 minutes ago, Anton1990 said:

А что значит какой код? Ldpc?

LPDC код со случайной матрицей, структурированной, квазициклической?

Quote

Матрица известна. Каких то особенностей кода нам не известно.

матрицу приведите или укажите стандарт откуда вы ее взяли. 

Quote

Алгоритм декодирования самодельный итеративный (вычисление llr и их суммирование  и т.д.).

да он у всех самодельный по графу таннера, а вот как это разложить на железо, зависит от структуры проверочной матрицы. 

ЗЫ. LDPC код это собирательное название кодов с МППЧ (малой плотностью проверок на четность), а вариантов этих кодов может быть множество, как и способов декодирования. Архитектура LDPC декодера зависит от матрицы кода. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Матницу я бы привел, да боюсь пАпасть под раздачу. Но она похоже циклическая. По крайней мере входное сообщение из 2016 точек я нарезаю по 84 точки (т.е. получаем 24 строки).  Каждую из этих строчек сдвигаю циклически в соответствии с матрицей. Получается удобно обрабатывать по столбцам. Ну как то так. Стандарт неизвестен. Подозреваю что это что то не стандартное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 minutes ago, Anton1990 said:

Матницу я бы привел, да боюсь пАпасть под раздачу. Но она похоже циклическая. По крайней мере входное сообщение из 2016 точек я нарезаю по 84 точки (т.е. получаем 24 строки).  Каждую из этих строчек сдвигаю циклически в соответствии с матрицей. Получается удобно обрабатывать по столбцам. Ну как то так. Стандарт неизвестен. Подозреваю что это что то не стандартное.

Вот такая матрица? С параметрами из стандарта на Wimax? Секрет полишинеля. Это QC-LDPC код, на основе базовой матрицы сдвигов единичной матрицы.  Декодируется элементарно:  разбиваете ваше поле на CxT элементы, где T=24, C=4/6/8/12 в соответствии с вашей скоростью кодирования. Раскладываете ваше данные в блочную память. А дальше, смотря какая степень параллелизма вам нужна, типовые варианты на одной памяти, на С памятях (параллелизм по C), на T памятях (параллелизм по T) на C*T памятях и т.д. Это для 2D декодирования. Конечные автоматы там - три счетчика по z=84,C и Т смотря какая будет степень параллелизма. Пока каждая память будет работать с одной метрикой, генератор адреса простой счетчик. Скорость декодирования зависит от параллелизма. Если сделаете C*T на памяти с размером одной метрики, то получите ~84 такта на полуитерацию или 168 тактов на полный проход. Для 10 итераций, на частоте ядра 200МГц, скорость декодирования будет 240Мб/с. Все расчеты без латентности. 

PS. Вот с этого и надо было начинать, чтож приходится все клещами из вас вытягивать.

PPS. В сети куча статей как строить аппаратные QC-LDPC декодеры. 

PPPS. По ссылке есть там такой декодер. до 800Мб/с. алгоритм normalized 2D MinSum, на layered decoding не стал переделывать открытый код, хотя это выгоднее. 

Wimax.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Клещи тут ни причем. Просто я не знаю какие вопросы и как их правильно задавать. Опвта маловато.

Нужно всё переварить. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В свое время при реализации LDPC для DVB-T2 на FPGA мне сильно помогла вот эта статья. Не факт, что в Вашем случае применимо, но есть вероятность, что поможет)

FPGA Implementation of LDPC Decoder in DVB.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/10/2022 at 11:04 AM, Anton1990 said:

Клещи тут ни причем. Просто я не знаю какие вопросы и как их правильно задавать. Опвта маловато.

Нужно всё переварить. Спасибо.

Посмотрите в сторонуMATLAB  https://www.mathworks.com/products/matlab.html. В данном пакете есть готовые реализации LDPC, что даст Вам возможность самому все посмотреть и попробовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...