fixeria has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-bsc/+/27745 )
Change subject: bts: gsm_bts_alloc(): use reasonable multi-rate config defaults
......................................................................
bts: gsm_bts_alloc(): use reasonable multi-rate config defaults
The current multi-rate configuration uses the same threshold and
the same hysteresis values for all modes: 32 and 8, respectively.
This basically forces the AMR link adoptation loop in the BTS to
stick to the initial codec mode during an lchan's lifetime.
Let's use more reasonable default values from 3GPP TS 51.010-1
(version 13.11.0), sections 14.2.19.4.1 and 14.2.20.4.1 for
AMR-FR and AMR-HR, respectively.
^ C/I (dB) | FR / HR |
| |
| |
MODE4 | |
= | ----+---- THR_MX_Up(3) | 20.5 / 18.0 |
| | |
| = ----+---- THR_MX_Dn(4) | 18.5 / 16.0 |
MODE3 | |
| = ----+---- THR_MX_Up(2) | 14.5 / 14.0 |
| | |
= | ----+---- THR_MX_Dn(3) | 12.5 / 12.0 |
MODE2 | |
= | ----+---- THR_MX_Up(1) | 8.5 / 10.0 |
| | |
| = ----+---- THR_MX_Dn(2) | 6.5 / 8.0 |
MODE1 | |
| |
| |
Change-Id: Ic5f8d55d250976d8d4c9cae2d89480fd52326717
Related: SYS#5917, OS#4984
---
M src/osmo-bsc/bts.c
1 file changed, 59 insertions(+), 18 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/45/27745/1
diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c
index 7855781..f4c90e0 100644
--- a/src/osmo-bsc/bts.c
+++ b/src/osmo-bsc/bts.c
@@ -169,7 +169,6 @@
struct gsm_bts *gsm_bts_alloc(struct gsm_network *net, struct gsm_bts_sm *bts_sm, uint8_t
bts_num)
{
struct gsm_bts *bts = talloc_zero(bts_sm, struct gsm_bts);
- int i;
if (!bts)
return NULL;
@@ -335,51 +334,93 @@
};
/* Set reasonable defaults for AMR-FR and AMR-HR rate configuration.
- * (see also 3GPP TS 28.062, Table 7.11.3.1.3-2) */
+ * The values are taken from 3GPP TS 51.010-1 (version 13.11.0).
+ * See 14.2.19.4.1 and 14.2.20.4.1 for AMR-FR and AMR-HR, respectively. */
static const struct gsm48_multi_rate_conf amr_fr_mr_cfg = {
.m4_75 = 1,
.m5_90 = 1,
- .m7_40 = 1,
+ .m7_95 = 1,
.m12_2 = 1
};
static const struct gsm48_multi_rate_conf amr_hr_mr_cfg = {
.m4_75 = 1,
.m5_90 = 1,
- .m7_40 = 1,
+ .m6_70 = 1,
+ .m7_95 = 1,
};
memcpy(bts->mr_full.gsm48_ie, &amr_fr_mr_cfg, sizeof(bts->mr_full.gsm48_ie));
memcpy(bts->mr_half.gsm48_ie, &amr_hr_mr_cfg, sizeof(bts->mr_half.gsm48_ie));
- static const struct amr_mode amr_ms_bts_mode[] = {
+ /* ^ C/I (dB) | FR / HR |
+ * | |
+ * | |
+ * MODE4 | |
+ * = | ----+---- THR_MX_Up(3) | 20.5 / 18.0 |
+ * | | |
+ * | = ----+---- THR_MX_Dn(4) | 18.5 / 16.0 |
+ * MODE3 | |
+ * | = ----+---- THR_MX_Up(2) | 14.5 / 14.0 |
+ * | | |
+ * = | ----+---- THR_MX_Dn(3) | 12.5 / 12.0 |
+ * MODE2 | |
+ * = | ----+---- THR_MX_Up(1) | 8.5 / 10.0 |
+ * | | |
+ * | = ----+---- THR_MX_Dn(2) | 6.5 / 8.0 |
+ * MODE1 | |
+ * | |
+ * | |
+ */
+ static const struct amr_mode amr_fr_ms_bts_mode[] = {
{
.mode = 0, /* 4.75k */
- .threshold = 32,
- .hysteresis = 8,
+ .threshold = 13, /* THR_MX_Dn(2): 6.5 dB */
+ .hysteresis = 4, /* THR_MX_Up(1): 8.5 dB */
},
{
.mode = 2, /* 5.90k */
- .threshold = 32,
- .hysteresis = 8,
+ .threshold = 25, /* THR_MX_Dn(3): 12.5 dB */
+ .hysteresis = 4, /* THR_MX_Up(2): 14.5 dB */
},
{
- .mode = 4, /* 7.40k */
- .threshold = 32,
- .hysteresis = 8,
+ .mode = 5, /* 7.95k */
+ .threshold = 37, /* THR_MX_Dn(4): 18.5 dB */
+ .hysteresis = 4, /* THR_MX_Up(3): 20.5 dB */
},
{
.mode = 7, /* 12.2k */
/* this is the last mode, so no threshold */
},
};
+ static const struct amr_mode amr_hr_ms_bts_mode[] = {
+ {
+ .mode = 0, /* 4.75k */
+ .threshold = 16, /* THR_MX_Dn(2): 8.0 dB */
+ .hysteresis = 4, /* THR_MX_Up(1): 10.0 dB */
+ },
+ {
+ .mode = 2, /* 5.90k */
+ .threshold = 24, /* THR_MX_Dn(3): 12.0 dB */
+ .hysteresis = 4, /* THR_MX_Up(2): 14.0 dB */
+ },
+ {
+ .mode = 3, /* 6.70k */
+ .threshold = 32, /* THR_MX_Dn(4): 16.0 dB */
+ .hysteresis = 4, /* THR_MX_Up(3): 18.0 dB */
+ },
+ {
+ .mode = 5, /* 7.95k */
+ /* this is the last mode, so no threshold */
+ },
+ };
- memcpy(&bts->mr_full.ms_mode[0], &amr_ms_bts_mode[0],
sizeof(amr_ms_bts_mode));
- memcpy(&bts->mr_full.bts_mode[0], &amr_ms_bts_mode[0],
sizeof(amr_ms_bts_mode));
- bts->mr_full.num_modes = 4;
+ memcpy(&bts->mr_full.ms_mode[0], &amr_fr_ms_bts_mode[0],
sizeof(amr_fr_ms_bts_mode));
+ memcpy(&bts->mr_full.bts_mode[0], &amr_fr_ms_bts_mode[0],
sizeof(amr_fr_ms_bts_mode));
+ bts->mr_full.num_modes = ARRAY_SIZE(amr_fr_ms_bts_mode);
- memcpy(&bts->mr_half.ms_mode[0], &amr_ms_bts_mode[0],
sizeof(amr_ms_bts_mode));
- memcpy(&bts->mr_half.bts_mode[0], &amr_ms_bts_mode[0],
sizeof(amr_ms_bts_mode));
- bts->mr_half.num_modes = 3;
+ memcpy(&bts->mr_half.ms_mode[0], &amr_hr_ms_bts_mode[0],
sizeof(amr_hr_ms_bts_mode));
+ memcpy(&bts->mr_half.bts_mode[0], &amr_hr_ms_bts_mode[0],
sizeof(amr_hr_ms_bts_mode));
+ bts->mr_half.num_modes = ARRAY_SIZE(amr_hr_ms_bts_mode);
bts_init_cbch_state(&bts->cbch_basic, bts);
bts_init_cbch_state(&bts->cbch_extended, bts);
--
To view, visit
https://gerrit.osmocom.org/c/osmo-bsc/+/27745
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: Ic5f8d55d250976d8d4c9cae2d89480fd52326717
Gerrit-Change-Number: 27745
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-MessageType: newchange