Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LDPC, turbo-code
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
nowatt
Здравствуйте, возникла проблема с написанием программной реализации LDPC и турбо-кодов для ДСК. Если у кого-то имеется реализация этих кодов на языке С, и вы можете ею поделиться, или можете на примере показать алгоритм кодирования и декодирования или скинуть полезную для дела статью, в общем, все, что может помочь - буду безмерно благодарен.
Serg76
В очередной раз хотелось бы напомнить о существовании поиска, темы на форуме всплывали неоднократно, особенно касательно турбокодов, да и по LDPC материалы проскакивали. ну а исходники, тут уж вряд-ли...
dcs
Цитата(nowatt @ Mar 20 2014, 19:41) *
или можете на примере показать алгоритм кодирования и декодирования или скинуть полезную для дела статью

а что там показывать то. гуглите Fast Chase, Chase-Pyndyah

ничего там сложного нету

тыщщу раз турбики обсуждались. serg76 правильно сказал - поиском пользуйтесь
des00
на опенкоресах есть проект LDPC, ЕМНИП там матлабовские скрипты шли в комплекте
Dr.Alex
Вообще нет никакого смысла в ярлыках "лдпц" или "турбо", есть смысл только говорить о конкретных кодах с конкретными параметрами и конкретных алгоритмах декодирования..
neo-n
Добрый день.
Имеется на входе жесткие решения. Сигнал выровняный по синхронизации (и по нейже устранена фазовая неоднозначность).
Вопрос заключается в следующем как от жестких решений перейти к мягким либо к метрикам LLR для того чтобы использовать алгоритм Чейза?
Илиже его можно использовать и с жесткими решениями?
(Декодирую турбокод)
Maverick
Цитата(neo-n @ Jul 23 2014, 10:28) *
Добрый день.
Имеется на входе жесткие решения. Сигнал выровняный по синхронизации (и по нейже устранена фазовая неоднозначность).
Вопрос заключается в следующем как от жестких решений перейти к мягким либо к метрикам LLR для того чтобы использовать алгоритм Чейза?
Илиже его можно использовать и с жесткими решениями?
(Декодирую турбокод)

если я правильно понимаю, то почитайте это (Витерби) (глава/раздел 3)
обратите внимание на "Table 3–4. Soft Symbol Input Representation"
Serg76
Цитата(neo-n @ Jul 23 2014, 10:28) *
Илиже его можно использовать и с жесткими решениями?
(Декодирую турбокод)

Не получиться, для Чейза нужен "мягкий" выход
neo-n
Тоесть при жестких решениях можно только лишь использовать синдромный декодер ?
Подскажите еще пожалуйсто вот какой вопрос если у меня есть отсчеты I/Q как от них перейти к мягким решениям и к LLR?
Serg76
Цитата(neo-n @ Jul 23 2014, 11:28) *
Тоесть при жестких решениях можно только лишь использовать синдромный декодер ?
Подскажите еще пожалуйсто вот какой вопрос если у меня есть отсчеты I/Q как от них перейти к мягким решениям и к LLR?

Необязательно только синдромный, все зависит от конкретного типа кода, LLR вычисляется для каждого бита символа на основании принятой пары I/Q квадратурных составляющих для определенной сигнальной конструкции (constellation). с алгеброй логарифмов в качестве метрики работать проще, чем с линейной. на форуме выкладывал даташит с методикой расчета LLR, поищите.
neo-n
Конкретно для турбокодов образованых с помощью кода хемминга только синдромный?
Serg76
Цитата(neo-n @ Jul 23 2014, 12:06) *
Конкретно для турбокодов образованых с помощью кода хемминга только синдромный?

Можно мажоритарно (bit flipp) еще.
neo-n
Спасибо огромное за помощь и последнее что интересует как из I/Q перейти просто к мягким решениям
Serg76
Цитата(neo-n @ Jul 23 2014, 12:30) *
Спасибо огромное за помощь и последнее что интересует как из I/Q перейти просто к мягким решениям

Для QPSK это и будут мягкие решения , ничего делать не надо, для более высоких индексов модуляции необходим дополнительный расчет, о котором я говорил выше
andyp
Цитата(Serg76 @ Jul 23 2014, 12:06) *
Не получиться, для Чейза нужен "мягкий" выход


К Чейзу его вполне можно прикрутить. Идея в том, что при в части кодовых слов-кандидатов информационные битики не равны и считается, что наиболее близкие кодовые слова попали в набор слов-кандидатов. Вобщем, как правильно сказал dcs, нужно гуглить Chase-Pyndyah.
Serg76
Цитата(andyp @ Jul 23 2014, 18:44) *
К Чейзу его вполне можно прикрутить. Идея в том, что при в части кодовых слов-кандидатов информационные битики не равны и считается, что наиболее близкие кодовые слова попали в набор слов-кандидатов. Вобщем, как правильно сказал dcs, нужно гуглить Chase-Pyndyah.


Можно подробнее, если Вас не затруднит
andyp
Цитата(Serg76 @ Jul 23 2014, 20:36) *
Можно подробнее, если Вас не затруднит


Для рассчета мягкого решения для каждого информационного бита могут быть использованы слова-кандидаты, используемые алгоритмом Чейза. Чтобы не играть в испорченный телефон приложил статью.
Serg76
Цитата(andyp @ Jul 23 2014, 20:20) *
Для рассчета мягкого решения для каждого информационного бита могут быть использованы слова-кандидаты, используемые алгоритмом Чейза. Чтобы не играть в испорченный телефон приложил статью.

Хе, мы, наверное, о разном: Вы мне рассказываете о процедуре расчета мягкого выхода декодера, который нужен в процедуре итеративного декодирования, а neo-n под мягким решением подразумевает мягкий выход демодулятора (или, соответственно, мягкий вход декодера). Чейз не может быть использован для двоичного канала, ибо все биты в таком случае являются равновероятными, а для работы алгоритма требуется иметь информацию о достоверности каждого бита, иначе невозможно построить ансамбль слов-кандидатов.

P.S. в моем посте #8 вместо слова "вЫход" следует читать "вход"
andyp
Цитата(Serg76 @ Jul 23 2014, 22:22) *
Хе, мы, наверное, о разном: Вы мне рассказываете о процедуре расчета мягкого выхода декодера, который нужен в процедуре итеративного декодирования, а neo-n под мягким решением подразумевает мягкий выход демодулятора (или, соответственно, мягкий вход декодера). Чейз не может быть использован для двоичного канала, ибо все биты в таком случае являются равновероятными, а для работы алгоритма требуется иметь информацию о достоверности каждого бита, иначе невозможно построить ансамбль слов-кандидатов.

P.S. в моем посте #8 вместо слова "вЫход" следует читать "вход"


Точно sm.gif С партизанами неловко получилось.

Конечно, алгоритм Чейза работает с мягкими решениями на входе.

Цитата(neo-n @ Jul 23 2014, 13:30) *
Спасибо огромное за помощь и последнее что интересует как из I/Q перейти просто к мягким решениям


В общем случае, считая что на входе демодулятора присутствует белый шум, нужно найти логарифм от отношения апостериорных вероятностей передачи 0 и единицы в каждом бите модулированного символа. При равновероятных битах на входе модулятора, это приводит к логарифму отношения сумм экспонент в числителе и знаменателе. Каждую сумму аппроксимируют наибольшим членом (MAXLOGMAP приближение) и в результате остается разность квадратов евклидовых расстояний от ближайшего символа с нулем и символа с единицей в нужном бите, деленная на удвоенную дисперсию шума. Выкладки можно сделать самостоятельно, используя правило Байеса и формулу для нормального распределения. Для симметричных созвездий с битами, закодированными кодом Грея, все еще упростится и можно будет использовать только одну из квадратур для декодирования каждого бита. Нормировку на удвоенную дисперсию шума можно отбросить для многих алгоритмов декодирования, не зависящих от постоянного множителя в LLR.

Дальше подсказывать лень.
dcs
"как из I/Q перейти просто к мягким решениям"

документ не смог найти у себя на компе. я считал по формулам из appnote от AHA. там на примере кам16 был показан расчет.
попробуйте найти.


вот документ китайский язык, страница 7 - там формула но это перевод оригинального аппноута))
Serg76
Цитата(dcs @ Jul 26 2014, 00:20) *
документ не смог найти у себя на компе. я считал по формулам из appnote от AHA. там на примере кам16 был показан расчет.

Чтобы не мучаться с китайским ))), вот оригинал http://electronix.ru/forum/index.php?act=a...st&id=67150
neo-n
Спасибо огромное
Alex46
Цитата(Serg76 @ Jul 26 2014, 10:27) *
Чтобы не мучаться с китайским ))), вот оригинал http://electronix.ru/forum/index.php?act=a...st&id=67150


Все вроде как здорово только не понятно как вылислить сигму^2 ... там в примере она просто уже взята как данное ... а что делать на практике ? откуда ее брать? тоесть отношение Es/N0 как посчитать?
Maverick
turbo decoding using Soft input soft Output (алгоритм декодирования TPC от AHA)
Alex46
Цитата(Maverick @ Jan 10 2017, 10:47) *
turbo decoding using Soft input soft Output (алгоритм декодирования TPC от AHA)


Там как я понял алгоритм декодирования. Спасибо но у меня друга проблема .... Есть I/Q выход демодулятора и допустим известное созвездие. Перевести в жесткое решение особых трудностей не возникает ... но как из этого получить мягкие решения (LLR) не понимаю совсем... так как не известно ничего о сигнал/шуме ни No ни Eb... как их считать ни у кого не нашел .... все в примерах пишут так а давайте предположим Eb/No равным 5.... а мне то что с этого ... Есть формула из которой можно получить Eb/No но опятьже как измерить сигнал/шум..... вобщем нИпонятно нИхрена =) просветите кто знает...
D.I.M.A
Цитата(Alex46 @ Feb 15 2017, 19:01) *
Там как я понял алгоритм декодирования. Спасибо но у меня друга проблема .... Есть I/Q выход демодулятора и допустим известное созвездие. Перевести в жесткое решение особых трудностей не возникает ... но как из этого получить мягкие решения (LLR) не понимаю совсем... так как не известно ничего о сигнал/шуме ни No ни Eb... как их считать ни у кого не нашел .... все в примерах пишут так а давайте предположим Eb/No равным 5.... а мне то что с этого ... Есть формула из которой можно получить Eb/No но опятьже как измерить сигнал/шум..... вобщем нИпонятно нИхрена =) просветите кто знает...


Про LLR тут "Exact LLR Algorithm" https://www.mathworks.com/help/comm/ug/digi...on.html#brc6yjx
Шум можно аппроксимировать, например, усредненным корнем из мощности сигнала
petrov
Цитата(Alex46 @ Feb 15 2017, 19:01) *
а мне то что с этого ...


Не должно влиять, если у всех символов блока одинаковый Eb/N0, если разный, лучше оценивать.
stealth-coder
Как посчитать сигнал/шум:
1. Считаете мощность сигнала Psignal=sum(In^2 + Qn^2) / n
2. Определяете идеальную точку созвездия через жёсткое решение
3. Вычисляете вектора ошибок как разницу между принятыми векторами и соответствующим им идеальными точками созвездия
4. Считаете мощность шума Pnoise=sum(Ierror_n^2 + Qerror_n^2) / n
5. Вычисляете (в децибелах) Es/N0=10log(Psignal / Pnoise)
6. Вычисляете (в децибелах) Eb/N0 = Es/N0 - 3 * log2(M), где M - количество точек сигнального созвездия

Способ имеет большую ошибку в случае низких соотношений сигнал/шум.
Alex46
Цитата(D.I.M.A @ Feb 15 2017, 17:39) *
Про LLR тут "Exact LLR Algorithm" https://www.mathworks.com/help/comm/ug/digi...on.html#brc6yjx
Шум можно аппроксимировать, например, усредненным корнем из мощности сигнала


Что значит усредненным корнем из мощности сигнала?? sqrt(In^2 + Qn^2) /N так ?

petrov

Не должно влиять, если у всех символов блока одинаковый Eb/N0, если разный, лучше оценивать.

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


stealth-coder

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



Точнее sum(sqrt(In^2 + Qn^2)) /N ошибся.... так?

И еще вопрос
2. Определяете идеальную точку созвездия через жёсткое решение

Это как?? Я думал что идеальная точка зависит от конкретного демодулятора и модуляции.... то есть она известна.... или я ошибаюсь?
petrov
Цитата(Alex46 @ Feb 15 2017, 23:30) *
Как я пойму разный он или одинаковый если не знаю как это определить посчитать??


Сами будете задавать в модели канала.
Alex46
Цитата(petrov @ Feb 15 2017, 22:43) *
Сами будете задавать в модели канала.


Так у меня не модель а реальное устройство.
maratz
Если лень основательно разбираться, можно получить точки через Матлаб, делайте конструктор модулятора, поле данных с нужным дискретом передавайте в заданном созвездии, принимайте через конструктор демодулятора с указанием получать демодулированный сигнал в ЛЛР. Кстати, там очень доступная справка по этому вопросу.
petrov
Цитата(Alex46 @ Feb 16 2017, 08:07) *
Так у меня не модель а реальное устройство.


На свете куча реальных устройств существует, вы его собираетесь как чёрный ящик исследовать? Или будете упрощать задачу, используя информацию о нём, об условиях, для которых оно разрабатывалось?
Alex46
Цитата(petrov @ Feb 16 2017, 10:55) *
На свете куча реальных устройств существует, вы его собираетесь как чёрный ящик исследовать? Или будете упрощать задачу, используя информацию о нём, об условиях, для которых оно разрабатывалось?


Для меня это черный ящик .... с устройства мне приходит либо жесткие решения демодулятора либо IQ и естествеено вид модуляции вот хочу преобразовать IQ в мягкие решения чтоьы подать на вход декодера как преобразовывать не знаю. Потому и столько вопросов =).
petrov
Цитата(Alex46 @ Feb 16 2017, 14:37) *
Для меня это черный ящик ....Потому и столько вопросов =).


Для нас тем более. Вы предлагаете нам описывать всевозможные варианты развития событий, а вы будете выбирать?
Alex46
Цитата(petrov @ Feb 16 2017, 12:58) *
Для нас тем более. Вы предлагаете нам описывать всевозможные варианты развития событий, а вы будете выбирать?


Ни в коем случаи .... просто пытаюсь понять что необходимо для получения мягких решений с выхода демодулятора. Если IQ недостаточно скажите какие еще данные необходимы.
petrov
Цитата(Alex46 @ Feb 16 2017, 16:28) *
Ни в коем случаи .... просто пытаюсь понять что необходимо для получения мягких решений с выхода демодулятора. Если IQ недостаточно скажите какие еще данные необходимы.


Это зависит, возможно множество вариантов. Например квадратурный демодулятор тоже выдаёт IQ, но к нему ещё надо кучу всего приделать, зависящего от задачи, чтобы до кодов дожить.
Alex46
Цитата(maratz @ Feb 16 2017, 11:45) *
Если лень основательно разбираться, можно получить точки через Матлаб, делайте конструктор модулятора, поле данных с нужным дискретом передавайте в заданном созвездии, принимайте через конструктор демодулятора с указанием получать демодулированный сигнал в ЛЛР. Кстати, там очень доступная справка по этому вопросу.


Разбираться не лень а наоборот интересно но просто не знаю с чего начать. Может посоветуете?? Меня допустим пугают книги с формулами где одни интегралы без примеров.

IQ в данном случаи координаты точек созвездия.
stealth-coder
Цитата(Alex46 @ Feb 15 2017, 23:30) *
stealth-coder

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



Точнее sum(sqrt(In^2 + Qn^2)) /N ошибся.... так?

И еще вопрос
2. Определяете идеальную точку созвездия через жёсткое решение

Это как?? Я думал что идеальная точка зависит от конкретного демодулятора и модуляции.... то есть она известна.... или я ошибаюсь?


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

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

При низких сигнал/шум будет много ошибок в определении идеальной (переданной) точки созвездия, поэтому вектор ошибки будет вычисляться как разность принятого вектора и неправильной точки созвездия, т.е. на передающей стороне была точка 1, а при приеме из-за большой мощности шума ближайшая точка оказалась 2, поэтому вектор ошибки будет неправильным (меньше, чем на самом деле), что приведет к завышению оценки сигнал/шум.

Alex46
Цитата(stealth-coder @ Feb 17 2017, 19:56) *
Позиции идеальных точек известны и зависят от конкретного демодулятора, но для оценки вектора ошибки надо каким-то образом выбрать одну идеальную точку из множества идеальных точек созвездия, это можно сделать приняв жесткое решение либо вычислив ближайшую в смысле Евклидова расстояния.

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

При низких сигнал/шум будет много ошибок в определении идеальной (переданной) точки созвездия, поэтому вектор ошибки будет вычисляться как разность принятого вектора и неправильной точки созвездия, т.е. на передающей стороне была точка 1, а при приеме из-за большой мощности шума ближайшая точка оказалась 2, поэтому вектор ошибки будет неправильным (меньше, чем на самом деле), что приведет к завышению оценки сигнал/шум.


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