<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/25444">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Power Control Loop: Set P_CON_INTERVAL to 1 by default<br><br>TS 45.008 section 4.7.1:<br>"""<br>Upon receipt of a command from an SACCH to change its power level on the corresponding uplink channel, the MS<br>shall change to the new level at a rate of one nominal 2 dB power control step every 60 ms (13 TDMA frames), i.e. a<br>range change of 15 steps should take about 900 ms. The change shall commence at the first TDMA frame belonging to<br>the next reporting period (as specified in subclause 8.4). The MS shall change the power one nominal 2 dB step at a<br>time, at a rate of one step every 60 ms following the initial change, irrespective of whether actual transmission takes<br>place or not.<br>"""<br><br>Since the reported MS_PWR in L1 SACCH Header is, according to specs, the<br>one used for the last block of the previous SACCH period, it becomes<br>clear the first SACCH block after a requested MS Power Level change by<br>the network may contain mismatches between the announced MS_PWR by the<br>MS and the measured Rxlev/RxQual. Hence, let's better use a<br>P_CON_INTERVAL of 1 which retriggers the MS Power Control Loop every second<br>SACCH block.<br><br>Related: SYS#5371<br>Change-Id: Iade5b597e0e56b07c6d78995fcec7c641e4e643f<br>---<br>M doc/manuals/chapters/power_control.adoc<br>M src/osmo-bsc/bts_vty.c<br>M src/osmo-bsc/gsm_data.c<br>M tests/power_ctrl.vty<br>4 files changed, 47 insertions(+), 14 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/44/25444/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/doc/manuals/chapters/power_control.adoc b/doc/manuals/chapters/power_control.adoc</span><br><span>index 95adbb1..54cbd5b 100644</span><br><span>--- a/doc/manuals/chapters/power_control.adoc</span><br><span>+++ b/doc/manuals/chapters/power_control.adoc</span><br><span>@@ -150,20 +150,46 @@</span><br><span> be suspended for a certain number of SACCH multiframes defined by VTY parameter</span><br><span> `ctrl-interval`.  Given that SACCH is relatively slow and transmission of a data block</span><br><span> takes 480 ms, suspension allows an observation of the effect of one power control</span><br><span style="color: hsl(0, 100%, 40%);">-decision before initiating the next one.</span><br><span style="color: hsl(120, 100%, 40%);">+decision before initiating the next one. This is mostly important due to the</span><br><span style="color: hsl(120, 100%, 40%);">+fact that MS must change the transmit power at nominal steps of 2dB every 60ms</span><br><span style="color: hsl(120, 100%, 40%);">+(TS 45.008 sec 4.7.1). As a result, if the network requests the MS to change its</span><br><span style="color: hsl(120, 100%, 40%);">+transmit power by several MS Power Levels at a time, the MS will do so gradually</span><br><span style="color: hsl(120, 100%, 40%);">+over the next measurement period. Hence, upon next received L1 SACCH block, the</span><br><span style="color: hsl(120, 100%, 40%);">+_MS_PWR_ value announced by the MS will match only the one used to transmit the</span><br><span style="color: hsl(120, 100%, 40%);">+last block, and so the related measured RxLevel/RxQual values will be</span><br><span style="color: hsl(120, 100%, 40%);">+inaccurate. By skipping one or several SACCH blocks, the algorithm will always</span><br><span style="color: hsl(120, 100%, 40%);">+use values which match correctly the announced _MS_PWR_ and the measured</span><br><span style="color: hsl(120, 100%, 40%);">+RxLevel/RxQual (because the _MS_PWR_ will already have changed and hence will be</span><br><span style="color: hsl(120, 100%, 40%);">+kept stable over that measurement period).</span><br><span> </span><br><span> ----</span><br><span> OsmoBSC(config-bs-power-ctrl)# ctrl-interval ?</span><br><span>   <0-31>  P_CON_INTERVAL, in units of 2 SACCH periods (0.96 seconds)</span><br><span> ----</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-By default, the suspension interval is set to 0 for both MS/BS power control loops,</span><br><span style="color: hsl(0, 100%, 40%);">-therefore the power control decision is taken every 480 ms (one SACCH block period).</span><br><span style="color: hsl(0, 100%, 40%);">-Setting `ctrl-interval` to 1 increases the interval to 960 ms, so basically every</span><br><span style="color: hsl(0, 100%, 40%);">-second Uplink SACCH block is skipped;  value 2 corresponds to the interval of</span><br><span style="color: hsl(0, 100%, 40%);">-1920 ms, so 3/4 received SACCH blocks are skipped.</span><br><span style="color: hsl(120, 100%, 40%);">+The value to use for this parameter is closely related to that of VTY option</span><br><span style="color: hsl(120, 100%, 40%);">+`step-size inc <2-6> red <2-4>`, which configures the maximum step (in dB) at</span><br><span style="color: hsl(120, 100%, 40%);">+which the MS Power can be requested to changed when the MS Power Control Loop is</span><br><span style="color: hsl(120, 100%, 40%);">+triggered. The higher the `step-size`, the more time it will need the MS to do</span><br><span style="color: hsl(120, 100%, 40%);">+the necessary ramping of 2 dB steps, and hence the amount of time required for</span><br><span style="color: hsl(120, 100%, 40%);">+the MS to settle on the requested MS Power Level for an entire SACCH block. Or</span><br><span style="color: hsl(120, 100%, 40%);">+equally, the time the network can start using the full measurement period to</span><br><span style="color: hsl(120, 100%, 40%);">+trigger the MS Power Control Loop again with reliable measurements</span><br><span style="color: hsl(120, 100%, 40%);">+(`P_CON_INTERVAL`).</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-3GPP TS 45.008 briefly mentions this parameter in table A.1 (P_Con_INTERVAL).</span><br><span style="color: hsl(120, 100%, 40%);">+By default, increment `step-size` is set to 4 dB and the decrement `step-size`</span><br><span style="color: hsl(120, 100%, 40%);">+is set to 2 dB, hence the MS requiring `4 * 60 = 240` milliseconds. That's less</span><br><span style="color: hsl(120, 100%, 40%);">+than 1 measurement period (480 ms), hence only the first measurement period</span><br><span style="color: hsl(120, 100%, 40%);">+needs to be skipped. Therefore, the suspension interval is set to 1 for both</span><br><span style="color: hsl(120, 100%, 40%);">+MS/BS power control loops, and so the power control decision is taken every 960</span><br><span style="color: hsl(120, 100%, 40%);">+ms (every second SACCH block period).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Setting `ctrl-interval` to 0 increases the interval to 480 ms, so basically no</span><br><span style="color: hsl(120, 100%, 40%);">+SACCH block is skipped and MS Power Control loop is triggered upon receival of</span><br><span style="color: hsl(120, 100%, 40%);">+every UL SACCH block. Value 2 corresponds to the interval of 1920 ms, so 3/4</span><br><span style="color: hsl(120, 100%, 40%);">+received SACCH blocks are skipped.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+3GPP TS 45.008 briefly mentions this parameter in table A.1 (`P_Con_INTERVAL`).</span><br><span> </span><br><span> A small time graph is depicted below for better understanding of the meaning of</span><br><span> values for this parameter, since it is not obvious at all.</span><br><span>@@ -173,8 +199,8 @@</span><br><span> |<-->| - one SACCH multi-frame period</span><br><span> |    |</span><br><span> |----|----|----|----|----|----|----|----|----> SACCH multi-frames</span><br><span style="color: hsl(0, 100%, 40%);">-a) *    *    *    *    *    *    *    *    *      P_CON_INTERVAL=0 (0.48 s, default)</span><br><span style="color: hsl(0, 100%, 40%);">-b) *         *         *         *         *      P_CON_INTERVAL=1 (0.96 s)</span><br><span style="color: hsl(120, 100%, 40%);">+a) *    *    *    *    *    *    *    *    *      P_CON_INTERVAL=0 (0.48 s)</span><br><span style="color: hsl(120, 100%, 40%);">+b) *         *         *         *         *      P_CON_INTERVAL=1 (0.96 s, default)</span><br><span> c) *                   *                   *      P_CON_INTERVAL=2 (1.92 s)</span><br><span> d) *                             *                P_CON_INTERVAL=3 (2.88 s)</span><br><span> e) *                                       *      P_CON_INTERVAL=4 (3.84 s)</span><br><span>diff --git a/src/osmo-bsc/bts_vty.c b/src/osmo-bsc/bts_vty.c</span><br><span>index dbfe5e4..3774344 100644</span><br><span>--- a/src/osmo-bsc/bts_vty.c</span><br><span>+++ b/src/osmo-bsc/bts_vty.c</span><br><span>@@ -2978,7 +2978,7 @@</span><br><span>          X(BSC_VTY_ATTR_NEW_LCHAN),</span><br><span>           "ctrl-interval <0-31>",</span><br><span>              "Set power control interval (for dynamic mode)\n"</span><br><span style="color: hsl(0, 100%, 40%);">-             "P_CON_INTERVAL, in units of 2 SACCH periods (0.96 seconds)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+             "P_CON_INTERVAL, in units of 2 SACCH periods (0.96 seconds)(default=1)\n")</span><br><span> {</span><br><span>      struct gsm_power_ctrl_params *params = vty->index;</span><br><span> </span><br><span>@@ -3928,8 +3928,7 @@</span><br><span>            if (cp->dir == GSM_PWR_CTRL_DIR_DL)</span><br><span>                       cfg_out(" bs-power dyn-max %u%s", cp->bs_power_max_db, VTY_NEWLINE);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-           if (cp->ctrl_interval > 0)</span><br><span style="color: hsl(0, 100%, 40%);">-                        cfg_out(" ctrl-interval %u%s", cp->ctrl_interval, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_out(" ctrl-interval %u%s", cp->ctrl_interval, VTY_NEWLINE);</span><br><span>                 cfg_out(" step-size inc %u red %u%s",</span><br><span>                      cp->inc_step_size_db, cp->red_step_size_db,</span><br><span>                    VTY_NEWLINE);</span><br><span>diff --git a/src/osmo-bsc/gsm_data.c b/src/osmo-bsc/gsm_data.c</span><br><span>index 02d9fd7..a6c54d8 100644</span><br><span>--- a/src/osmo-bsc/gsm_data.c</span><br><span>+++ b/src/osmo-bsc/gsm_data.c</span><br><span>@@ -1142,6 +1142,8 @@</span><br><span>       .inc_step_size_db = 4, /* 2, 4, or 6 dB */</span><br><span>   .red_step_size_db = 2, /* 2 or 4 dB */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    .ctrl_interval = 1, /* Trigger loop every second SACCH block. TS 45.008 sec 4.7.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       /* RxLev measurement parameters */</span><br><span>   .rxlev_meas = {</span><br><span>              /* Thresholds for RxLev (see 3GPP TS 45.008, A.3.2.1) */</span><br><span>diff --git a/tests/power_ctrl.vty b/tests/power_ctrl.vty</span><br><span>index 8cb695f..af02cd4 100644</span><br><span>--- a/tests/power_ctrl.vty</span><br><span>+++ b/tests/power_ctrl.vty</span><br><span>@@ -7,6 +7,7 @@</span><br><span>    mode static</span><br><span>   ms-power-control</span><br><span>    mode dyn-bts</span><br><span style="color: hsl(120, 100%, 40%);">+   ctrl-interval 1</span><br><span>    step-size inc 4 red 2</span><br><span>    rxlev-thresh lower 32 upper 38</span><br><span>    rxlev-thresh-comp lower 10 12 upper 19 20</span><br><span>@@ -70,6 +71,7 @@</span><br><span>   bs-power-control</span><br><span>    mode dyn-bts</span><br><span>    bs-power dyn-max 12</span><br><span style="color: hsl(120, 100%, 40%);">+   ctrl-interval 1</span><br><span>    step-size inc 4 red 2</span><br><span>    rxlev-thresh lower 32 upper 38</span><br><span>    rxlev-thresh-comp lower 10 12 upper 19 20</span><br><span>@@ -96,9 +98,11 @@</span><br><span>   bs-power-control</span><br><span> ...</span><br><span>    ctrl-interval 31</span><br><span style="color: hsl(0, 100%, 40%);">-... !ctrl-interval</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span>   ms-power-control</span><br><span style="color: hsl(0, 100%, 40%);">-... !ctrl-interval</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+   ctrl-interval 1</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span> </span><br><span> OsmoBSC(config-bs-power-ctrl)# exit</span><br><span> OsmoBSC(config-net-bts)# ms-power-control</span><br><span>@@ -131,6 +135,7 @@</span><br><span> ...</span><br><span>   ms-power-control</span><br><span>    mode dyn-bts</span><br><span style="color: hsl(120, 100%, 40%);">+   ctrl-interval 1</span><br><span>    step-size inc 4 red 2</span><br><span>    rxlev-thresh lower 32 upper 38</span><br><span>    rxlev-thresh-comp lower 10 12 upper 19 20</span><br><span>@@ -283,6 +288,7 @@</span><br><span>    mode static</span><br><span>   ms-power-control</span><br><span>    mode dyn-bts</span><br><span style="color: hsl(120, 100%, 40%);">+   ctrl-interval 1</span><br><span>    step-size inc 4 red 2</span><br><span>    rxlev-thresh lower 32 upper 38</span><br><span>    rxlev-thresh-comp lower 10 12 upper 19 20</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/25444">change 25444</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-bsc/+/25444"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Iade5b597e0e56b07c6d78995fcec7c641e4e643f </div>
<div style="display:none"> Gerrit-Change-Number: 25444 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>