blob: 7ae9221f58d1483877f9833040af2dbdc67ffc86 [file] [log] [blame]
#include <assert.h>
#include <memory.h>
#include "common.h"
void init_viterbi(param_viterbi_t* param, coderate_tt in_rate)
{
unsigned char Tabl[7][MAX_Nways];
size_t i, j;
memset(param, 0, sizeof(param_viterbi_t));
memset(&Tabl, 0, sizeof(Tabl));
switch (in_rate) {
case CODERATE_1D2:
param->punct1[0] = 1; param->punct2[0] = 1;
param->n_in = 1;
break;
case CODERATE_2D3:
param->punct1[0] = 1; param->punct1[1] = 0; param->punct2[0] = 1;
param->punct2[1] = 1;
param->n_in = 2;
break;
case CODERATE_3D4:
param->punct1[0] = 1; param->punct1[1] = 0; param->punct1[2] = 1;
param->punct2[0] = 1; param->punct2[1] = 1; param->punct2[2] = 0;
param->n_in = 3;
break;
case CODERATE_5D6:
param->punct1[0] = 1; param->punct1[1] = 0; param->punct1[2] = 1;
param->punct1[3] = 0; param->punct1[4] = 1;
param->punct2[0] = 1; param->punct2[1] = 1; param->punct2[2] = 0;
param->punct2[3] = 1; param->punct2[4] = 0;
param->n_in = 5;
break;
case CODERATE_7D8:
param->punct1[0] = 1; param->punct1[1] = 0; param->punct1[2] = 0;
param->punct1[3] = 0; param->punct1[4] = 1; param->punct1[5] = 0;
param->punct1[6] = 1;
param->punct2[0] = 1; param->punct2[1] = 1; param->punct2[2] = 1;
param->punct2[3] = 1; param->punct2[4] = 0; param->punct2[5] = 1;
param->punct2[6] = 0;
param->n_in = 7;
break;
default:
assert(0 && "Unsupported coderate");
}
param->Nbits = 7;
param->Nways = 1 << (param->Nbits);
param->Delay = 150;
for (i=0; i<param->Nways; ++i) {
for (j=0; j<7; ++j) {
Tabl[6-j][i] = ((i & (1 << j)) != 0);
}
}
for (i=0; i<param->Nways; ++i) {
param->Tabl_X[i] = Tabl[0][i] ^ Tabl[1][i] ^ Tabl[2][i] ^ Tabl[5][i];
param->Tabl_Y[i] = Tabl[1][i] ^ Tabl[2][i] ^ Tabl[4][i] ^ Tabl[5][i];
}
for (i=0; i<param->Nways; ++i) {
param->Metr[i] = 1e6;
}
param->Metr[0] = 0;
}