<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20727">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">BTS_Tests: add TC_ms_pwr_ctrl_pf_ewma: test EWMA based power filtering<br><br>This test case is very similar to TC_ms_pwr_ctrl_constant(), but the<br>key difference that we simulate sharp UL RSSI changes between -50 dBm<br>and -100 dBm on each iteration.<br><br>The 'uplink-power-target' (-75 dBm) is right in the middle of the<br>change range, so with EWMA filtering and 80% smoothing it's expected<br>that all averaged UL RSSI values would be around -75 dBm.<br><br>It's expected that the Uplink power level remains constant, however<br>this test case fails at the moment.  The problem is that the IUT is<br>still quite sensitive to small deviations from 'uplink-power-target',<br>so ideally we should introduce a 'delta' defining a range:<br><br>  'uplink-power-target' - 'delta' ... 'uplink-power-target' + 'delta'<br><br>in which the MS power loop should not trigger any power changes.<br><br>For example, let's say:<br><br>  'uplink-power-target' is -75 dBm (default), and<br>  'delta' is 5 dBm,<br><br>so then the range would be: -80 dBm ... -70 dBm.<br><br>Change-Id: I3be1a4a4a0ab7eebb9a930eee7039295c045a791<br>Related: SYS#4916<br>---<br>M bts/BTS_Tests.ttcn<br>1 file changed, 74 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/27/20727/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn</span><br><span>index 9503bec..6b61f04 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -6862,6 +6862,19 @@</span><br><span>       return f_TC_ms_pwr_ctrl_cb_def(l1h, num_blocks);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_ms_pwr_ctrl_cb_rssi_pwm(inout SacchL1Header l1h, integer num_blocks)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on ConnHdlr return octetstring {</span><br><span style="color: hsl(120, 100%, 40%);">+  /* UL RSSI oscillation driven by SACCH block number */</span><br><span style="color: hsl(120, 100%, 40%);">+        if (num_blocks rem 2 == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+          f_trxc_fake_rssi(-100);</span><br><span style="color: hsl(120, 100%, 40%);">+       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              f_trxc_fake_rssi(-50);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Make sure that MS power level remains constant */</span><br><span style="color: hsl(120, 100%, 40%);">+  return f_TC_ms_pwr_ctrl_cb_const(l1h, num_blocks);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Make sure that MS power level remains constant when 'rx-current' equals 'rx-target' */</span><br><span> private function f_TC_ms_pwr_ctrl_constant(charstring id)</span><br><span> runs on ConnHdlr {</span><br><span>@@ -6919,6 +6932,66 @@</span><br><span>     Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Test Exponentially Weighted Moving Average (EWMA) power filtering */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_ms_pwr_ctrl_pf_ewma(charstring id)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer num_blocks := 16;</span><br><span style="color: hsl(120, 100%, 40%);">+ timer T := int2float(num_blocks);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_l1_tune(L1CTL);</span><br><span style="color: hsl(120, 100%, 40%);">+     RSL.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* These IEs are needed for autonomous MS power control */</span><br><span style="color: hsl(120, 100%, 40%);">+    var template (value) RSL_IE_List ies := {</span><br><span style="color: hsl(120, 100%, 40%);">+             t_RSL_IE(RSL_IE_MS_POWER, RSL_IE_Body:{</span><br><span style="color: hsl(120, 100%, 40%);">+                        ms_power := ts_RSL_IE_MS_Power(g_pars.l1_pars.ms_power_level)</span><br><span style="color: hsl(120, 100%, 40%);">+                }),</span><br><span style="color: hsl(120, 100%, 40%);">+           t_RSL_IE(RSL_IE_MS_POWER_PARAM, RSL_IE_Body:{</span><br><span style="color: hsl(120, 100%, 40%);">+                  ms_power_params := ts_RSL_IE_MS_Power_Parameters(''O)</span><br><span style="color: hsl(120, 100%, 40%);">+                })</span><br><span style="color: hsl(120, 100%, 40%);">+    };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Ensure that 'rx-current' equals 'rx-target' */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_trxc_fake_rssi(mp_uplink_power_target);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Establish a dedicated channel */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_est_dchan(more_ies := valueof(ies));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      L1CTL.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+  T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] as_TC_ms_pwr_ctrl(refers(f_TC_ms_pwr_ctrl_cb_rssi_pwm), num_blocks);</span><br><span style="color: hsl(120, 100%, 40%);">+       [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "Not all SACCH blocks were processed in time, ",</span><br><span style="color: hsl(120, 100%, 40%);">+                            num_blocks, " were not handled");</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_ms_pwr_ctrl_pf_ewma() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+ var ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Explicitly configure EWMA filtering with 80% smoothing (alpha = 0.2) */</span><br><span style="color: hsl(120, 100%, 40%);">+    f_vty_config(BTSVTY, "bts 0", "uplink-power-filtering algo ewma beta 80");</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Explicitly configure the Uplink power target (in dBm) */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_vty_config(BTSVTY, "bts 0", "uplink-power-target " & int2str(mp_uplink_power_target));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    // for (var integer i := 0; i < sizeof(g_AllChanTypes); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+      for (var integer i := 0; i < 1; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+              pars := valueof(t_Pars(g_AllChanTypes[i], ts_RSL_ChanMode_SIGN));</span><br><span style="color: hsl(120, 100%, 40%);">+             log(testcasename(), ": starting on ", pars.chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              vc_conn := f_start_handler(refers(f_TC_ms_pwr_ctrl_pf_ewma),</span><br><span style="color: hsl(120, 100%, 40%);">+                                     pars, trxc_comp := true);</span><br><span style="color: hsl(120, 100%, 40%);">+          vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* No need to reset Uplink power parameters - the IUT restarts anyway */</span><br><span style="color: hsl(120, 100%, 40%);">+      Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* test generation of RLL ERR IND based on Um errors (TS 48.058 3.9) */</span><br><span> /*     protocol error as per 44.006 */</span><br><span> /*   link layer failure (repetition of I-frame N200 times without ACK */</span><br><span>@@ -7102,6 +7175,7 @@</span><br><span>  execute( TC_chopped_ipa_payload() );</span><br><span> </span><br><span>     execute( TC_ms_pwr_ctrl_constant() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_ms_pwr_ctrl_pf_ewma() );</span><br><span> }</span><br><span> </span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20727">change 20727</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-ttcn3-hacks/+/20727"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I3be1a4a4a0ab7eebb9a930eee7039295c045a791 </div>
<div style="display:none"> Gerrit-Change-Number: 20727 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>