реклама на сайте
подробности

 
 
> Max-Log-MAP-декодирование свёрточного double-binary турбокода, Алгоритм реализован, но даёт неверный выход, нужна помощь
Coder2009
сообщение Aug 10 2009, 12:46
Сообщение #1





Группа: Участник
Сообщений: 5
Регистрация: 18-07-09
Пользователь №: 51 365



Попробовал сделать программную реализацию алгоритма Max-Log-MAP для Double-Binary турбокода. Реализацию делал согласно источнику "Low-Power Traceback MAP Decoding for Double-Binary Convolutional Turbo Decoder" (прикрепленный файл mlmap.pdf), раздел II - это оказался единственным более-менее понятным документом с описанием алгоритма для недвоичных свёрточных кодов из всех, что мне удалось найти. Программу писал на Си.

Вроде бы, ничего сложного, сделал всё один в один как написано, а результат получается неверный. Причём неверный результат даёт декодер SISO уже на первой итерации, при том, что на вход подаётся ВЕРНОЕ кодовое слово, не содержащее ошибок. Апостериорные вероятности получаются либо неверными, либо, порой, неоднозначными, ибо получаются равновероятными сразу несколько вариантов.

Буду благодарен, если подскажете, что и где я делаю не так, что именно недопонимаю (а может, и в самом источнике где-то что-то неверно?).

Ниже, в прикреплённом файле lmap.txt, привожу полное описание алгоритма с комментариями и фрагментами кода на Си.

Заранее огромное спасибо всем, кто решится изучить мою проблему.

Сообщение отредактировал Coder2009 - Aug 10 2009, 13:09
Прикрепленные файлы
Прикрепленный файл  mlmap.pdf ( 136.81 килобайт ) Кол-во скачиваний: 200
Прикрепленный файл  mlmap.txt ( 5.15 килобайт ) Кол-во скачиваний: 169
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Grumbler_2002
сообщение Apr 3 2014, 11:38
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 5-01-05
Из: г. Зеленоград
Пользователь №: 1 817



Для начала надо посмотреть на "мягкие" решения с выхода MAP-декодера на каждой полуитерации. На первой полуитерации при замкнутой или приведенной в некоторое состояние решетке кодера не должно быть просадок в решениях. В идеале, они должны быть одинаковы. На второй полуитерации начинает влиять перемежитель, поэтому, например, при несовпадении матриц перемежения кодера и декодера и небольших шумах на фиксированных местах станут появляться ошибки.

Сам я применял tail-biting CTC с полным декодированием и с декодированием "скользящим" окном. Разницы между ними практически не было, но была исследовательская работа по определению величины перекрытия окна и анализу спектральных свойств синтезированных кодов.
Go to the top of the page
 
+Quote Post
Neznaika
сообщение Apr 4 2014, 08:09
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 4-04-07
Пользователь №: 26 768



Цитата(Grumbler_2002 @ Apr 3 2014, 15:38) *
Для начала надо посмотреть на "мягкие" решения с выхода MAP-декодера на каждой полуитерации. На первой полуитерации при замкнутой или приведенной в некоторое состояние решетке кодера не должно быть просадок в решениях. В идеале, они должны быть одинаковы. На второй полуитерации начинает влиять перемежитель, поэтому, например, при несовпадении матриц перемежения кодера и декодера и небольших шумах на фиксированных местах станут появляться ошибки.

Сам я применял tail-biting CTC с полным декодированием и с декодированием "скользящим" окном. Разницы между ними практически не было, но была исследовательская работа по определению величины перекрытия окна и анализу спектральных свойств синтезированных кодов.


При моделировании с функцией randG неоднократно рассматривал мягкие решения. Как правило если после первой итерации наблюдается какое то число ошибок, то в дальнейшем приблизительно с коэффициентом 2-3 оно снижается до 0... вот например результат: 61 14 6 4 - итог 4 итераций... причем те самые 4 пропущенные ошибки прошли сквозь все операции без исправления. Изначально использовал архитектуру из одной статьи, где на второй SISO подавались только LLR с первого SISO и проверочные мягкие решения для 2-го SISO. Система исправляла, но из-за аналогичного недобора в S/N.. решил использовать стандартный вариант с добавлением перемешенных входных данных, те ошибки которые наблюдались в блоках в первом варианте ушли, но декодер хоть и стал работать лучше, но не намного. Буквально только что проделал еще некоторые исследования с LLR.
Например на входе пара мягких 4-битных решений (доп. код) ( A,B )=(x"b",x"f"), без шума д.б. (1,1). LLR (11 бит) для нее по полуитерациям:
Ит.1 {LLR(01),LLR(10),LLR(11)}: {x"000",x"030",x"000"} {x"7f8",x"02c",x"000"}
Ит.2 {LLR(01),LLR(10),LLR(11)}: {x"7fc",x"018",x"018"} {x"7f0",x"018",x"034"}
Ит.3 {LLR(01),LLR(10),LLR(11)}: {x"7e0",x"024",x"044"} {x"7e8",x"00c",x"054"}
Ит.4 {LLR(01),LLR(10),LLR(11)}: {x"7d0",x"7f0",x"050"} {x"00c",x"014",x"094"}
Решения принимаются по значениям в доп. коде. Видно, что первоначальная операция определяет 10, но к 4-ой операции получаем 11, причем LLR(11) в 7 раз больше, чем LLR(10). Вроде бы неплохая сходимость.
Стал добавлять уровень шума до тех пор пока декодер не ошибся в блоке, причем по итерациям выдал ошибок: 9 6 4 5. Посмотрел LLR ошибочных бит. Без шума пара (0,1):
Ит.1 {LLR(01),LLR(10),LLR(11)}: {x"008",x"008",x"014"} {x"008",x"000",x"01c"}
Ит.2 {LLR(01),LLR(10),LLR(11)}: {x"004",x"004",x"010"} {x"7f0",x"7e8",x"018"}
Ит.3 {LLR(01),LLR(10),LLR(11)}: {x"004",x"7ec",x"024"} {x"000",x"7fc",x"02c"}
Ит.4 {LLR(01),LLR(10),LLR(11)}: {x"008",x"000",x"02c"} {x"00c",x"7e4",x"014"}
Вроде бы сходится, но очень медленно... к 4-ой итерации ошибка - вместо (0,1) - (1,1), решил добавить коэффициент 0.5 перед внешней информацией. При том же отношении С/Ш декодер не ошибся и выдал по итерациям: 11 4 2 0. Глянул LLR той же пары...
Ит.1 {LLR(01),LLR(10),LLR(11)}: {x"008",x"008",x"014"} {x"00c",x"000",x"01c"}
Ит.2 {LLR(01),LLR(10),LLR(11)}: {x"008",x"004",x"00c"} {x"7f4",x"7ec",x"010"}
Ит.3 {LLR(01),LLR(10),LLR(11)}: {x"00c",x"004",x"010"} {x"004",x"7f0",x"00c"}
Ит.4 {LLR(01),LLR(10),LLR(11)}: {x"018",x"00c",x"014"} {x"008",x"7e4",x"000"}
---
Ит.8 {LLR(01),LLR(10),LLR(11)}: ------- {x"010",x"7e0",x"7f0"}
Не ошибся и сходимость видна, ввел этот коэффициент и в проекте, но все заработало гораздо хуже. Вообщем я снова подвис.
Что касается интерливера/деинтерливера... то вчера успел проверить только интерливер, и ручкам посчитал и в симуляторе адреса перепроверил, все верно....
А что за tail-biting CTC такой? Там что то с цикличными состояниями кодера же связано? Я тупо в декодере использую последние значения рекурсий предыдущей итерации для последующей итерации. Для чего это надо? И куда вкрутить?

Цитата(andyp @ Apr 4 2014, 10:53) *
Могу только посоветовать ознакомиться со следующей статьей:
L. C. Perez, J. Seghers, and D. J. Costello, ”A distance spectrum interpretation of turbo codes,” IEEE Trans. Inform. Theory, vol. 42, pp.1698–1709, Nov. 1996
http://wireless.ece.ufl.edu/eel6550/lit/Tu...um_Costello.pdf

Там написано, чем определяется асимптотика кривой BER любого турбо-кода при высоких-средних SNR и почему в графике BER присутствует waterfall region на низких SNR.


Спасибо, продуктивная статья.. напоминает мой случай... но только диапазоны величин S/N другие... в статье около 1-2 дб... я же застЬял на 1-2 дБ выше... Но формы кривых похожи...

Цитата(Fat Robot @ Apr 4 2014, 10:15) *
Насколько я понимаю, кодер для турбо-кода строится вокруг кодера для систематического сверточного кода: проверочные символы формируются для входного блока и для входного блока, прошедшего через перемежитель.

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

Я понял, спасибо.. хорошая идея для проверки перемежителей)

Цитата(Fat Robot @ Apr 4 2014, 10:15) *
Что касается демодулятора:
- для начала демодулятор хорошо бы проверить и отладить, если нет возможности работать без него

потом:
- определяете чувствительность по любому критерию
- ставите сигнал на 20 дБ выше уровня чувствительности. демодулятор уже влиять не должен. проверяете это прогоном: ошибок быть не должно
- добавляете шум от внешнего генератора.

Без демодулятора скорее всего не получится, надо много железа переворотить, чтобы выбросить его из цепи. Чувствительность демодулятора около -85дБм... уровень сигнала около -70 дбм, я думаю демодулятор не должен ничего серьезного вносить. Есть конечно на 8PSK и 16QAM легкие раскачки фазы, но они на глаз малы, есть слабая размазанность точек без шумов, но тоже на мой взгляд ничего серьезного.


Сообщение отредактировал Neznaika - Apr 4 2014, 08:53
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Coder2009   Max-Log-MAP-декодирование свёрточного double-binary турбокода   Aug 10 2009, 12:46
- - Coder2009   Разобрался, вопрос снят, при расчёте обратной реку...   Aug 12 2009, 18:11
- - shoml   Неясно где была ошибка, согласно прилагаемого файл...   Feb 1 2012, 21:26
- - Neznaika   Всем привет! Нахожусь в затруднительном положе...   Apr 2 2014, 06:25
|- - Fat Robot   Вы могли бы уточнить про 10^-7? т.е. если шума нет...   Apr 2 2014, 06:57
- - Neznaika   Вот самое главное.. BER) Без шума все по нулям раб...   Apr 2 2014, 08:51
|- - Fat Robot   Конечно, готвых рецептов "как починить" ...   Apr 2 2014, 11:41
- - Neznaika   Спасибо за ответ) 1. Перемежитель еще раз проверю...   Apr 3 2014, 03:35
|- - Fat Robot   Насколько я понимаю, кодер для турбо-кода строится...   Apr 4 2014, 06:15
- - Serg76   .   Apr 3 2014, 13:21
- - andyp   Цитата(Neznaika @ Apr 2 2014, 10:25) Еще ...   Apr 3 2014, 19:10
|- - Dr.Alex   Цитата(andyp @ Apr 3 2014, 23:10) Так это...   Apr 3 2014, 19:54
|- - andyp   Цитата(Dr.Alex @ Apr 3 2014, 23:54) Нельз...   Apr 4 2014, 06:53
|- - Dr.Alex   Цитата(andyp @ Apr 4 2014, 10:53) Там нап...   Apr 4 2014, 16:45
|- - andyp   Цитата(Dr.Alex @ Apr 4 2014, 20:45) Так и...   Apr 5 2014, 05:49
- - andyp   Цитата(Neznaika @ Apr 4 2014, 12:09) Спас...   Apr 4 2014, 08:54
- - Neznaika   Пока ничего нового в своем декодере не нарыл и ста...   Apr 8 2014, 05:31
|- - Serg76   Цитата(Neznaika @ Apr 8 2014, 08:31) Так ...   Apr 9 2014, 03:09
- - Serg76   Это адреса, по которым надо считывать данные из вх...   Apr 8 2014, 06:17
- - Neznaika   Нееее) N - это число пар бит в передаваемом блоке....   Apr 8 2014, 10:18
|- - Serg76   Цитата(Neznaika @ Apr 8 2014, 13:18) Неее...   Apr 8 2014, 12:13
- - Neznaika   Сегодня нашел ошибку с своем перемежителе. Теперь ...   Apr 9 2014, 06:05
|- - andyp   Цитата(Neznaika @ Apr 9 2014, 10:05) Но в...   Apr 9 2014, 15:36
- - Serg76   Neznaika , а что, собственно, из себя представляет...   Apr 9 2014, 17:29
- - Neznaika   Сергей!) Спасибо, за ваш отзыв на мою проблему...   Apr 10 2014, 03:40
- - Serg76   1. У меня, все-таки, остаются сомнения в правильно...   Apr 10 2014, 04:44
|- - Neznaika   Цитата(Serg76 @ Apr 10 2014, 08:44) 1. У ...   Apr 10 2014, 05:37
|- - Serg76   Цитата(Neznaika @ Apr 10 2014, 08:37) Оши...   Apr 10 2014, 07:35
|- - andyp   Цитата(Neznaika @ Apr 10 2014, 09:37) Но ...   Apr 10 2014, 09:38
|- - Neznaika   Цитата(andyp @ Apr 10 2014, 13:38) Правил...   Apr 10 2014, 11:05
|- - andyp   Цитата(Neznaika @ Apr 10 2014, 15:05) О п...   Apr 10 2014, 11:39
|- - Serg76   Цитата(Neznaika @ Apr 10 2014, 14:05) 2. ...   Apr 10 2014, 14:56
- - Serg76   Да можно и проверить, сгенерируйте кодовое слово, ...   Apr 10 2014, 06:01
- - Neznaika   Сергей! Не могли бы вы немного пояснить, где ч...   Apr 11 2014, 04:08
- - Serg76   Не получается у меня по Вашему примеру, проверочны...   Apr 11 2014, 06:15
- - Neznaika   А у вас получается кодовое слово примера из станда...   Apr 11 2014, 07:04
|- - Serg76   Цитата(Neznaika @ Apr 11 2014, 10:04) А у...   Apr 11 2014, 07:11
- - Neznaika   Конечно... вот страница 39... http://www.etsi.org/...   Apr 11 2014, 07:19
- - Serg76   Хммм...., вот это уже интересно, с этим примером н...   Apr 11 2014, 08:41
- - Neznaika   Ура! Спешу поделиться хорошей новостью) Благод...   Apr 11 2014, 09:12
|- - Serg76   Цитата(Neznaika @ Apr 11 2014, 12:12) Ура...   Apr 11 2014, 11:30
- - Neznaika   Да, конечно Eb/N0) С LDPC по DVB-S мне удалось раз...   Apr 11 2014, 15:25
- - Neznaika   Всем привет) Застьял на измерениях BER) Ситуация с...   May 7 2014, 08:36
|- - Dr.Alex   Вообще-то обычная ситуация при неоптимальной/ошибо...   May 7 2014, 08:55
- - Neznaika   Декодер то тут причем? Я BER меряю на его входе...   May 7 2014, 09:12
|- - Dr.Alex   Этого я не заметил. В таком случае непонятно, что...   May 7 2014, 09:33
- - Neznaika   Все точно) Именно так... либо так мерить нельзя, н...   May 7 2014, 09:52
|- - Dr.Alex   В таком случае это вопрос типа "у меня нихрен...   May 7 2014, 10:06
- - Neznaika   BER-тестер HBT фирмы RAD, выдает в моем случае пос...   May 7 2014, 10:14


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 23:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01438 секунд с 7
ELECTRONIX ©2004-2016