FreeCalypso > hg > gsm-codec-lib
diff libgsmfrp/comfort_noise.c @ 108:3b64f255689a
libgsmfrp: factor out PRNG into its own module,
in preparation for using it as part of speech muting too
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 28 Nov 2022 04:00:18 +0000 |
parents | 286d5f097eb4 |
children | f081a6850fb5 |
line wrap: on
line diff
--- a/libgsmfrp/comfort_noise.c Sun Nov 27 21:02:07 2022 +0000 +++ b/libgsmfrp/comfort_noise.c Mon Nov 28 04:00:18 2022 +0000 @@ -17,53 +17,11 @@ static const uint8_t bc[4] = {0, 0, 0, 0}; static const uint8_t Nc[4] = {40, 120, 40, 120}; -/* pseudonoise() function is based on ETSI EFR code */ - -static uint16_t pseudonoise(struct gsmfr_preproc_state *st, uint16_t no_bits) -{ - uint16_t noise_bits, Sn, i; - - noise_bits = 0; - for (i = 0; i < no_bits; i++) - { - /* State n == 31 */ - if ((st->cn_random_lfsr & 0x00000001L) != 0) - { - Sn = 1; - } - else - { - Sn = 0; - } - - /* State n == 3 */ - if ((st->cn_random_lfsr & 0x10000000L) != 0) - { - Sn = Sn ^ 1; - } - else - { - Sn = Sn ^ 0; - } - - noise_bits = noise_bits << 1; - noise_bits = noise_bits | st->cn_random_lfsr & 1; - - st->cn_random_lfsr >>= 1; - if (Sn & 1) - { - st->cn_random_lfsr |= 0x40000000L; - } - } - - return noise_bits; -} - static uint8_t random_1to6(struct gsmfr_preproc_state *st) { uint8_t range8, range6; - range8 = pseudonoise(st, 3); + range8 = gsmfr_preproc_prng(st, 3); range6 = fold_table_8to6[(st->cn_random_6fold << 3) | range8]; st->cn_random_6fold++; if (st->cn_random_6fold >= 3) @@ -82,7 +40,7 @@ c = frame + 5; /* now do the 4 subframes, mostly PRNG output */ for (sub = 0; sub < 4; sub++) { - Mc = pseudonoise(st, 2); + Mc = gsmfr_preproc_prng(st, 2); for (pulse = 0; pulse < 13; pulse++) xmc[pulse] = random_1to6(st); /* packing code from libgsm */