fixeria has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/libosmocore/+/35755?usp=email )


Change subject: coding: fix wrong n_bits_total reported for PDTCH CS2 and CS3
......................................................................

coding: fix wrong n_bits_total reported for PDTCH CS2 and CS3

In gsm0503_pdtch_decode(), we decode CS2 and CS3 as if no puncturing
was employed, reordering the coded bits and setting punctured ones
to 0 manually.  Because of that, osmo_conv_decode_ber_punctured()
reports n_bits_total higher than we actually receive over the air.

Change-Id: I6b20cc450f25c48175a61da02644d66c08e22ece
Related: OS#6342, OS#6200
---
M src/coding/gsm0503_coding.c
M tests/coding/coding_test.ok
2 files changed, 31 insertions(+), 7 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/55/35755/1

diff --git a/src/coding/gsm0503_coding.c b/src/coding/gsm0503_coding.c
index 69a7ad4..022f465 100644
--- a/src/coding/gsm0503_coding.c
+++ b/src/coding/gsm0503_coding.c
@@ -1059,6 +1059,7 @@

                return 23;
        case 2:
+               /* reorder, set punctured bits to 0 (unknown state) */
                for (i = 587, j = 455; i >= 0; i--) {
                        if (!gsm0503_puncture_cs2[i])
                                cB[i] = cB[j--];
@@ -1066,10 +1067,13 @@
                                cB[i] = 0;
                }

+               /* decode as if puncturing was not employed (note '_np') */
                osmo_conv_decode_ber_punctured(&gsm0503_cs2_np, cB, conv,
-                                              n_errors, n_bits_total,
+                                              n_errors, NULL,
                                               gsm0503_puncture_cs2);
-
+               /* indicate the actual amount of coded bits (excluding 
punctured ones) */
+               if (n_bits_total != NULL)
+                       *n_bits_total = 456;

                /* 5.1.2.2 a) the three USF bits d(0),d(1),d(2) are precoded 
into six bits */
                for (i = 0; i < 8; i++) {
@@ -1097,6 +1101,7 @@

                return 34;
        case 3:
+               /* reorder, set punctured bits to 0 (unknown state) */
                for (i = 675, j = 455; i >= 0; i--) {
                        if (!gsm0503_puncture_cs3[i])
                                cB[i] = cB[j--];
@@ -1104,9 +1109,13 @@
                                cB[i] = 0;
                }

+               /* decode as if puncturing was not employed (note '_np') */
                osmo_conv_decode_ber_punctured(&gsm0503_cs3_np, cB, conv,
-                                              n_errors, n_bits_total,
+                                              n_errors, NULL,
                                               gsm0503_puncture_cs3);
+               /* indicate the actual amount of coded bits (excluding 
punctured ones) */
+               if (n_bits_total != NULL)
+                       *n_bits_total = 456;

                /* 5.1.3.2 a) the three USF bits d(0),d(1),d(2) are precoded 
into six bits */
                for (i = 0; i < 8; i++) {
diff --git a/tests/coding/coding_test.ok b/tests/coding/coding_test.ok
index ad8a98d..6767aea 100644
--- a/tests/coding/coding_test.ok
+++ b/tests/coding/coding_test.ok
@@ -270,7 +270,7 @@
 7f 7f 7f 81 7f 81 81 81 81 81 81 81 81 81 7f 7f 7f 7f 7f 81 81 81 81 7f 81 81 
7f 7f 7f 7f 7f 81 81 7f 7f 7f 7f 7f 7f 81 7f 7f 81 81 7f 7f 7f 81 81 7f 81 7f 
7f 7f 81 81 7f  81  7f  7f 81 81 7f 81 7f 7f 81 81 7f 81 7f 7f 81 7f 7f 81 7f 
81 81 7f 7f 7f 7f 7f 81 7f 81 7f 7f 7f 7f 81 81 7f 7f 81 81 7f 7f 7f 7f 81 81 
7f 81 81 7f 81 81 7f 7f 81 81 7f 81 81
 7f 81 81 81 81 7f 81 7f 7f 7f 81 81 7f 7f 7f 7f 81 81 81 7f 7f 7f 81 7f 81 7f 
7f 7f 81 81 81 7f 81 81 81 7f 7f 7f 81 81 81 7f 81 81 7f 81 81 7f 7f 81 81 7f 
81 81 81 81 81  7f  7f  7f 7f 7f 81 81 81 81 7f 7f 7f 81 81 81 7f 7f 7f 81 81 
7f 81 7f 7f 7f 81 81 7f 81 81 81 7f 7f 81 7f 81 81 81 7f 81 81 81 81 81 7f 81 
7f 81 81 81 81 81 7f 81 81 7f 7f 81 81 
 Decoded: a3 af 5f c6 36 43 44 ab d9 6d 7d 62 24 c9 d2 92 fa 27 5d 71 7a 59 a8 
42 a3 af 5f c6 36 43 44 ab a3 2f
-pdtch_decode: n_errors=0 n_bits_total=588 ber=0.00
+pdtch_decode: n_errors=0 n_bits_total=456 ber=0.00

 Encoding: a3 af 5f c6 36 43 44 ab d9 6d 7d 62 24 c9 d2 92 fa 27 5d 71 7a 59 a8 
42 a3 af 5f c6 36 43 44 ab a3 af 5f c6 36 43 44 03
 U-Bits:
@@ -284,7 +284,7 @@
 81 81 7f 7f 7f 81 81 7f 7f 7f 7f 7f 7f 7f 81 7f 7f 7f 7f 81 7f 81 7f 81 7f 81 
81 81 81 81 81 7f 81 7f 81 81 7f 7f 7f 81 81 81 7f 81 7f 81 81 81 81 81 7f 7f 
81 81 81 81 7f  7f  7f  81 7f 7f 7f 7f 81 81 7f 81 81 7f 7f 7f 81 81 7f 7f 81 
81 7f 81 81 7f 7f 81 81 7f 81 81 7f 7f 7f 7f 81 7f 81 7f 7f 7f 7f 7f 81 7f 7f 
7f 7f 7f 81 7f 81 81 7f 7f 81 81 81 7f 
 7f 81 81 81 7f 7f 7f 7f 81 7f 81 7f 7f 7f 7f 81 7f 7f 81 7f 7f 81 7f 81 7f 7f 
81 7f 7f 7f 81 7f 7f 81 81 7f 81 7f 7f 81 81 81 7f 81 7f 7f 7f 7f 81 7f 81 81 
81 7f 7f 7f 7f  7f  81  81 81 81 81 7f 7f 81 81 7f 7f 7f 7f 7f 81 81 7f 7f 81 
7f 7f 81 81 7f 81 81 81 7f 81 7f 7f 81 81 81 81 7f 81 7f 7f 81 7f 81 7f 7f 81 
81 81 81 7f 81 7f 7f 81 81 7f 7f 81 81
 Decoded: a3 af 5f c6 36 43 44 ab d9 6d 7d 62 24 c9 d2 92 fa 27 5d 71 7a 59 a8 
42 a3 af 5f c6 36 43 44 ab a3 af 5f c6 36 43 44 03
-pdtch_decode: n_errors=0 n_bits_total=676 ber=0.00
+pdtch_decode: n_errors=0 n_bits_total=456 ber=0.00

 Encoding: a3 af 5f c6 36 43 44 ab d9 6d 7d 62 24 c9 d2 92 fa 27 5d 71 7a 59 a8 
42 a3 af 5f c6 36 43 44 ab a3 af 5f c6 36 43 44 ab d9 6d 7d 62 24 c9 d2 92 fa 
27 5d 71 7a 28
 U-Bits:
@@ -326,7 +326,7 @@
 7f 7f 81 7f 81 81 7f 7f 7f 81 7f 7f 7f 81 81 7f 81 7f 81 7f 7f 7f 7f 7f 81 7f 
81 81 81 7f 81 7f 7f 7f 81 7f 7f 81 7f 7f 81 7f 7f 7f 81 7f 81 81 81 81 7f 81 
7f 81 7f 7f 81  81  7f  7f 7f 7f 81 81 7f 7f 7f 7f 7f 81 81 7f 7f 7f 81 7f 7f 
7f 81 81 7f 7f 7f 81 7f 7f 81 7f 81 7f 7f 7f 81 7f 7f 7f 7f 81 7f 7f 7f 7f 7f 
7f 81 7f 7f 81 7f 81 7f 7f 81 7f 81 81
 81 7f 81 7f 7f 81 7f 7f 81 81 7f 7f 81 7f 81 7f 7f 81 81 81 7f 81 7f 81 81 7f 
81 7f 81 7f 81 7f 81 7f 7f 7f 7f 7f 7f 81 81 7f 81 7f 7f 7f 81 7f 7f 7f 7f 7f 
81 7f 81 7f 81  7f  7f  7f 81 7f 81 7f 7f 81 7f 81 81 81 7f 7f 81 7f 7f 7f 81 
7f 7f 7f 7f 81 81 7f 81 81 81 7f 7f 7f 81 7f 7f 7f 7f 81 81 81 7f 7f 7f 7f 81 
7f 7f 81 7f 81 7f 7f 81 81 7f 7f 81 7f
 Decoded: 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 
00 00 00 00 00 00 00 00 00 00 00
-pdtch_decode: n_errors=0 n_bits_total=588 ber=0.00
+pdtch_decode: n_errors=0 n_bits_total=456 ber=0.00

 Encoding: 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 U-Bits:
@@ -340,7 +340,7 @@
 81 7f 81 7f 81 81 7f 7f 7f 81 7f 81 7f 7f 81 7f 7f 7f 81 7f 7f 81 7f 7f 7f 7f 
81 7f 7f 7f 7f 7f 81 81 7f 7f 7f 7f 7f 81 81 81 7f 7f 7f 7f 81 81 7f 81 7f 7f 
7f 7f 7f 81 7f  7f  7f  7f 81 7f 81 81 7f 7f 7f 81 7f 81 81 7f 81 7f 7f 7f 81 
7f 7f 7f 7f 81 7f 7f 7f 81 7f 7f 81 7f 7f 7f 7f 81 7f 81 7f 81 7f 7f 81 7f 81 
7f 7f 7f 7f 7f 7f 7f 7f 81 81 81 7f 7f
 7f 7f 81 7f 7f 7f 7f 81 7f 81 7f 7f 81 7f 7f 7f 7f 81 7f 81 7f 7f 7f 81 7f 7f 
81 7f 7f 7f 81 81 7f 81 7f 7f 7f 81 7f 81 7f 7f 7f 7f 81 81 7f 81 7f 81 7f 7f 
81 7f 81 7f 81  7f  81  7f 7f 7f 7f 7f 7f 81 7f 81 81 81 81 7f 7f 7f 7f 7f 7f 
81 7f 7f 7f 81 81 7f 81 7f 81 7f 7f 7f 81 7f 7f 81 7f 81 81 7f 81 7f 81 7f 7f 
7f 7f 81 7f 7f 7f 81 81 81 81 7f 7f 7f
 Decoded: 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-pdtch_decode: n_errors=0 n_bits_total=676 ber=0.00
+pdtch_decode: n_errors=0 n_bits_total=456 ber=0.00

 Encoding: 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00
 U-Bits:

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/35755?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I6b20cc450f25c48175a61da02644d66c08e22ece
Gerrit-Change-Number: 35755
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <[email protected]>
Gerrit-MessageType: newchange

Reply via email to