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

 
 
11 страниц V  « < 3 4 5 6 7 > »   
Reply to this topicStart new topic
> Коды БЧХ, Вопросы по алгоритмам декодирования
des00
сообщение Oct 5 2010, 12:22
Сообщение #61


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(des00 @ Oct 5 2010, 00:15) *
UPD. Конечно можно сгенерить всё в матлабе и копипастом перенести в код. Но интересно написать функции генерации кода БЧХ на SV, которые будут определять всю структуру (все функции кроме генерации генераторного полинома на SV есть и работают, ква таки сила), чтобы не зависеть ни от каких генераторов.

сорцы выложены тут автоматическое определение генераторного полинома еще не допилил %)


Цитата(SKov @ Oct 5 2010, 04:38) *
Спасибо.
Извините, забыл про ваш вопрос. Интересующие Вас минимальные многочлены можно
взять из таблицы в конце книжки Питерсона и Уэлдона. Она есть в и-нете.

вот что странно, в Си коде, который я приводил функция генерации генераторного полинома
CODE

void gen_poly()
/*
* Compute the generator polynomial of a binary BCH code. Fist generate the
* cycle sets modulo 2**m - 1, cycle[][] = (i, 2*i, 4*i, ..., 2^l*i). Then
* determine those cycle sets that contain integers in the set of (d-1)
* consecutive integers {1..(d-1)}. The generator polynomial is calculated
* as the product of linear factors of the form (x+alpha^i), for every i in
* the above cycle sets.
*/
{
register int i, ii, jj, ll, kaux;
register int test, aux, nocycles, root, noterms, rdncy;
int cycle[1024][21], size[1024], min[1024], zeros[1024];

/* Generate cycle sets modulo n, n = 2**m - 1 */
cycle[0][0] = 0;
size[0] = 1;
cycle[1][0] = 1;
size[1] = 1;
jj = 1; /* cycle set index */
if (m > 9) {
printf("Computing cycle sets modulo %d\n", n);
printf("(This may take some time)...\n");
}
do {
/* Generate the jj-th cycle set */
ii = 0;
do {
ii++;
cycle[jj][ii] = (cycle[jj][ii - 1] * 2) % n;
size[jj]++;
aux = (cycle[jj][ii] * 2) % n;
} while (aux != cycle[jj][0]);
/* Next cycle set representative */
ll = 0;
do {
ll++;
test = 0;
for (ii = 1; ((ii <= jj) && (!test)); ii++)
/* Examine previous cycle sets */
for (kaux = 0; ((kaux < size[ii]) && (!test)); kaux++)
if (ll == cycle[ii][kaux])
test = 1;
} while ((test) && (ll < (n - 1)));
if (!(test)) {
jj++; /* next cycle set index */
cycle[jj][0] = ll;
size[jj] = 1;
}
} while (ll < (n - 1));
nocycles = jj; /* number of cycle sets modulo n */

/*
printf("Enter the error correcting capability, t: ");
scanf("%d", &t);
*/
t = 3;

d = 2 * t + 1;

/* Search for roots 1, 2, ..., d-1 in cycle sets */
kaux = 0;
rdncy = 0;
for (ii = 1; ii <= nocycles; ii++) {
min[kaux] = 0;
test = 0;
for (jj = 0; ((jj < size[ii]) && (!test)); jj++)
for (root = 1; ((root < d) && (!test)); root++)
if (root == cycle[ii][jj]) {
test = 1;
min[kaux] = ii;
}
if (min[kaux]) {
rdncy += size[min[kaux]];
kaux++;
}
}
noterms = kaux;
kaux = 1;
for (ii = 0; ii < noterms; ii++)
for (jj = 0; jj < size[min[ii]]; jj++) {
zeros[kaux] = cycle[min[ii]][jj];
kaux++;
}

k = length - rdncy;

if (k<0)
{
printf("Parameters invalid!\n");
// exit(0);
return ;
}

printf("This is a (%d, %d, %d) binary BCH code\n", length, k, d);

/* Compute the generator polynomial */
g[0] = alpha_to[zeros[1]];
g[1] = 1; /* g(x) = (X + zeros[1]) initially */
for (ii = 2; ii <= rdncy; ii++) {
g[ii] = 1;
for (jj = ii - 1; jj > 0; jj--)
if (g[jj] != 0)
g[jj] = g[jj - 1] ^ alpha_to[(index_of[g[jj]] + zeros[ii]) % n];
else
g[jj] = g[jj - 1];
g[0] = alpha_to[(index_of[g[0]] + zeros[ii]) % n];
/*
printf("Generator polynomial:\ng(x) = ");
for (i = 0; i <= 31; i++) {
printf("%d", g[i]);
}
printf("\n");
*/
}
printf("Generator polynomial:\ng(x) = ");
for (ii = 0; ii <= rdncy; ii++) {
printf("%d", g[ii]);
if (ii && ((ii % 50) == 0))
printf("\n");
}
printf("\n");
}

явно показывает что никакие таблицы не используются. Все вычисления производятся на лету. Надо будет еще раз к ней подойти до полной ясности %)


--------------------
Go to the top of the page
 
+Quote Post
SKov
сообщение Oct 5 2010, 12:27
Сообщение #62


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(vadimuzzz @ Oct 5 2010, 15:51) *
в нашей стране проще ознакомиться с трудами IEEE, чем увидеть журналы типа того, что вы указали

В 95-м году это было не так. Надо было одинаково идти в крупную библиотеку какого-нибудь крупного города.
Это не журнал, это тезисы докладов научной конференции.
Сейчас их не стоит и смотреть, поскольку прошло 15 лет, там все устарело.
Это интересно разве что с точки зрения истории и приоритетов.
Go to the top of the page
 
+Quote Post
wavemaster
сообщение Nov 2 2010, 11:23
Сообщение #63





Группа: Новичок
Сообщений: 4
Регистрация: 28-01-10
Пользователь №: 55 123



А кто-нибудь сталкивался с алгоритмом на основе матрицы Вандермормонда? Мне он показался более практичным чем Форни для малых значений ошибок, но разобраться с ним у Сарагосы у меня не получилось.
Go to the top of the page
 
+Quote Post
x736C
сообщение Jan 19 2011, 09:57
Сообщение #64


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Цитата(des00 @ Oct 4 2010, 16:34) *
ЗЫ. Мне сильно желательно диагностика такой ситуации для канала без явной синхронизации. Чтобы лучше работала система синхронизации. Подобное я делал на корке RS, но никогда не задумывался, до сего момента, что decfailed корки мне врал %(

Ув. des00, Вы обеспечиваете синхронизацию декодера по доминирующим нулевым синдромам? Или я не в ту степь?!


Цитата(Mikhalych @ Sep 28 2010, 16:02) *
нет - всё на логике и сдвиговых регистрах

Буфер принятого слова для ожидания декодирования тоже на регистрах или в нем нет необходимости?
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 21 2011, 08:43
Сообщение #65


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(x736C @ Jan 19 2011, 03:57) *
Ув. des00, Вы обеспечиваете синхронизацию декодера по доминирующим нулевым синдромам? Или я не в ту степь?!

да именно так, но такое хорошо работает только на декодерах с большой исправляющей способностью (1/2, 3/4, 5/6, 7/8, 9/10) и большим размером блока. Для сабжевого конкретного случая я перешел на синхронизацию по шапочке.


--------------------
Go to the top of the page
 
+Quote Post
x736C
сообщение Jan 21 2011, 13:19
Сообщение #66


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Цитата(des00 @ Jan 21 2011, 11:43) *
да именно так, но такое хорошо работает только на декодерах с большой исправляющей способностью (1/2, 3/4, 5/6, 7/8, 9/10) и большим размером блока. Для сабжевого конкретного случая я перешел на синхронизацию по шапочке.

Спасибо.
Знакомы ли Вы с многочисленными статьями а-ля «blind frame synch. of BCH»?
В большинстве статей для синхронизации предлагается parity check matrix.
Пытаюсь разобраться в особенностях популярных алгоритмов sm.gif

Цитата(Mikhalych @ Sep 28 2010, 10:26) *
Недавно сам занимался аппаратной реализацией такого декодера...
...
8 - готовая прожка кодирования/декодирования от микрона (по ней я отлаживался)

Правильно ли я понимаю, что программа использует исключительно укороченные коды?
(”Number of data bits to be encoded. Must divide 4.“)
Что кажется логичным, т.к. программа реализует защиту флеш-памяти.
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 22 2011, 12:46
Сообщение #67


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(x736C @ Jan 21 2011, 07:19) *
Знакомы ли Вы с многочисленными статьями а-ля «blind frame synch. of BCH»?
В большинстве статей для синхронизации предлагается parity check matrix.
Пытаюсь разобраться в особенностях популярных алгоритмов sm.gif

нет, не знаком. буду премного благодарен если поделитесь. тестируя короткие БЧХ коды, я пришел к выводу что слепая синхра не возможна. Буду рад ошибаться


--------------------
Go to the top of the page
 
+Quote Post
x736C
сообщение Jan 22 2011, 21:12
Сообщение #68


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Хорошо. Итак.

Архив содержит следующие документы:
Blind Frame Synchronization For Block Code.pdf
Blind Frame Synchronization And Phase Offset Estimation For Coded Systems.pdf
Blind Frame Synchronization For Error Correcting Codes Having a Sparse Parity Check Matrix.pdf
Blind frame synchronization of product codes based on the adaptation of the parity check matrix.pdf
Blind Frame Synchronization of Reed-Solomon Codes.pdf
Blind Frame Synchronization on Gaussian Channel.pdf

Прикрепленный файл  Blind_Frame_Synchronization.rar ( 1.37 мегабайт ) Кол-во скачиваний: 161


Кое-что вынес за скобки. В принципе всё есть в инете.

Из того, что очень интересно, но найти не удалось.
http://elibrary.ru/item.asp?id=11532386
Приведен пример реализации кодовой цикловой синхронизации для каскадного кода БЧХ(31,16) -
- Рида-Соломона(32,16), обеспечивающего надежную синхронизацию в канале связи с вероятностью
ошибки до 10^-1.


http://elibrary.ru/item.asp?id=11520710
Методы кодовой цикловой синхронизации и их применение для передачи сообщений в каналах связи
с вероятностью ошибки до 10^-1

Go to the top of the page
 
+Quote Post
des00
сообщение Jan 12 2012, 06:46
Сообщение #69


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(petrov @ Oct 4 2010, 10:54) *
Хотя бы мягкое декодирование БЧХ по алгоритму Чейза используйте.


Цитата(SKov @ Oct 4 2010, 12:59) *
Конечно, и в этом случае можно использовать декодер БЧХ для ДСК, применяя алгоритмы Чейза или декодирование по МОР (Форни.)
Но много там не получишь (обычно в пределах 1.5...2 дБ дополнительного выигрыша к ЭВК дискретного канала).
Но для длин <100 это все равно надо делать и это будет хорошо.


Нашел время вернуться к БЧХ кодам и алгоритму Чейза. Есть несколько вопросов :

1. в книге Кларка, при описании алгоритма Чейза он пишет :
Цитата
Метод 2: взять в качестве векторов 1 множество из 2^d/2 векторов, имеющих всевозможные символы на d/2 наименее достоверных позициях и нулевые символы на остальных.

Но нигде в книге нет ни слова, как определить какие символы наименее достоверные. Неужели предполагается выделять достоверность символов с помощью сравнения их квантованных амплитуд, считая что чем больше амплитуда (например для BPSK) тем символ достовернее ?

2. В разделе "8.1.3. Системы, использующие код Рида—Соломона и короткий блоковый код". Неужели такие системы использовались/используются? Всегда считал что наиболее подходящими для каскада являются блоковый и сверточные коды.

3. Прочитал у него же про многопороговое декодирование блоковых кодов. Правильно ли я понял, что при использовании того же БЧХ (15,5,7) и многопорогового декодера с мягким решением, выигрыш от кодирования будет больше чем при использовании арифметического БЧХ с Чейзом ?

Спасибо.


--------------------
Go to the top of the page
 
+Quote Post
petrov
сообщение Jan 12 2012, 08:28
Сообщение #70


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(des00 @ Jan 12 2012, 10:46) *
Но нигде в книге нет ни слова, как определить какие символы наименее достоверные. Неужели предполагается выделять достоверность символов с помощью сравнения их квантованных амплитуд, считая что чем больше амплитуда (например для BPSK) тем символ достовернее ?


Да.
Go to the top of the page
 
+Quote Post
Gold777
сообщение Jan 12 2012, 14:39
Сообщение #71


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

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(des00 @ Oct 1 2010, 10:40) *
либо я тупой, либо одно из двух crying.gif в статьях выложенных выше приведены 4 варианта алгоритма SiBM. Но все они разные. В целях пристрелки реализовал один в один 3 штуки ни один не работает(причем в одном алгоритме была ошибка). Детальное исполнение алгоритма на бумажке показывает что косяков в реализации нет, но алгоритм не работает %)
Может быть у кого нить есть статья с описанием SiBM который приведен без ошибок?

Спасибо.

Возникла та же проблема. Реализовал SiBM, вношу одну ошибку в КС. А декодер показывает что их две (вычисления приводят к полиному локаторов 2-й степени, Ченя соответственно решает и находит 2 корня). Считаю на бумаге все получается. Может где в алгоритме ошибка?
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 13 2012, 05:57
Сообщение #72


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(petrov @ Jan 12 2012, 03:28) *
Да.

нда, все оригинальное просто sm.gif

Цитата(Gold777 @ Jan 12 2012, 09:39) *
Возникла та же проблема. Реализовал SiBM, вношу одну ошибку в КС. А декодер показывает что их две (вычисления приводят к полиному локаторов 2-й степени, Ченя соответственно решает и находит 2 корня). Считаю на бумаге все получается. Может где в алгоритме ошибка?
Прикрепленное изображение

все алгоритмы в статьях рабочие, отличия только в деталях/индексах и т.д. реализации для плис всех этих алгоритмов для БЧХ/РС кодов я выкладывал в этой теме.



--------------------
Go to the top of the page
 
+Quote Post
Gold777
сообщение Jan 13 2012, 09:45
Сообщение #73


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

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(des00 @ Jan 13 2012, 08:57) *
нда, все оригинальное просто sm.gif


все алгоритмы в статьях рабочие, отличия только в деталях/индексах и т.д. реализации для плис всех этих алгоритмов для БЧХ/РС кодов я выкладывал в этой теме.

Если я работаю с записанным сигналом, прогоняю его через Моделсим алгоритм работает правильно. Если в реальном времени, вношу к примеру одну ошибку в чистый сигнал находится внесенная ошибка правильно, но помимо нее декодер находит определенную постоянную вторую ошибку на месте на котором ее быть не должно в каждом кодовом слове (соответственно полином локаторов имеет в данном случае вторую степень). Вот собственно такую ситуацию я наблюдаю в SignalTab. Такая же ситуация наблюдается при увеличении числа ошибок. Вот не пойму где ошибка то у меня?

Сообщение отредактировал Gold777 - Jan 13 2012, 09:47
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 13 2012, 14:15
Сообщение #74


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Gold777 @ Jan 13 2012, 03:45) *
Вот не пойму где ошибка то у меня?

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


--------------------
Go to the top of the page
 
+Quote Post
Gold777
сообщение Jan 16 2012, 09:24
Сообщение #75


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

Группа: Участник
Сообщений: 118
Регистрация: 28-10-11
Из: Москва
Пользователь №: 68 022



Цитата(des00 @ Jan 13 2012, 17:15) *
ошибка описания, синтезируемая модель и поведенческая ведут себя по-разному.

Спасибо за помощь. Разобрался. Старую таблицу памяти подцепил, в которой ошибка была.
Go to the top of the page
 
+Quote Post

11 страниц V  « < 3 4 5 6 7 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 18:25
Рейтинг@Mail.ru


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