des00 25 5 октября, 2010 Опубликовано 5 октября, 2010 · Жалоба 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"); } явно показывает что никакие таблицы не используются. Все вычисления производятся на лету. Надо будет еще раз к ней подойти до полной ясности %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SKov 0 5 октября, 2010 Опубликовано 5 октября, 2010 · Жалоба в нашей стране проще ознакомиться с трудами IEEE, чем увидеть журналы типа того, что вы указали В 95-м году это было не так. Надо было одинаково идти в крупную библиотеку какого-нибудь крупного города. Это не журнал, это тезисы докладов научной конференции. Сейчас их не стоит и смотреть, поскольку прошло 15 лет, там все устарело. Это интересно разве что с точки зрения истории и приоритетов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
wavemaster 0 2 ноября, 2010 Опубликовано 2 ноября, 2010 · Жалоба А кто-нибудь сталкивался с алгоритмом на основе матрицы Вандермормонда? Мне он показался более практичным чем Форни для малых значений ошибок, но разобраться с ним у Сарагосы у меня не получилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x736C 0 19 января, 2011 Опубликовано 19 января, 2011 · Жалоба ЗЫ. Мне сильно желательно диагностика такой ситуации для канала без явной синхронизации. Чтобы лучше работала система синхронизации. Подобное я делал на корке RS, но никогда не задумывался, до сего момента, что decfailed корки мне врал %( Ув. des00, Вы обеспечиваете синхронизацию декодера по доминирующим нулевым синдромам? Или я не в ту степь?! нет - всё на логике и сдвиговых регистрах Буфер принятого слова для ожидания декодирования тоже на регистрах или в нем нет необходимости? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 21 января, 2011 Опубликовано 21 января, 2011 · Жалоба Ув. des00, Вы обеспечиваете синхронизацию декодера по доминирующим нулевым синдромам? Или я не в ту степь?! да именно так, но такое хорошо работает только на декодерах с большой исправляющей способностью (1/2, 3/4, 5/6, 7/8, 9/10) и большим размером блока. Для сабжевого конкретного случая я перешел на синхронизацию по шапочке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x736C 0 21 января, 2011 Опубликовано 21 января, 2011 · Жалоба да именно так, но такое хорошо работает только на декодерах с большой исправляющей способностью (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.“) Что кажется логичным, т.к. программа реализует защиту флеш-памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 22 января, 2011 Опубликовано 22 января, 2011 · Жалоба Знакомы ли Вы с многочисленными статьями а-ля «blind frame synch. of BCH»? В большинстве статей для синхронизации предлагается parity check matrix. Пытаюсь разобраться в особенностях популярных алгоритмов :) нет, не знаком. буду премного благодарен если поделитесь. тестируя короткие БЧХ коды, я пришел к выводу что слепая синхра не возможна. Буду рад ошибаться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x736C 0 22 января, 2011 Опубликовано 22 января, 2011 · Жалоба Хорошо. Итак. Архив содержит следующие документы: 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 12 января, 2012 Опубликовано 12 января, 2012 · Жалоба Хотя бы мягкое декодирование БЧХ по алгоритму Чейза используйте. Конечно, и в этом случае можно использовать декодер БЧХ для ДСК, применяя алгоритмы Чейза или декодирование по МОР (Форни.) Но много там не получишь (обычно в пределах 1.5...2 дБ дополнительного выигрыша к ЭВК дискретного канала). Но для длин <100 это все равно надо делать и это будет хорошо. Нашел время вернуться к БЧХ кодам и алгоритму Чейза. Есть несколько вопросов : 1. в книге Кларка, при описании алгоритма Чейза он пишет : Метод 2: взять в качестве векторов 1 множество из 2^d/2 векторов, имеющих всевозможные символы на d/2 наименее достоверных позициях и нулевые символы на остальных. Но нигде в книге нет ни слова, как определить какие символы наименее достоверные. Неужели предполагается выделять достоверность символов с помощью сравнения их квантованных амплитуд, считая что чем больше амплитуда (например для BPSK) тем символ достовернее ? 2. В разделе "8.1.3. Системы, использующие код Рида—Соломона и короткий блоковый код". Неужели такие системы использовались/используются? Всегда считал что наиболее подходящими для каскада являются блоковый и сверточные коды. 3. Прочитал у него же про многопороговое декодирование блоковых кодов. Правильно ли я понял, что при использовании того же БЧХ (15,5,7) и многопорогового декодера с мягким решением, выигрыш от кодирования будет больше чем при использовании арифметического БЧХ с Чейзом ? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 12 января, 2012 Опубликовано 12 января, 2012 · Жалоба Но нигде в книге нет ни слова, как определить какие символы наименее достоверные. Неужели предполагается выделять достоверность символов с помощью сравнения их квантованных амплитуд, считая что чем больше амплитуда (например для BPSK) тем символ достовернее ? Да. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amelyutin9 0 12 января, 2012 Опубликовано 12 января, 2012 · Жалоба либо я тупой, либо одно из двух :crying: в статьях выложенных выше приведены 4 варианта алгоритма SiBM. Но все они разные. В целях пристрелки реализовал один в один 3 штуки ни один не работает(причем в одном алгоритме была ошибка). Детальное исполнение алгоритма на бумажке показывает что косяков в реализации нет, но алгоритм не работает %) Может быть у кого нить есть статья с описанием SiBM который приведен без ошибок? Спасибо. Возникла та же проблема. Реализовал SiBM, вношу одну ошибку в КС. А декодер показывает что их две (вычисления приводят к полиному локаторов 2-й степени, Ченя соответственно решает и находит 2 корня). Считаю на бумаге все получается. Может где в алгоритме ошибка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 13 января, 2012 Опубликовано 13 января, 2012 · Жалоба Да. нда, все оригинальное просто :) Возникла та же проблема. Реализовал SiBM, вношу одну ошибку в КС. А декодер показывает что их две (вычисления приводят к полиному локаторов 2-й степени, Ченя соответственно решает и находит 2 корня). Считаю на бумаге все получается. Может где в алгоритме ошибка? все алгоритмы в статьях рабочие, отличия только в деталях/индексах и т.д. реализации для плис всех этих алгоритмов для БЧХ/РС кодов я выкладывал в этой теме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amelyutin9 0 13 января, 2012 Опубликовано 13 января, 2012 (изменено) · Жалоба нда, все оригинальное просто :) все алгоритмы в статьях рабочие, отличия только в деталях/индексах и т.д. реализации для плис всех этих алгоритмов для БЧХ/РС кодов я выкладывал в этой теме. Если я работаю с записанным сигналом, прогоняю его через Моделсим алгоритм работает правильно. Если в реальном времени, вношу к примеру одну ошибку в чистый сигнал находится внесенная ошибка правильно, но помимо нее декодер находит определенную постоянную вторую ошибку на месте на котором ее быть не должно в каждом кодовом слове (соответственно полином локаторов имеет в данном случае вторую степень). Вот собственно такую ситуацию я наблюдаю в SignalTab. Такая же ситуация наблюдается при увеличении числа ошибок. Вот не пойму где ошибка то у меня? Изменено 13 января, 2012 пользователем Gold777 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 13 января, 2012 Опубликовано 13 января, 2012 · Жалоба Вот не пойму где ошибка то у меня? ошибка описания, синтезируемая модель и поведенческая ведут себя по-разному. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amelyutin9 0 16 января, 2012 Опубликовано 16 января, 2012 · Жалоба ошибка описания, синтезируемая модель и поведенческая ведут себя по-разному. Спасибо за помощь. Разобрался. Старую таблицу памяти подцепил, в которой ошибка была. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться