core/conv/conv_acc.c: delete reset_decoder()

Currently this implementation exposes nothing than
osmo_conv_decode_acc(), so it wasn't possible to call
reset_decoder() from outside.

The method itself was used to initialize accumulated
path metrics and the starting state of encoder. Now
this code is moved to generate_trellis().

Moreover, setting accumulated path metrics inside
existing loop is a bit faster that calling memset().

Change-Id: I8f17cebf468cf0106927ccee091cfb2896649cb2
This commit is contained in:
Vadim Yanitskiy 2017-06-19 05:41:49 +07:00
parent 23d3bc01ea
commit 34da6b5f47
1 changed files with 13 additions and 20 deletions

View File

@ -413,10 +413,21 @@ static struct vtrellis *generate_trellis(const struct osmo_conv_code *code)
rc = gen_state_info(&trellis->vals[i],
i, outputs, code);
}
if (rc < 0)
goto fail;
/* Set accumulated path metrics to zero */
trellis->sums[i] = 0;
}
if (rc < 0)
goto fail;
/**
* For termination other than tail-biting, initialize the zero state
* as the encoder starting state. Initialize with the maximum
* accumulated sum at length equal to the constraint length.
*/
if (code->term != CONV_TERM_TAIL_BITING)
trellis->sums[0] = INT8_MAX * code->N * code->K;
return trellis;
@ -425,22 +436,6 @@ fail:
return NULL;
}
/* Reset decoder
* Set accumulated path metrics to zero. For termination other than
* tail-biting, initialize the zero state as the encoder starting state.
* Initialize with the maximum accumulated sum at length equal to the
* constraint length.
*/
static void reset_decoder(struct vdecoder *dec, int term)
{
int ns = dec->trellis->num_states;
memset(dec->trellis->sums, 0, sizeof(int16_t) * ns);
if (term != CONV_TERM_TAIL_BITING)
dec->trellis->sums[0] = INT8_MAX * dec->n * dec->k;
}
static void _traceback(struct vdecoder *dec,
unsigned state, uint8_t *out, int len)
{
@ -641,8 +636,6 @@ static int conv_decode(struct vdecoder *dec, const int8_t *seq,
{
int8_t depunc[dec->len * dec->n];
reset_decoder(dec, term);
if (punc) {
depuncture(seq, punc, depunc, dec->len * dec->n);
seq = depunc;