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

UPD. Конечно можно сгенерить всё в матлабе и копипастом перенести в код. Но интересно написать функции генерации кода БЧХ на SV, которые будут определять всю структуру (все функции кроме генерации генераторного полинома на SV есть и работают, ква таки сила), чтобы не зависеть ни от каких генераторов.

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

 

 

Спасибо.

Извините, забыл про ваш вопрос. Интересующие Вас минимальные многочлены можно

взять из таблицы в конце книжки Питерсона и Уэлдона. Она есть в и-нете.

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

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");
}

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

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


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

в нашей стране проще ознакомиться с трудами IEEE, чем увидеть журналы типа того, что вы указали

В 95-м году это было не так. Надо было одинаково идти в крупную библиотеку какого-нибудь крупного города.

Это не журнал, это тезисы докладов научной конференции.

Сейчас их не стоит и смотреть, поскольку прошло 15 лет, там все устарело.

Это интересно разве что с точки зрения истории и приоритетов.

 

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


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

А кто-нибудь сталкивался с алгоритмом на основе матрицы Вандермормонда? Мне он показался более практичным чем Форни для малых значений ошибок, но разобраться с ним у Сарагосы у меня не получилось.

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


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

ЗЫ. Мне сильно желательно диагностика такой ситуации для канала без явной синхронизации. Чтобы лучше работала система синхронизации. Подобное я делал на корке RS, но никогда не задумывался, до сего момента, что decfailed корки мне врал %(

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

 

 

нет - всё на логике и сдвиговых регистрах

Буфер принятого слова для ожидания декодирования тоже на регистрах или в нем нет необходимости?

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


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

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

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

 

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


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

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

Спасибо.

Знакомы ли Вы с многочисленными статьями а-ля «blind frame synch. of BCH»?

В большинстве статей для синхронизации предлагается parity check matrix.

Пытаюсь разобраться в особенностях популярных алгоритмов :)

 

Недавно сам занимался аппаратной реализацией такого декодера...

...

8 - готовая прожка кодирования/декодирования от микрона (по ней я отлаживался)

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

(”Number of data bits to be encoded. Must divide 4.“)

Что кажется логичным, т.к. программа реализует защиту флеш-памяти.

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


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

Знакомы ли Вы с многочисленными статьями а-ля «blind frame synch. of BCH»?

В большинстве статей для синхронизации предлагается parity check matrix.

Пытаюсь разобраться в особенностях популярных алгоритмов :)

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

 

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


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

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

 

Архив содержит следующие документы:

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

 

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

 

Из того, что очень интересно, но найти не удалось.

http://elibrary.ru/item.asp?id=11532386

Приведен пример реализации кодовой цикловой синхронизации для каскадного кода БЧХ(31,16) -

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

ошибки до 10^-1.

 

http://elibrary.ru/item.asp?id=11520710

Методы кодовой цикловой синхронизации и их применение для передачи сообщений в каналах связи

с вероятностью ошибки до 10^-1

 

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


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

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

 

Конечно, и в этом случае можно использовать декодер БЧХ для ДСК, применяя алгоритмы Чейза или декодирование по МОР (Форни.)

Но много там не получишь (обычно в пределах 1.5...2 дБ дополнительного выигрыша к ЭВК дискретного канала).

Но для длин <100 это все равно надо делать и это будет хорошо.

 

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

 

1. в книге Кларка, при описании алгоритма Чейза он пишет :

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

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

 

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

 

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

 

Спасибо.

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


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

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

 

Да.

 

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


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

либо я тупой, либо одно из двух :crying: в статьях выложенных выше приведены 4 варианта алгоритма SiBM. Но все они разные. В целях пристрелки реализовал один в один 3 штуки ни один не работает(причем в одном алгоритме была ошибка). Детальное исполнение алгоритма на бумажке показывает что косяков в реализации нет, но алгоритм не работает %)

Может быть у кого нить есть статья с описанием SiBM который приведен без ошибок?

 

Спасибо.

Возникла та же проблема. Реализовал SiBM, вношу одну ошибку в КС. А декодер показывает что их две (вычисления приводят к полиному локаторов 2-й степени, Ченя соответственно решает и находит 2 корня). Считаю на бумаге все получается. Может где в алгоритме ошибка?post-68022-1326379122_thumb.jpg

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


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

Да.

нда, все оригинальное просто :)

 

Возникла та же проблема. Реализовал SiBM, вношу одну ошибку в КС. А декодер показывает что их две (вычисления приводят к полиному локаторов 2-й степени, Ченя соответственно решает и находит 2 корня). Считаю на бумаге все получается. Может где в алгоритме ошибка?post-68022-1326379122_thumb.jpg

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

 

 

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


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

нда, все оригинальное просто :)

 

 

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

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

Изменено пользователем Gold777

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


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

Вот не пойму где ошибка то у меня?

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

 

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


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

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

Спасибо за помощь. Разобрался. Старую таблицу памяти подцепил, в которой ошибка была.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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