FreeCalypso > hg > gsm-codec-lib
annotate dev/u2s-regen.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 | 20750ffb1c3e |
children |
rev | line source |
---|---|
222
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
230
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
2 * This program generates a G.711 mu-law decoding table of the same form |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
3 * as the u2s[] table in the toast_ulaw.c module in libgsm/toast; the intent |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
4 * is to replace that incorrect table with a corrected one. The "engine" |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
5 * function that does the computation is based on ulaw_expand() from ITU-T |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
6 * G.191 STL. |
222
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 */ |
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 |
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <stdio.h> |
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdlib.h> |
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 |
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 static unsigned |
230
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
13 ulaw_expand (input) |
222
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 unsigned input; |
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 { |
230
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
16 short segment; /* segment (Table 2/G711, column 1) */ |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
17 short mantissa; /* low nibble of log companded sample */ |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
18 short exponent; /* high nibble of log companded sample */ |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
19 short sign; /* sign of output sample */ |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
20 short step; |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
21 short output; |
222
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 |
230
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
23 sign = input < (0x0080) /* sign-bit = 1 for positiv values */ |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
24 ? -1 : 1; |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
25 mantissa = ~input; /* 1's complement of input value */ |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
26 exponent = (mantissa >> 4) & (0x0007); /* extract exponent */ |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
27 segment = exponent + 1; /* compute segment number */ |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
28 mantissa = mantissa & (0x000F); /* extract mantissa */ |
222
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 |
230
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
30 /* Compute Quantized Sample (14 bit left justified!) */ |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
31 step = (4) << segment; /* position of the LSB */ |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
32 /* = 1 quantization step) */ |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
33 output = sign * /* sign */ |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
34 (((0x0080) << exponent) /* '1', preceding the mantissa */ |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
35 +step * mantissa /* left shift of mantissa */ |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
36 + step / 2 /* 1/2 quantization step */ |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
37 - 4 * 33); |
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
38 return output & 0xFFFF; |
222
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 } |
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 |
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 main(argc, argv) |
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 char **argv; |
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 { |
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 unsigned input, output; |
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 |
224
b502321000aa
dev: new program a2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
223
diff
changeset
|
46 for (input = 0; input < 256; input++) { |
230
20750ffb1c3e
dev: new program u2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
225
diff
changeset
|
47 output = ulaw_expand(input); |
224
b502321000aa
dev: new program a2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
223
diff
changeset
|
48 printf("%6u,", output); |
b502321000aa
dev: new program a2s-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
223
diff
changeset
|
49 if ((input & 7) == 7) |
222
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 putchar('\n'); |
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 } |
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 exit(0); |
842136bbd0da
dev: new program s2a-regen
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 } |