Цитата(des00 @ Jul 5 2016, 10:53)

Надо попробовать сделать F-LDPC классически и сравнить.
Гыыы. Расписал ручками решетку, а ведь они правы черт возьми. Итак решетка кода 1/(1+D)
Код
trel.nextStates = [[0 1][1 0]];
trel.outputs = [[0 1][1 0]];
trel.preStates = [[0 1][1 0]];
Рассмотрим MAX LOG MAP с прямыми метриками. Метрики переходов gamma(state, input_bit) будут
Код
gamma(0, 0) = 0*ma(i) + trel.outputs[0][0]*mx(i);
gamma(0, 1) = 1*ma(i) + trel.outputs[0][1]*mx(i);
gamma(1, 0) = 0*ma(i) + trel.outputs[1][0]*mx(i);
gamma(1, 1) = 1*ma(i) + trel.outputs[1][1]*mx(i);
оптимизируем
Код
gamma(0, 0) = 0;//00
gamma(0, 1) = ma(i) + mx(i);//11
gamma(1, 0) = mx(i);//01
gamma(1, 1) = ma(i);//10
составляем уравнение расчета надежностей состояний при обратном проходе, с учетом решетки trel.preStates
Код
beta[k][0] = max(gamma(0, 0) + beta[k+1][0], gamma(0, 1) + beta[k+1][1]);
beta[k][1] = max(gamma(1, 1) + beta[k+1][0], gamma(1, 0) + beta[k+1][1]);
Переходим от вероятностей каждого состояния (беззнаковой) к разностной вероятности (помним что одинаковое смещение не влияет на MAX LOG MAP)
Код
beta[k][0] = max(gamma(0, 0), gamma(0, 1) + beta[k+1][1] - beta[k+1][0]);
beta[k][1] = max(gamma(1, 1), gamma(1, 0) + beta[k+1][1] - beta[k+1][0]);
оптимизируем B[k+1] = beta[k+1][1] - beta[k+1][0], gamma(0,0) = 0
Код
beta[k][0] = max( 0, gamma(0, 1) + B[k+1]);
beta[k][1] = max(gamma(1, 1), gamma(1, 0) + B[k+1]);
снова переходим к разностной вероятности
Код
B[k] = max(gamma(1, 1), gamma(1, 0) + B[k+1]) - max(0, gamma(0, 1) + B[k+1]);
Делаем подстановку остальных gamma и вуаля.
Код
B[k] = max(ma[i], mx[i] + B[k+1]) - max(0, ma[i] + mx[i] + B[k+1]);
Ну а работать в прямых или инверсных метриках это уже пожеланию