![]() |
|
![]() ![]() ![]() |
|
iri1989 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 19.4.2015 Репутация: нет Всего: нет |
Здравствуйте. У меня закоден однопороговый алгоритм. Как из него сделать многопороговый. Многопороговый алгоритм - это когда от итерации к итерации этот порог динамически меняется. Только вот на какие именно значения он меняется. Помогите пожалуйста!
+ еще надо переделать на мягкие решения. Код: void bitflip() { // BIT-FLIP decoding int i,j,l,iter; int delt,m,aux; int all_zero; // Flag for syndrome testing int count; // ------------------- // INITIALIZATION STEP // ------------------- // Prior values (used to be probabilities in soft-decision) for (i=0;i<N;i++) { decoded[i] = hard[i]; } iter = 0; // Counter of iterations do { // --------------------------------------- // HORIZONTAL STEP = BOTTOM-UP PROPAGATION // --------------------------------------- // // Run through the checks m and compute, for each n in N(m) the // probabilitiy of a check symbol when code symbol is 0 (or 1) // given that the other code symbols have values 0, 1 // // Pearl: // Node x_m computes new "lambda" messages to be sent to its parents // u_1, u_2, ..., u_K // Flag to determine if syndrome is all zero all_zero = 1; for (i=0; i<M; i++) { delt = 0; for (j=0; j<check_node[i].size; j++) { aux = check_node[i].index[j]; delt ^= decoded[aux-1]; } check_node[i].syndrome = delt; // Check if anyone of the syndromes is not zero if (delt) all_zero = 0; } // CONTINUE IF A CODEWORD HAS NOT BEEN FOUND if (!all_zero) { // ------------------------------------ // VERTICAL STEP = TOP-DOWN PROPAGATION // ------------------------------------ // // MacKay: // Take the computed values of rm0, rm1 and update the values of // the probabilities qm0, qm1 // // Pearl: // Each node u_l computes new "pi" messages to be send to its // children x_1, x_2, ..., x_J for (i=0; i<N; i++) { count = 0; for (j=0; j<code_node[i].size; j++) { aux = code_node[i].index[j]-1; // Compute index "m" of message from children m = 0; while ( ( (check_node[aux].index[m]-1) != i ) && ( m < check_node[aux].size ) ) m++; if (check_node[aux].syndrome) count++; } // If more that 1/2 checks are unsatisfied, FLIP the BIT if (count > threshold) // if (count > (code_node[i].size-1)/2 ) { decoded[i] ^= 1; } } } // Increment the number of iterations, and check if maximum reached iter++; } while (iter < max_iter); } |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 2 Всего: 146 |
это вопрос больше имеет отношение к алгоритмам , чем к С++
а по куску кода который вы выгрызли .... понять что делает ваш декодер очень сложно... и тем более добавить какой то новый ф-ционал... вам в раздел алгоритмов!!!! PS на любом языке программирования можно реализовать только то, что имеет четкий и известный алгоритм! -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
iri1989 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 19.4.2015 Репутация: нет Всего: нет |
http://rghost.ru/87MPMtVXZ здесь все работает, декодер исправляет ошибки
Добавлено через 3 секунды http://rghost.ru/87MPMtVXZ здесь все работает, декодер исправляет ошибки |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |