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

Обсуждение вопросов применения/декодирования полярных кодов

Плюсы подойдут? Этот проект делают очень разумные люди, поэтому можно смело доверять.

http://aff3ct.github.io

Есть ещё пара-тройка проектов на MATLAB. Тоже серьёзные люди делают, по стандарту.

 

UPD.: Вспомнил, что видел и на С: https://github.com/tavildar/Polar

 

благодарю, а то завис на осознании где же в декодерах итеративное декодирование, вроде оно есть, а так явно не видно) С кодом будет проще разобраться что к чему)

 

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


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

благодарю, а то завис на осознании где же в декодерах итеративное декодирование, вроде оно есть, а так явно не видно) С кодом будет проще разобраться что к чему)

Всё-таки на C++ последний пример. Не люблю его в алгоритмических применениях. Сложнее воспринимать. Хотя шаблоны, конечно, удобны. Хочешь double, хочешь float сходу и т.д.

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


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

Всё-таки на C++ последний пример. Не люблю его в алгоритмических применениях. Сложнее воспринимать. Хотя шаблоны, конечно, удобны. Хочешь double, хочешь float сходу и т.д.

Да я любой код читаю, разберемся) Наверное стоит тему разделить и сделать отдельную по декодированию полярных кодов.

 

И чистоты русского языка ради, интересно, почему коды на основе поляризующего преобразования, называют полярными а не поляризующими.)

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


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

Согласен. Если можно, то с самого начала обсуждения полярных кодов в 15-м году откусить и перенести.

 

Подозреваю, что так Трифонов перевел первым, а потом остальные подхватили.

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


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

Начал плотно заниматься полярными кодами, подошел к написанию RTL кодера и возник вот такой вопрос.

Во многих статьях по быстрым и low complexity кодерам, заявляются дикие цифры кодирования. Гигабит и выше. Все так, если рассматривать параллелизацию самого ядра вычисления полярного преобразования. Тактовая под 125-250, по 8/16/32 бита за такт.

Но, в статьях абсолютно опущен момент, что для того что бы запустить ядро, нужно выполнить нехилую предварительную и возможно последующую обработку. А именно: посчитать CRC(если надо), разложить биты данных и CRC в надежные подканалы, заморозить не надежные каналы, пропустить через ядро преобразования, собрать все в бит-реверсивном порядке (ну или предварительно перевести данные в бит реверсивный порядок).

Для понимания, вот численный пример. Блок 256 бит, данные 128. Индексы надежных каналов (рассчет по методу Бхаттачарьи, для e = 0.32)

   256   255   254   252   248   240   224   192   128   253   251   250   247   246   244   239   238   236   232   223   222
   220   216   191   190   208   188   184   176   127   126   124   249   120   245   160   243   237   242   235   234   231
   221   230   112   219   218   228   215   214   212   189   207   187   206   186   183   204    96   182   180   175   200
   174   125   172   123   122   119   159   118   168   241    64   158   233   116   229   156   111   217   227   110   213
   226   211   108   152   205   210   185   203    95   181   202    94   104   179   199   173   178   144   198    92   171
   121   170   196   117   167    63   157    88   115   166    62   155   109   114   154   225   164   107    60   151   209
    80   106

а если добавить CRC 8 бит

   256   255   254   252   248   240   224   192   128   253   251   250   247   246   244   239   238   236   232   223   222
   220   216   191   190   208   188   184   176   127   126   124   249   120   245   160   243   237   242   235   234   231
   221   230   112   219   218   228   215   214   212   189   207   187   206   186   183   204    96   182   180   175   200
   174   125   172   123   122   119   159   118   168   241    64   158   233   116   229   156   111   217   227   110   213
   226   211   108   152   205   210   185   203    95   181   202    94   104   179   199   173   178   144   198    92   171
   121   170   196   117   167    63   157    88   115   166    62   155   109   114   154   225   164   107    60   151   209
    80   106   150   201    93   103    56   177   143   197

И по выходу выдать блок вот в таком битовом порядке

     1   129    65   193    33   161    97   225    17   145    81   209    49   177   113   241     9   137    73   201    41   169   105   233    25
   153    89   217    57   185   121   249     5   133    69   197    37   165   101   229    21   149    85   213    53   181   117   245    13   141
    77   205    45   173   109   237    29   157    93   221    61   189   125   253     3   131    67   195    35   163    99   227    19   147    83
   211    51   179   115   243    11   139    75   203    43   171   107   235    27   155    91   219    59   187   123   251     7   135    71   199
    39   167   103   231    23   151    87   215    55   183   119   247    15   143    79   207    47   175   111   239    31   159    95   223    63
   191   127   255     2   130    66   194    34   162    98   226    18   146    82   210    50   178   114   242    10   138    74   202    42   170
   106   234    26   154    90   218    58   186   122   250     6   134    70   198    38   166   102   230    22   150    86   214    54   182   118
   246    14   142    78   206    46   174   110   238    30   158    94   222    62   190   126   254     4   132    68   196    36   164   100   228
    20   148    84   212    52   180   116   244    12   140    76   204    44   172   108   236    28   156    92   220    60   188   124   252     8
   136    72   200    40   168   104   232    24   152    88   216    56   184   120   248    16   144    80   208    48   176   112   240    32   160
    96   224    64   192   128   256

И вот как предполагается выполнять такие операции на подобных скоростях? Может быть, кто встречал статьи где описывается именно вот такой момент?

Мне сложно представить как это можно сделать на широком слове 8/16/32 бита. А на однобитном входе, предел  по скорости будет порядка 250-300 мегабит. Но это совсем не интересные цифры)

Или предполагается несколько однобитных блоков подготовки данных и один быстрый движок который их окучивает?

Спасибо

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


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

Тоже хотелось бы почитать вот эти две статьи из ieee по теме:

Fast Polar Decoders: Algorithm and Implementation

A High-Throughput Energy-Efficient Implementation of Successive Cancellation Decoder for Polar Codes..

Возможно, кто-то их уже уже скачал.. поделитесь, если не жалко!

Заранее, спасибо!

 

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


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

2 часа назад, blackfin сказал:

Тоже хотелось бы почитать вот эти две статьи из ieee по теме:

Fast Polar Decoders: Algorithm and Implementation

A High-Throughput Energy-Efficient Implementation of Successive Cancellation Decoder for Polar Codes..

Возможно, кто-то их уже уже скачал.. поделитесь, если не жалко!

Заранее, спасибо!

 

https://cyber.sci-hub.se/MTAuMTEwOS90Y3NpLjIwMTYuMjUyNTAyMA==/dizdar2016.pdf

https://dacemirror.sci-hub.se/journal-article/2b8dec72315a8691707cedb1dbff7606/sarkis2014.pdf

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


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

15 hours ago, blackfin said:

thermit, спасибо!

я нашел пару диссертаций, там на пальцах объясняется что к чему и почему полярные коды надо декодировать именно так, как заявлял Арикан. Вообще довольно забавная тема для раскидывания мозгами: хорошая гибкость кода (произвольные скорости кодирования, широкий выбор длины блока), но совершенно не подходящая под ПЛИС структра (если делать списочное декодирование с размером списка 16 и CRC)

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


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

3 hours ago, des00 said:

я нашел пару диссертаций, там на пальцах объясняется что к чему..

Поделитесь?

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


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

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


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

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

Если посмотреть на таблицы надежности битов для кодов 8/16/32к, видно что там есть надежности вида 1е-56 и т.д. ))) матлаб сортирует как надо, но вот есть ли практическая разница между битовым каналом 1е-56 и например 1е-20.

Может быть имеет смысл разбить группы битов на группы бит с надежностью  ...1e-8], (1e-8....(1-1e-8))...[1-1e-8....] , тогда по идее можно сделать специальный байтовый фреймер и разогнать до премлимых скоростей.

Или глупая идея?

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


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

Всем доброго. А есть кто нибудь, кто делал декодеры со списочным/стековым декодированием? Пообщаться бы. Можно в личке)

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


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

симпатичная презентация по полярным кодам. анимация SC декодера  http://www.alexiosbalatsoukas.com/papers/16ISCASPolarOverviewSlides.pdf

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


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

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

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

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

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

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

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

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

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

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