Anton1990 0 9 марта, 2022 Опубликовано 9 марта, 2022 · Жалоба Всем привет. Интересует подход к созданию soft декодера LDPC. Собственно сам алгоритм разработан (проверен на программной реализации), но его реализация на плис какая-то сложная. Если делать на регистрах, то все легко и понятно, но для плис неподъемна. Делать на памяти можно, но крайне геморойно разрабатывать автоматы чтения и записи в память. Есть подозрение что нужно делать на каком либо процессоре (например,микроблайзер), но то же много вопросов. А отсюда вопрос а как кто делает? И как правильно? Если это важно, то длина блока 2016. Заранее спасибо за ответы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 марта, 2022 Опубликовано 9 марта, 2022 · Жалоба и там еще есть wimax LDPC на другой архитектуре. Автоматы там на 8-16 состояний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 марта, 2022 Опубликовано 9 марта, 2022 · Жалоба 2 hours ago, Anton1990 said: И как правильно? Если это важно, то длина блока 2016. ИМХО, надо смотреть что за код. Если QC-LDPC то отображение и декомпозиция нативная. А дальше 2 варианта - либо сверхширокий барреловский сдвигатель либо кучка узких. Ну и еще надо учесть метод декодирования если у вас 2D-min-sum то один вариант, если вы ушли на послойное декодирование (что в принципе ловчее) то другой вариант. Если у вас какой-нибудь код со случайной матрицей, совсем без регулярной структуры, тогда ой. Но, судя по длине в 2016, там что-то типа Wimax QC-LDPC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Anton1990 0 10 марта, 2022 Опубликовано 10 марта, 2022 · Жалоба 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 битным регистром), но автомат чтения и записи крайне сложный и непонятный. Интуитивно хочется поставить двухпортовую память и микроблейзер. Демодулятор пишет в память, а проц декодирует. В этом случае программа декодера становится похожа на программу на с#, а значмт более понятна. Ну мне так кажется. Вот у меня и вопрос. А какую архитектуру выбрать? Или вся слодность у меня из за неправильного алгоритма декодирования? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 10 марта, 2022 Опубликовано 10 марта, 2022 · Жалоба 27 minutes ago, Anton1990 said: Спасибо, конечно, но почти ничего не понял. Или вся слодность у меня из за неправильного алгоритма декодирования? Хмм, вы сами написали программную модель декодера или вам тупо дали код? Очень уж странные вопросы. Для того чтобы вести конструктивный диалог, нужно знать: 1. какой код вы используете и его проверочная матрица? 2. какой алгоритм декодирования вы реализовали в программной модели? 3. Какие требуются входные и выходные интерфейсы декодера? По сути вашего описания: судя по тому что у вас мягкое решение, вы декодируете не перестановкой битов, где то у вас там есть горизонтальный и вертикальный шаг декодирования. Декодирование у вас итеративное, поэтому нужно будет где-то сделать аккумулятор метрик или хранить node после вертикального и горизонтального шага. Да, если вы работаете с 5 бит метриками и размером node в 5 бит, то у вас всё умножается на 5. Без четкого ответа на вопросы 1-3, диалог не сложится. PS. Можно все сделать на микробе, но скорость декодирования у вас будет маленькая. Вас это точно устроит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Anton1990 0 10 марта, 2022 Опубликовано 10 марта, 2022 · Жалоба А что значит какой код? Ldpc? Матрица известна. Каких то особенностей кода нам не известно. Алгоритм декодирования самодельный итеративный (вычисление llr и их суммирование и т.д.). Я так понимаю, что основная проблема у меня из-за самопальности алгоритма декодирования. Отсюда и сложность его реализации. Есть мнение его реализовать на компьютере в реалтайме. На какую скорость выйду пока непонятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 10 марта, 2022 Опубликовано 10 марта, 2022 · Жалоба 26 minutes ago, Anton1990 said: А что значит какой код? Ldpc? LPDC код со случайной матрицей, структурированной, квазициклической? Quote Матрица известна. Каких то особенностей кода нам не известно. матрицу приведите или укажите стандарт откуда вы ее взяли. Quote Алгоритм декодирования самодельный итеративный (вычисление llr и их суммирование и т.д.). да он у всех самодельный по графу таннера, а вот как это разложить на железо, зависит от структуры проверочной матрицы. ЗЫ. LDPC код это собирательное название кодов с МППЧ (малой плотностью проверок на четность), а вариантов этих кодов может быть множество, как и способов декодирования. Архитектура LDPC декодера зависит от матрицы кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Anton1990 0 10 марта, 2022 Опубликовано 10 марта, 2022 · Жалоба Матницу я бы привел, да боюсь пАпасть под раздачу. Но она похоже циклическая. По крайней мере входное сообщение из 2016 точек я нарезаю по 84 точки (т.е. получаем 24 строки). Каждую из этих строчек сдвигаю циклически в соответствии с матрицей. Получается удобно обрабатывать по столбцам. Ну как то так. Стандарт неизвестен. Подозреваю что это что то не стандартное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 10 марта, 2022 Опубликовано 10 марта, 2022 · Жалоба 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 не стал переделывать открытый код, хотя это выгоднее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Anton1990 0 10 марта, 2022 Опубликовано 10 марта, 2022 · Жалоба Клещи тут ни причем. Просто я не знаю какие вопросы и как их правильно задавать. Опвта маловато. Нужно всё переварить. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_AZ 0 17 марта, 2022 Опубликовано 17 марта, 2022 · Жалоба В свое время при реализации LDPC для DVB-T2 на FPGA мне сильно помогла вот эта статья. Не факт, что в Вашем случае применимо, но есть вероятность, что поможет) FPGA Implementation of LDPC Decoder in DVB.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hitower1 0 13 августа, 2022 Опубликовано 13 августа, 2022 · Жалоба On 3/10/2022 at 11:04 AM, Anton1990 said: Клещи тут ни причем. Просто я не знаю какие вопросы и как их правильно задавать. Опвта маловато. Нужно всё переварить. Спасибо. Посмотрите в сторонуMATLAB https://www.mathworks.com/products/matlab.html. В данном пакете есть готовые реализации LDPC, что даст Вам возможность самому все посмотреть и попробовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться