FreeCalypso > hg > gsm-codec-lib
view libgsmfr2/prng.c @ 282:9ee8ad3d4d30
frtest: rm gsmfr-hand-test and gsmfr-max-out utils
These hack programs were never properly documented and were written
only as part of a debug chase, in pursuit of a bug that ultimately
turned out to be in our then-hacky patch to osmo-bts-sysmo,
before beginning of proper patches in Osmocom. These hack programs
need to be dropped from the present sw package because they depend
on old libgsm, and we are eliminating that dependency.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 14 Apr 2024 05:44:47 +0000 |
parents | 573afa985df6 |
children |
line wrap: on
line source
/* * We use a pseudorandom sequence generator function in two places: * when generating comfort noise (GSM 06.12 section 6.1), and when * randomizing grid position parameters as part of speech muting * during error handling (GSM 06.11 section 6). * * Our PRNG is a copy of the pseudonoise() function from ETSI EFR code, * where it is used for similar purposes. */ #include <stdint.h> #include "tw_gsmfr.h" #include "pp_state.h" #include "pp_internal.h" uint16_t gsmfr_preproc_prng(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; }