Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LDPC код из стандарта DVB-S2
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Страницы: 1, 2
andyp
Цитата(Dr.Alex @ Feb 20 2014, 04:00) *
А вам и не нужно быть уверенным, я вам это просто сообщаю как факт. В нормал фреймах градусы чекнодов одинаковы, только у нулевого градус на единицу меньше. Почему вы насчитали для нулевого 4 вместо 6 я тоже знаю, но уж сами разберитесь (если вам вообще это нужно конечно..)


Поутру разобрался, хотя и не нужно было sm.gif. Еще 2 ребра получаются от parity nodes.
Neznaika
Всем привет!
Подниму в очередной раз эту тему...
На данный момент загвоздка в реализации блока обработки метрик CN-узла.
В прилагаемом документе есть описание MSA-алгоритма (стр.27) и схемы блоков его реализующих (стр.77-78). По формулам алгоритма особых вопросов нет, кроме треугольничка означающего видимо дополнительную коррекцию при вычислении, приближающую MSA к алгоритму SPA. Как я понимаю это осуществляется при помощи блоков BOXPLUS и BOXMINUS. Если в BOXPLUS еще как то можно разобраться и увидеть смысл, то BOXMINUS для меня стал загадкой. Для чего реализовывать операцию (a+б)-(a-б)=2б? И в целом... каким таким образом можно последовательным путем находить минимумы среди набора метрик за исключением одной... их несколько раз что ли нужно прогонять через блок обработки?
AspireSky
Добрый день уважаемые форумчане
Помогите плиз.. с таким вопросом . Реализовал по Морелосе-Сарагосе (который идет в приложении) программный декодер LLR LDPC (мягкий вход/жесткий выход, расчеты по видимому с плавающей точкой). Но меня очень не устраивает скорость. Подскажите может кто в теме мягкие схемы декодирования пригодные для программной реализации или хотябы литературу по которой можно реализовать (желательно кто на практике проверил).

Си-код прикрепил в виде файла-txt
Maverick
Цитата(AspireSky @ Jun 29 2014, 14:21) *
Добрый день уважаемые форумчане
Помогите плиз.. с таким вопросом . Реализовал по Морелосе-Сарагосе (который идет в приложении) программный декодер LLR LDPC (мягкий вход/жесткий выход, расчеты по видимому с плавающей точкой). Но меня очень не устраивает скорость. Подскажите может кто в теме мягкие схемы декодирования пригодные для программной реализации или хотябы литературу по которой можно реализовать (желательно кто на практике проверил).

Си-код прикрепил в виде файла-txt

посмотрите в сторону Min-Sum Algorithm
AspireSky
Цитата(Maverick @ Jun 29 2014, 18:04) *
посмотрите в сторону Min-Sum Algorithm


нет ли у вас статьи по которой можно было бы реализовать, простой для понимания
Neznaika
Всем привет! Подниму ка я снова эту тему. Сделал модель LDPC кодека на C++ по DVB-S2 стандарту, опираясь на структуры предложенные Falcao. Его статья прикреплена к посту. Так вот встала проблема со сходимостью алгоритма. В прикрепленном рисунке представлена архитектура блока обрабатывающего ветви в CN-режиме. В этом же режиме происходит одновременное обновление как памяти сообщений проверочных узлов CN, так и памяти сообщений проверочных узлов PN. Причем как я понимаю в представленной архитектуре режимы CN и VN для PN здесь объединены. В регистре Reg MEM сохраняются сообщения Pm-1, обновляемые после сложения LrPNm со значениями из канальной памяти Channel (LpNm) на каждом такте. Так вот... вычисление LpNm-1 происходит благодаря сложению LrNm-1 со значением обновленной величины из Reg Mem. Так вот сделав вычисление LpNm-1 и обновив сообщение в памяти PN Message получил определенную сходимость алгоритма... но на мой взгляд не достаточную. Например, если на входе декодера 775 ошибок в 7200 информационных битах (R=4/9. N=16400 бит), то по итерациям декодер будет исправлять ошибки следующим образом: 775-> 424, 267, 162, 95, 64, 48, 32, 26... и потом с 16-ой итерации остается постоянно 12 ошибок. При в двое меньшем количестве ошибок получаем чистую работу декодера, т.е. 368->53, 12, 1, 0... 4 итерации и 0 ошибок. Чуть ранее, копаясь в ошибках алгоритма добавлял к LqPNm соответствующие канальные значения LpNm, а сложения с Reg Mem не делал. В результате сходимость алгоритма выглядела более внушительно: 775-> 424, 237, 118, 51, 21, 3, 0... Вроде бы логически ошибки не происходит, идет независимое обновление сообщений Pm и Pm-1 во внешней памяти PN message и внутренней памяти Reg Mem. Кто-нибудь получал похожие результаты или может есть у кого то какое то мнение на этот счет? Было бы интересно докопаться до истины...
Dr.Alex
Нет возможности (да наверно и необходимости) разбираться в деталях вашей реализвции, но............ кто ж так измеряет "сходимость"??
И что это вообще такое? И зачем у вас подсчитывается кол-во ошибок?? Вы же не рид-соломон делаете..

На декодер нужно подавать сигнал + гаусовский шум, и считать не "ошибки", а сигнал/шум, и сравнивать его с пределом для данного кода, который известен.

Когда окажется, что ваш декодер обеспечивает этот предел, тогда уже можно будет говорить о кол-ве итераций, при которм тот или иной SNR достигается.
petrov
Цитата(Neznaika @ Dec 9 2014, 17:13) *
Было бы интересно докопаться до истины...


http://en.wikipedia.org/wiki/EXIT_chart
Neznaika
В моделе на С++ я ко входному сигналу декодера добавляю гауссовский шум с помощью функции RandG и дополнительно смотрю сколько ошибок получается. Например, если без шума входной сигнал А=[-0.5, +0.5], то с шумом A+RandG(0,N). Допустим N=0.4, то какое здесь будет отношение сигнал/шум? Я слышал о 3 сигмах и могу предположить, что с/ш=20Log(0.5/(3*(0.4^2)))=0.3 дБ... Возможно я и ошибаюсь, но не в этом суть... я лишь хотел узнать, кто копался с LDPC по стандарту DVB-S2 и имеет какое то представление о работе алгоритма. Было бы любопытно сравнить полученные результаты... Предложенные в найденных мной статьях BER-ы лишь частично удовлетворяют мое любопытство, так как зачастую не указывается число итераций или рассмотрен блок длинной в 64800 бит.
des00
в матлабе же есть DVB-S2 LDPC кодеры, собрать стенд дело простое и удовлетворить все что хотите
Dr.Alex
Цитата(Neznaika @ Dec 10 2014, 10:41) *
Возможно я и ошибаюсь, но не в этом суть...


Замечательно. Вы не знаете, насколько далеко от предела работает ваш "декодер", то есть, фактически, работает ли он вообще, но суть, оказывается, не в этом.. :-))))


Цитата(Neznaika @ Dec 10 2014, 10:41) *
я лишь хотел узнать, кто копался с LDPC по стандарту DVB-S2 и имеет какое то представление о работе алгоритма. Было бы любопытно сравнить полученные результаты...


Как вы можете сравнить результаты, если у вас их нет? У меня написано несколько разных декодеров, и я могу назвать децибелы и итерации. Это и есть результат.

Я не знаю что такое RandG, но по всей видимости N=0.4 это и есть сигма. А что там дальше за бред? Почему сигма возводится в квадрат, а амплитуда сигнала при этом НЕ возводится? Сигнал было бы удобнее сделать от -1 до +1, тогда его мощность единица.
В вашем случае SNR = 20log(0.5/0.4)=1.9 дБ.
Neznaika
Цитата(Dr.Alex @ Dec 10 2014, 11:08) *
Замечательно. Вы не знаете, насколько далеко от предела работает ваш "декодер", то есть, фактически, работает ли он вообще, но суть, оказывается, не в этом.. :-))))




Как вы можете сравнить результаты, если у вас их нет? У меня написано несколько разных декодеров, и я могу назвать децибелы и итерации. Это и есть результат.

Я не знаю что такое RandG, но по всей видимости N=0.4 это и есть сигма. А что там дальше за бред? Почему сигма возводится в квадрат, а амплитуда сигнала при этом НЕ возводится? Сигнал было бы удобнее сделать от -1 до +1, тогда его мощность единица.
В вашем случае SNR = 20log(0.5/0.4)=1.9 дБ.


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

Как я заметил количество ошибок во входном сигнале несколько зависит от входного отношения с/ш. На мой взгляд не трудно провести соответствие между этими величинами и итоговым результатом.

Вот что такое RandG вы действительно можете не знать... следовательно не можете знать, какие параметры там используются. За ваше предположение спасибо) Сигнал амплитудой 0.5 я сделал потому, что входные значения декодера у меня представлены в дополнительном коде и должны находится в диапазоне [-1,1). Вместе с шумом такой сигнал на мой взгляд более равномерно находится в нем, хотя некоторые выборки на копейку выходят за него, что контролируется.
Dr.Alex
Цитата(Neznaika @ Dec 10 2014, 11:49) *
Конечно я не знаю, ведь только собрал декодер и приступил к его изучению.. о том, что он как то работает я сужу по его способности исправлять ошибки.


Цитата(Neznaika @ Dec 10 2014, 11:49) *
Как я заметил количество ошибок во входном сигнале несколько зависит от входного отношения с/ш. На мой взгляд не трудно провести соответствие между этими величинами и итоговым результатом.


Цитата(Neznaika @ Dec 10 2014, 11:49) *
Сигнал амплитудой 0.5 я сделал потому, что входные значения декодера у меня представлены в дополнительном коде и должны находится в диапазоне [-1,1).


Мда, похоже, наставить вас на путь истинный только патриарху всея Руси под силу.

Видимо, бесполезно также объяснять, что на декодер подаются LLR, а вовсе не то что вы приняли из канала. Конечно, в случае гауссова шума подсчёт LLR это всего лишь умножение на константу, но результат почти всегда будет больше 1, иногда намного. Поэтому какой бы "дополнительный код" у вас не был, должно быть известно, сколько бит отводится под целую часть, и сколько под дробную.
Neznaika
Цитата(Dr.Alex @ Dec 10 2014, 13:09) *
Мда, похоже, наставить вас на путь истинный только патриарху всея Руси под силу.

Видимо, бесполезно также объяснять, что на декодер подаются LLR, а вовсе не то что вы приняли из канала. Конечно, в случае гауссова шума подсчёт LLR это всего лишь умножение на константу, но результат почти всегда будет больше 1, иногда намного. Поэтому какой бы "дополнительный код" у вас не был, должно быть известно, сколько бит отводится под целую часть, и сколько под дробную.


Из всего выше приведенного мне понравилась идея des00 о сборе стенда в матлабе, лицензию на который вчера оплатили. Надеюсь удастся прояснить некоторые детали.

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

Речь шла о разной сходимости алгоритма при 2-х разных вариантах его реализации, потому я не сильно заморачивался в идеальности входного сигнала декодера. Если вам не трудно, то поясните, пожалуйста, как с вашей точки зрения в моделе должны вычисляться LLR, подаваемые на вход декодера. Пусть разрядность LLR 5 бит, 1 бит под целую и 4 бита под дробную части. Как я понимаю... 0х10 - это -1.0, а 0x0f - это 0.9375.
Dr.Alex
Цитата(Neznaika @ Dec 10 2014, 13:32) *
разрядность LLR 5 бит, 1 бит под целую и 4 бита под дробную части. Как я понимаю... 0х10 - это -1.0, а 0x0f - это 0.9375.


Неправильно канешна. Это значит у вас УЖЕ диапазон от -2 до +2. Но этого мало, в статьях видел что при менее чем 6-битной арифметике требования стандарта вообще не достигаются.

LLR = 2x/sigma^2, где х выход канала.

UPD: Впрочем, если в доке формат называется 1.4, то значит диапазон от -1 до 1.
Neznaika
Цитата(Dr.Alex @ Dec 10 2014, 13:44) *
Неправильно канешна. Это значит у вас УЖЕ диапазон от -2 до +2. Но этого мало, в статьях видел что при менее чем 6-битной арифметике требования стандарта вообще не достигаются.

LLR = 2x/sigma^2, где х выход канала.

UPD: Впрочем, если в доке формат называется 1.4, то значит диапазон от -1 до 1.


Что касается выбранной разрядности, то могу лишь сослаться на Falcao по чьим статьям и реализую проект. Там не указан формат.. просто дана оптимальная разрядность входного сигнала на декодер в 5 бит.

По поводу LLR... пусть из кодера идут данные... C=1, 0, 1... модулятор их преобразует в Ch=-1, 1, -1... далее добавляем шум с помощью функции RandG, одним параметром из которого является sigma, т.е. Cn=Сh+RandG(0,sigma), далее получаем LLR=2*Cn/(sigma^2)... я вас правильно понял?
Ну и в этом случае входное отношение с/ш=20Log(1.0/sigma)?
Dr.Alex
Да. Или проще —20log(sigma)
Tpeck
Всем доброго времени суток.
Вот и меня настигла данная задача :0)
Помогите разобраться где я не прав.
Имеем DVBS2, R=1/4 и R=9/10.
Для R=1/4.
Грубо говоря к каждой CN подходит 4 узла VN или от каждая VN (в среднем) участвует в вычисление 3 CN.
Тогда для расчета CN(j,i) необходимо произвести 48600*3*4 условных операций в результате получим 48600*4 CN.
Для обновления 3*64800 VN(i,j) необходимо произвести 4*3*64800 условных операции.

Для R=9/10.
Грубо говоря к каждой CN подходит 30 узлов VN или от каждая VN (в среднем) участвует в вычисление 3 CN.
Тогда для расчета CN(j,i) необходимо произвести 6480*29*30 условных операций в результате получим 6480*30 CN.
Для обновления 3*64800 VN(i,j) необходимо произвести 30*3*64800 условных операции.
У меня получилось что для одной итерации 9/10 необходимо произвести ~ в 10 раз больше условных операций, чем для скорости R=1/4.
Что-то мне подсказывает, что я сильно не прав, но вот где не прав. Понять не могу.
Помогите пожалуйста. Спасибо.
PS: Хотя если что пропускная способность у всех скоростей -+20%, а R=9/10 данных отдает в 3.9 раза больше, то все равно не сходится....
Ведь пропускная способность у них одинаковая

Статья в прикрепленном файле.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.