Project

General

Profile

Bug #3395

Uplink CS/MCS control is broken osmo-pcu is used with osmo-bts-trx/osmo-trx

Added by ipse over 1 year ago. Updated about 1 month ago.

Status:
Feedback
Priority:
Urgent
Assignee:
Target version:
-
Start date:
07/14/2018
Due date:
% Done:

0%

Spec Reference:
TS 05.05

Description

Not sure which project to assign this to.

GprsMs::update_cs_ul() function (osmo-pcu/src/gprs_ms.cpp) is used to control the UL CS/MCS mode and in its current implementation is relies on the Quality "Q" value reported by L1. Osmo-trx does not really calculate the SNR of the link and thus osmo-bts-trx always report Q as 0. This misleads the current algorithm which always drops the CS/MCS to the lowest possible mode (CS-1/MCS-1).

Possible solutions I see:
1) Use another metric, like BER which are reported by osmo-bts-trx. A similar method is already used by the DL CS/MCS control.
2) Implement SNR calculation in osmo-trx. A better way, but much more involved.

compute_edge_ci.diff compute_edge_ci.diff 3.36 KB fixeria, 10/04/2019 08:33 PM

Related issues

Related to OsmoBTS - Bug #1616: osmo-bts-trx / osmo-bts-octphy doesn't provide C/I information to PCU Resolved02/23/2016

Related to OsmoBTS - Feature #1855: provide actual BER or C/I values from osmo-bts-trx into the PCUResolved11/18/2016

Related to OsmoBTS - Feature #2977: OsmoBTS measurment processing at L1SAP too complex / pass measurements along with dataIn Progress02/21/2018

Related to OsmoPCU - Bug #3834: MS set_mode()/set_current_cs_*() inconsistent resultsNew03/12/2019

Related to OsmoPCU - Bug #1833: UPLINK MCS gets reduced from MCS9->MCS6 when good radio condition existsFeedback10/25/2016

Related to OsmoPCU - Bug #3929: Missing PCU_Tests.ttcn link adaptation testsNew04/15/2019

History

#1 Updated by laforge over 1 year ago

this is not an osmo-pcu bug, but an osmo-bts-trx bug. It doesn't compute/fill-in all the values of the primitives at the PCU socket. See #1616 from two years ago, and #1855 from one year ago.

#2 Updated by laforge over 1 year ago

  • Related to Bug #1616: osmo-bts-trx / osmo-bts-octphy doesn't provide C/I information to PCU added

#3 Updated by laforge over 1 year ago

  • Related to Feature #1815: tool for building binary ipk from .list/.control added

#4 Updated by laforge over 1 year ago

  • Related to deleted (Feature #1815: tool for building binary ipk from .list/.control)

#5 Updated by laforge over 1 year ago

  • Related to Feature #1855: provide actual BER or C/I values from osmo-bts-trx into the PCU added

#6 Updated by laforge over 1 year ago

on a more general notice, see https://osmocom.org/versions/122 for the various known issues of osmo-bts-trx compared with other osmo-bts-* variants.

#7 Updated by laforge about 1 year ago

#8 Updated by laforge about 1 year ago

#9 Updated by laforge 11 months ago

#10 Updated by laforge 11 months ago

#11 Updated by msuraev 10 months ago

  • Related to Feature #2977: OsmoBTS measurment processing at L1SAP too complex / pass measurements along with data added

#12 Updated by fixeria 9 months ago

  • Status changed from New to Feedback

2) Implement SNR calculation in osmo-trx. A better way, but much more involved.

A few days ago I did some research on this. As it turns out, OsmoTRX already does (AVG) noise measurements during IDLE frames, please see: https://git.osmocom.org/osmo-trx/tree/Transceiver52M/Transceiver.cpp#n627. After looking at debug output coming from Transceiver::logRxBurst(), I think that such noise measurements are being done correctly: in case of false-positive detections noise == rssi (that's expected), while the UL bursts coming from a MS have rssi > noise.

As far as I understand, we should attach noise level to every burst on TRXD (TRX Data interface) coming towards OsmoBTS. The problem is that the current version of TRX protocol is not flexible. A TRXD message (i.e. UL or DL burst) has a fixed header of fixed size, and there is no space left for noise level :/

As a possible solution, we can attach noise level at the end of TRXD messages - after the burst bits. OsmoTRX still does send two dummy (padding?) bytes at the end of UL TRXD messages (OsmoBTS just ignores them), so we can use one of them. But IMHO, this is more a hack than a proper solution. Ideally, we need a new version of TRX protocol, where we could use TLVs.

#13 Updated by msuraev 8 months ago

  • Related to Bug #3834: MS set_mode()/set_current_cs_*() inconsistent results added

#14 Updated by laforge 7 months ago

  • Assignee set to lynxis

#15 Updated by laforge 7 months ago

  • Priority changed from Normal to Urgent

#16 Updated by lynxis 7 months ago

  • Spec Reference set to TS 05.05

#17 Updated by lynxis 7 months ago

  • Status changed from Feedback to Stalled

#18 Updated by lynxis 6 months ago

  • Assignee changed from lynxis to tnt

#19 Updated by laforge 4 months ago

  • Assignee changed from tnt to lynxis

#20 Updated by pespin 2 months ago

fixeria is this related to the CI value (int16_t ci) added to UL burst indications in TRXDv1? How does that related to the value used in GprsMs::update_cs_ul()? What does exactly need to be done here?

#22 Updated by fixeria 2 months ago

  • Status changed from Stalled to Feedback

[...] Osmo-trx does not really calculate the SNR of the link and thus osmo-bts-trx always report Q as 0.
[...] is this related to the CI value (int16_t ci) added to UL burst indications in TRXDv1?

Yes, but it needs to be clarified that osmo-bts-trx is sending C/I (Carrier-to-Interference ratio) as Q to the PCU, not SNR (Signal-to-Noise ratio). It's used to pick a proper coding scheme for Uplink, and seems to work already (at least for GPRS). I am sure ipse and kluchnikov can comment more on this ticket.

What I noticed during testing is that somehow these C/I measurements are not getting attached to the control blocks, so OsmoPCU may still warn "Unable to update UL (M)CS because we don't have link quality measurements". Please see: https://git.osmocom.org/osmo-pcu/tree/src/pdch.cpp#n815

As can be seen, when calling rcv_data_block(data, data_len, fn, meas, cs) we pass the received measurements, but when calling rcv_control_block(data, data_len, block, fn) we don't. In case of EDGE, the code path is more complicated so I am not sure if it's also affected.

Also, I am working on TTCN-3 test cases for the link adaptation.

#23 Updated by pespin about 2 months ago

I am actually seeing these messages while using Edge, that's why I was asking:

20190925123116705 DRLCMACMEAS <0007> osmo-pcu/src/gprs_ms.cpp:644 Unable to update UL (M)CS CS-2 because we don't have link quality measurements.

So actually I can see set_link_qual() being called, for instance in this code path:

(gdb) bt
#0  pcu_rx_data_ind (data_ind=0x7fffffffdde4)
    at osmo-pcu/src/pcu_l1_if.cpp:291
#1  0x0000555555580112 in pcu_rx (msg_type=2 '\002', pcu_prim=0x7fffffffdde0)
    at osmo-pcu/src/pcu_l1_if.cpp:665
#2  0x00005555555a49b7 in pcu_sock_read (bfd=0x55555565e660)
    at osmo-pcu/src/osmobts_sock.cpp:152
#3  0x00005555555a4bbc in pcu_sock_cb (bfd=0x55555565e660, flags=1)
    at osmo-pcu/src/osmobts_sock.cpp:208
#4  0x00007ffff7cf87b6 in osmo_fd_disp_fds (_rset=0x7fffffffdfc0,
    _wset=0x7fffffffe040, _eset=0x7fffffffe0c0)
    at libosmocore/src/select.c:225
#5  0x00007ffff7cf898d in _osmo_select_main (polling=0)
    at libosmocore/src/select.c:263
#6  0x00007ffff7cf89b8 in osmo_select_main (polling=0)
    at libosmocore/src/select.c:272
#7  0x00005555555724d8 in main (argc=3, argv=0x7fffffffe2a8)
    at osmo-pcu/src/pcu_main.cpp:354

But in the code path triggering the error message pasted above, have_link_qual is obviously not set:

Breakpoint 5, GprsMs::update_cs_ul (this=0x5555557a4300, meas=0x7fffffffdb60)
    at osmo-pcu/src/gprs_ms.cpp:644
644                     LOGP(DRLCMACMEAS, LOGL_ERROR,
(gdb) bt
#0  GprsMs::update_cs_ul (this=0x5555557a4300, meas=0x7fffffffdb60)
    at osmo-pcu/src/gprs_ms.cpp:644
#1  0x000055555557bda3 in GprsMs::update_l1_meas (this=0x5555557a4300,
    meas=0x7fffffffdb60)
    at osmo-pcu/src/gprs_ms.cpp:695
#2  0x0000555555598aea in gprs_rlcmac_pdch::rcv_resource_request (
    this=0x5555555f8ce0 <s_bts+4096>, request=0x5555556f9790, fn=2093203)
    at osmo-pcu/src/pdch.cpp:625
#3  0x00005555555991d3 in gprs_rlcmac_pdch::rcv_control_block (
    this=0x5555555f8ce0 <s_bts+4096>,
    data=0x7fffffffdde6 "@\027\375\344[\245\347\b\262\263qY\234",
    data_len=23 '\027', rlc_block=0x5555556f66e0, fn=2093203)
    at osmo-pcu/src/pdch.cpp:709
#4  0x0000555555599a7c in gprs_rlcmac_pdch::rcv_block_gprs (
    this=0x5555555f8ce0 <s_bts+4096>,
    data=0x7fffffffdde6 "@\027\375\344[\245\347\b\262\263qY\234",
    data_len=23 '\027', fn=2093203, meas=0x7fffffffdd40, cs=...)
    at osmo-pcu/src/pdch.cpp:832
#5  0x0000555555599412 in gprs_rlcmac_pdch::rcv_block (
    this=0x5555555f8ce0 <s_bts+4096>,
    data=0x7fffffffdde6 "@\027\375\344[\245\347\b\262\263qY\234",
    len=23 '\027', fn=2093203, meas=0x7fffffffdd40)
    at osmo-pcu/src/pdch.cpp:745
--Type <RET> for more, q to quit, c to continue without paging--
#6  0x000055555557dd3b in pcu_rx_data_ind_pdtch (trx_no=0 '\000',
    ts_no=7 '\a',
    data=0x7fffffffdde6 "@\027\375\344[\245\347\b\262\263qY\234",
    len=23 '\027', fn=2093203, meas=0x7fffffffdd40)
    at osmo-pcu/src/pcu_l1_if.cpp:253
#7  0x000055555557e0a2 in pcu_rx_data_ind (data_ind=0x7fffffffdde4)
    at osmo-pcu/src/pcu_l1_if.cpp:300
#8  0x0000555555580112 in pcu_rx (msg_type=2 '\002', pcu_prim=0x7fffffffdde0)
    at osmo-pcu/src/pcu_l1_if.cpp:665
#9  0x00005555555a49b7 in pcu_sock_read (bfd=0x55555565e660)
    at osmo-pcu/src/osmobts_sock.cpp:152
#10 0x00005555555a4bbc in pcu_sock_cb (bfd=0x55555565e660, flags=1)
    at osmo-pcu/src/osmobts_sock.cpp:208

So afaiu, filling of struct pcu_l1_meas meas object occurs in rcv_resource_request(Packet_Resource_Request_t *request) when it calls get_meas(&meas, request); (pdch.cpp:624). But looking at the get_meas(struct pcu_l1_meas *meas, const Packet_Resource_Request_t *qr) implementation, set_link_qual() is not called there, so of course have_link_qual is always 0 in that code path. The related Packet_Resource_Request_t received in that code path (and afaiu the struct from wher ewe probably need to extract the link_qual and fill it in the meas object):

Breakpoint 6, gprs_rlcmac_pdch::rcv_resource_request (
    this=0x5555555f8ce0 <s_bts+4096>, request=0x5555556f9790, fn=2234955)
    at /home/pespin/dev/sysmocom/git/osmo-pcu/src/pdch.cpp:624
624                             get_meas(&meas, request);
(gdb) print request
$9 = (Packet_Resource_Request_t *) 0x5555556f9790
(gdb) print *request
$10 = {MESSAGE_TYPE = 5 '\005', PayloadType = 1 '\001', spare = 0 '\000',
  R = 0 '\000', Exist_ACCESS_TYPE = 1 '\001', ACCESS_TYPE = 3 '\003', ID = {
    UnionType = 1 '\001', u = {Global_TFI = {UnionType = 151 '\227', u = {
          UPLINK_TFI = 110 'n', DOWNLINK_TFI = 110 'n'}}, TLLI = 3079761559}},
  Exist_MS_Radio_Access_capability = 1 '\001', MS_Radio_Access_capability = {
    Count_MS_RA_capability_value = 1 '\001', MS_RA_capability_value = {{
        IndexOfAccTech = 2 '\002', u = {Content = {
            RF_Power_Capability = 1 '\001', Exist_A5_bits = 0 '\000',
            A5_bits = 0 '\000', ES_IND = 1 '\001', PS = 1 '\001',
            VGCS = 0 '\000', VBS = 0 '\000',
            Exist_Multislot_capability = 1 '\001', Multislot_capability = {
              Exist_HSCSD_multislot_class = 0 '\000',
              HSCSD_multislot_class = 0 '\000',
              Exist_GPRS_multislot_class = 1 '\001',
              GPRS_multislot_class = 12 '\f',
              GPRS_Extended_Dynamic_Allocation_Capability = 1 '\001',
              Exist_SM = 1 '\001', SMS_VALUE = 7 '\a', SM_VALUE = 1 '\001',
              Exist_ECSD_multislot_class = 0 '\000',
              ECSD_multislot_class = 0 '\000',
              Exist_EGPRS_multislot_class = 1 '\001',
              EGPRS_multislot_class = 12 '\f',
              EGPRS_Extended_Dynamic_Allocation_Capability = 1 '\001',
              Exist_DTM_GPRS_multislot_class = 1 '\001',
--Type <RET> for more, q to quit, c to continue without paging--
              DTM_GPRS_multislot_class = 3 '\003', Single_Slot_DTM = 0 '\000',
              DTM_EGPRS_Params = {Exist_DTM_EGPRS_multislot_class = 1 '\001',
                DTM_EGPRS_multislot_class = 3 '\003'}},
            Exist_Eight_PSK_Power_Capability = 1 '\001',
            Eight_PSK_Power_Capability = 2 '\002',
            COMPACT_Interference_Measurement_Capability = 0 '\000',
            Revision_Level_Indicator = 1 '\001',
            UMTS_FDD_Radio_Access_Technology_Capability = 0 '\000',
            UMTS_384_TDD_Radio_Access_Technology_Capability = 0 '\000',
            CDMA2000_Radio_Access_Technology_Capability = 0 '\000',
            UMTS_128_TDD_Radio_Access_Technology_Capability = 0 '\000',
            GERAN_Feature_Package_1 = 1 '\001',
            Exist_Extended_DTM_multislot_class = 0 '\000',
            Extended_DTM_GPRS_multislot_class = 0 '\000',
            Extended_DTM_EGPRS_multislot_class = 0 '\000',
            Modulation_based_multislot_class_support = 0 '\000',
            Exist_HighMultislotCapability = 0 '\000',
            HighMultislotCapability = 0 '\000',
            Exist_GERAN_lu_ModeCapability = 0 '\000',
            GERAN_lu_ModeCapability = 0 '\000',
            GMSK_MultislotPowerProfile = 3 '\003',
            EightPSK_MultislotProfile = 3 '\003',
            MultipleTBF_Capability = 0 '\000',
--Type <RET> for more, q to quit, c to continue without paging--
            DownlinkAdvancedReceiverPerformance = 1 '\001',
            ExtendedRLC_MAC_ControlMessageSegmentionsCapability = 1 '\001',
            DTM_EnhancementsCapability = 1 '\001',
            Exist_DTM_GPRS_HighMultislotClass = 0 '\000',
            DTM_GPRS_HighMultislotClass = 0 '\000',
            DTM_EGPRS_HighMultislotClass = {
              Exist_DTM_EGPRS_HighMultislotClass = 0 '\000',
              DTM_EGPRS_HighMultislotClass = 0 '\000'},
            PS_HandoverCapability = 0 '\000'},
          Additional_access_technologies = {
            Count_additional_access_technologies = 1 '\001',
            Additional_access_technologies = {{
                Access_Technology_Type = 16777217,
                GMSK_Power_class = 0 '\000',
                Eight_PSK_Power_class = 0 '\000'}}}}}, {
        IndexOfAccTech = 0 '\000', u = {Content = {
            RF_Power_Capability = 0 '\000', Exist_A5_bits = 0 '\000',
            A5_bits = 0 '\000', ES_IND = 0 '\000', PS = 0 '\000',
            VGCS = 0 '\000', VBS = 0 '\000',
            Exist_Multislot_capability = 0 '\000', Multislot_capability = {
              Exist_HSCSD_multislot_class = 0 '\000',
              HSCSD_multislot_class = 0 '\000',
              Exist_GPRS_multislot_class = 0 '\000',
--Type <RET> for more, q to quit, c to continue without paging--
              GPRS_multislot_class = 0 '\000',
              GPRS_Extended_Dynamic_Allocation_Capability = 0 '\000',
              Exist_SM = 0 '\000', SMS_VALUE = 0 '\000', SM_VALUE = 0 '\000',
              Exist_ECSD_multislot_class = 0 '\000',
              ECSD_multislot_class = 0 '\000',
              Exist_EGPRS_multislot_class = 0 '\000',
              EGPRS_multislot_class = 0 '\000',
              EGPRS_Extended_Dynamic_Allocation_Capability = 0 '\000',
              Exist_DTM_GPRS_multislot_class = 0 '\000',
              DTM_GPRS_multislot_class = 0 '\000', Single_Slot_DTM = 0 '\000',
              DTM_EGPRS_Params = {Exist_DTM_EGPRS_multislot_class = 0 '\000',
                DTM_EGPRS_multislot_class = 0 '\000'}},
            Exist_Eight_PSK_Power_Capability = 0 '\000',
            Eight_PSK_Power_Capability = 0 '\000',
            COMPACT_Interference_Measurement_Capability = 0 '\000',
            Revision_Level_Indicator = 0 '\000',
            UMTS_FDD_Radio_Access_Technology_Capability = 0 '\000',
            UMTS_384_TDD_Radio_Access_Technology_Capability = 0 '\000',
            CDMA2000_Radio_Access_Technology_Capability = 0 '\000',
            UMTS_128_TDD_Radio_Access_Technology_Capability = 0 '\000',
            GERAN_Feature_Package_1 = 0 '\000',
            Exist_Extended_DTM_multislot_class = 0 '\000',
            Extended_DTM_GPRS_multislot_class = 0 '\000',
--Type <RET> for more, q to quit, c to continue without paging--
            Extended_DTM_EGPRS_multislot_class = 0 '\000',
            Modulation_based_multislot_class_support = 0 '\000',
            Exist_HighMultislotCapability = 0 '\000',
            HighMultislotCapability = 0 '\000',
            Exist_GERAN_lu_ModeCapability = 0 '\000',
            GERAN_lu_ModeCapability = 0 '\000',
            GMSK_MultislotPowerProfile = 0 '\000',
            EightPSK_MultislotProfile = 0 '\000',
            MultipleTBF_Capability = 0 '\000',
            DownlinkAdvancedReceiverPerformance = 0 '\000',
            ExtendedRLC_MAC_ControlMessageSegmentionsCapability = 0 '\000',
            DTM_EnhancementsCapability = 0 '\000',
            Exist_DTM_GPRS_HighMultislotClass = 0 '\000',
            DTM_GPRS_HighMultislotClass = 0 '\000',
            DTM_EGPRS_HighMultislotClass = {
              Exist_DTM_EGPRS_HighMultislotClass = 0 '\000',
              DTM_EGPRS_HighMultislotClass = 0 '\000'},
            PS_HandoverCapability = 0 '\000'},
          Additional_access_technologies = {
            Count_additional_access_technologies = 0 '\000',
            Additional_access_technologies = {{
                Access_Technology_Type = AccTech_GSMP,
                GMSK_Power_class = 0 '\000',
--Type <RET> for more, q to quit, c to continue without paging--
                Eight_PSK_Power_class = 0 '\000'}}}}}}},
  Channel_Request_Description = {PEAK_THROUGHPUT_CLASS = 0 '\000',
    RADIO_PRIORITY = 0 '\000', RLC_MODE = RLC_MODE_ACKNOWLEDGED,
    LLC_PDU_TYPE = 1 '\001', RLC_OCTET_COUNT = 52},
  Exist_CHANGE_MARK = 0 '\000', CHANGE_MARK = 0 '\000', C_VALUE = 60 '<',
  Exist_SIGN_VAR = 0 '\000', SIGN_VAR = 0 '\000', Slot = {{Exist = 0,
      I_LEVEL = 0 '\000'}, {Exist = 0, I_LEVEL = 0 '\000'}, {Exist = 0,
      I_LEVEL = 0 '\000'}, {Exist = 0, I_LEVEL = 0 '\000'}, {Exist = 0,
      I_LEVEL = 0 '\000'}, {Exist = 0, I_LEVEL = 0 '\000'}, {Exist = 0,
      I_LEVEL = 0 '\000'}, {Exist = 0, I_LEVEL = 0 '\000'}},
  Exist_AdditionsR99 = 1 '\001', AdditionsR99 = {
    Exist_EGPRS_BEP_LinkQualityMeasurements = 0,
    EGPRS_BEP_LinkQualityMeasurements = {Exist_MEAN_CV_BEP_GMSK = 0,
      MEAN_BEP_GMSK = 0 '\000', CV_BEP_GMSK = 0 '\000',
      Exist_MEAN_CV_BEP_8PSK = 0, MEAN_BEP_8PSK = 0 '\000',
      CV_BEP_8PSK = 0 '\000'},
    Exist_EGPRS_TimeslotLinkQualityMeasurements = 0,
    EGPRS_TimeslotLinkQualityMeasurements = {Exist_BEP_MEASUREMENTS = 0,
      BEP_MEASUREMENTS = {{Exist = 0, UnionType = 0 '\000', u = {
            MEAN_BEP_GMSK = 0 '\000', MEAN_BEP_8PSK = 0 '\000'}}, {Exist = 0,
          UnionType = 0 '\000', u = {MEAN_BEP_GMSK = 0 '\000',
            MEAN_BEP_8PSK = 0 '\000'}}, {Exist = 0, UnionType = 0 '\000', u = {
            MEAN_BEP_GMSK = 0 '\000', MEAN_BEP_8PSK = 0 '\000'}}, {Exist = 0,
--Type <RET> for more, q to quit, c to continue without paging--
          UnionType = 0 '\000', u = {MEAN_BEP_GMSK = 0 '\000',
            MEAN_BEP_8PSK = 0 '\000'}}, {Exist = 0, UnionType = 0 '\000', u = {
            MEAN_BEP_GMSK = 0 '\000', MEAN_BEP_8PSK = 0 '\000'}}, {Exist = 0,
          UnionType = 0 '\000', u = {MEAN_BEP_GMSK = 0 '\000',
            MEAN_BEP_8PSK = 0 '\000'}}, {Exist = 0, UnionType = 0 '\000', u = {
            MEAN_BEP_GMSK = 0 '\000', MEAN_BEP_8PSK = 0 '\000'}}, {Exist = 0,
          UnionType = 0 '\000', u = {MEAN_BEP_GMSK = 0 '\000',
            MEAN_BEP_8PSK = 0 '\000'}}}, Exist_INTERFERENCE_MEASUREMENTS = 0,
      INTERFERENCE_MEASUREMENTS = {{Exist = 0, I_LEVEL = 0 '\000'}, {
          Exist = 0, I_LEVEL = 0 '\000'}, {Exist = 0, I_LEVEL = 0 '\000'}, {
          Exist = 0, I_LEVEL = 0 '\000'}, {Exist = 0, I_LEVEL = 0 '\000'}, {
          Exist = 0, I_LEVEL = 0 '\000'}, {Exist = 0, I_LEVEL = 0 '\000'}, {
          Exist = 0, I_LEVEL = 0 '\000'}}}, Exist_PFI = 0, PFI = 0 '\000',
    MS_RAC_AdditionalInformationAvailable = 0 '\000',
    RetransmissionOfPRR = 0 '\000'}}

#24 Updated by pespin about 2 months ago

Ah I think I understand the issue now. So meas is filled in way before in the stack in pcu_rx_data_ind(), and passed down to rcv_block_gprs(). In there, in the rcv_data_block() case the meas object is further passed down, but in the rcv_control_block() case it's not, and a new meas object without link_qual is used. So I guess we should be passing the meas object there too.

#25 Updated by pespin about 2 months ago

At least my errors got fixed by these ones:
remote: https://gerrit.osmocom.org/c/osmo-pcu/+/15600 pdch.cpp: Refactor bitvec param passing in rcv_control_block
remote: https://gerrit.osmocom.org/c/osmo-pcu/+/15601 pdch.cpp: Use pcu_l1_meas previously filled by lower layers

#26 Updated by fixeria about 2 months ago

  • Related to Bug #1833: UPLINK MCS gets reduced from MCS9->MCS6 when good radio condition exists added

#27 Updated by fixeria about 1 month ago

Also, I am working on TTCN-3 test cases for the link adaptation.

We now have a test case for testing CS (only GPRS for now) adaptation during an active TBF:
https://gerrit.osmocom.org/r/Ia78d93e43a3c41b0b30e70df20a2da31077fd05f

Unfortunately it does not pass, because somehow OsmoPCU changes the coding scheme later that it's expected.

#28 Updated by fixeria about 1 month ago

  • Related to Bug #3929: Missing PCU_Tests.ttcn link adaptation tests added

#29 Updated by fixeria about 1 month ago

There is also an issue observed by Fairwaves: OsmoTRX calculates relatively lower C/I values for EDGE/8-PSK bursts (compared to GMSK). Please see an attached patch that has never been submitted to the mainstream, but I believe it should fix the problem.

Also available in: Atom PDF

Add picture from clipboard (Maximum size: 48.8 MB)