OAI and LimeSDR-Mini

Hello…as per my knowledge the OpenAirInterface Software Alliance are working towards the development of a 5G cellular stack that will run on commercial off-the- shelf (COTS) hardware, and they already have a functioning 4G (LTE) implementation that runs on a commodity Intel platform equipped with SDR.

pcb manufacturer

dhcard, Please,Could you share the .conf file for the Band passant 5Mhz and 10Mhz for Band 3 ?

Chears,

Here you go (would be funny if the upload function would allow at least text files, not just images…):

Active_eNBs = ( "eNB_Eurecom_LTEBox");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";

eNBs =
(
 {
    ////////// Identification parameters:
    eNB_ID    =  0xe00;

    cell_type =  "CELL_MACRO_ENB";

    eNB_name  =  "eNB_Eurecom_LTEBox";

    // Tracking area code, 0x0000 and 0xfffe are reserved values
    tracking_area_code  =  1;

    plmn_list = ( { mcc = 101; mnc = 10; mnc_length = 2; } );

    tr_s_preference     = "local_mac"

       ////////// Physical parameters:

    component_carriers = (
      {
        node_function                                         = "eNodeB_3GPP";
	node_timing                                           = "synch_to_ext_device";
	node_synch_ref                                        = 0;
        frame_type					      = "FDD";
        tdd_config 					      = 3;
        tdd_config_s            			      = 0;
        prefix_type             			      = "NORMAL";
        eutra_band              			      = 3;
        downlink_frequency      			      = 1822500000L;
        uplink_frequency_offset 			      = -95000000;
        Nid_cell					      = 0;
        N_RB_DL                 			      = 25;
        Nid_cell_mbsfn          			      = 0;
        nb_antenna_ports				      = 1;
        nb_antennas_tx          			      = 1;
        nb_antennas_rx          			      = 1;
        tx_gain                                            = 20;
        rx_gain                                            = 100;
        prach_root              			      = 0;
        prach_config_index      			      = 0;
        prach_high_speed        			      = "DISABLE";
        prach_zero_correlation  			      = 1;
        prach_freq_offset       			      = 2;
        pucch_delta_shift       			      = 1;
        pucch_nRB_CQI           			      = 1;
        pucch_nCS_AN            			      = 0;
        pucch_n1_AN             			      = 32;
        pdsch_referenceSignalPower 			      = -34;
        pdsch_p_b                  			      = 0;
        pusch_n_SB                 			      = 1;
        pusch_enable64QAM          			      = "DISABLE";
        pusch_hoppingMode                                  = "interSubFrame";
        pusch_hoppingOffset                                = 0;
        pusch_groupHoppingEnabled  			      = "ENABLE";
        pusch_groupAssignment      			      = 0;
        pusch_sequenceHoppingEnabled		   	      = "DISABLE";
        pusch_nDMRS1                                       = 1;
        phich_duration                                     = "NORMAL";
        phich_resource                                     = "ONESIXTH";
        srs_enable                                         = "DISABLE";
        /*  srs_BandwidthConfig                                =;
        srs_SubframeConfig                                 =;
        srs_ackNackST                                      =;
        srs_MaxUpPts                                       =;*/

        pusch_p0_Nominal                                   = -96;
        pusch_alpha                                        = "AL1";
        pucch_p0_Nominal                                   = -104;
        msg3_delta_Preamble                                = 6;
        pucch_deltaF_Format1                               = "deltaF2";
        pucch_deltaF_Format1b                              = "deltaF3";
        pucch_deltaF_Format2                               = "deltaF0";
        pucch_deltaF_Format2a                              = "deltaF0";
        pucch_deltaF_Format2b		    	      = "deltaF0";

        rach_numberOfRA_Preambles                          = 64;
        rach_preamblesGroupAConfig                         = "DISABLE";
        /*
        rach_sizeOfRA_PreamblesGroupA                      = ;
        rach_messageSizeGroupA                             = ;
        rach_messagePowerOffsetGroupB                      = ;
        */
        rach_powerRampingStep                              = 4;
        rach_preambleInitialReceivedTargetPower            = -104;
        rach_preambleTransMax                              = 10;
        rach_raResponseWindowSize                          = 10;
        rach_macContentionResolutionTimer                  = 48;
        rach_maxHARQ_Msg3Tx                                = 4;

        pcch_default_PagingCycle                           = 128;
        pcch_nB                                            = "oneT";
        bcch_modificationPeriodCoeff			      = 2;
        ue_TimersAndConstants_t300			      = 1000;
        ue_TimersAndConstants_t301			      = 1000;
        ue_TimersAndConstants_t310			      = 1000;
        ue_TimersAndConstants_t311			      = 10000;
        ue_TimersAndConstants_n310			      = 20;
        ue_TimersAndConstants_n311			      = 1;

	ue_TransmissionMode	   			      = 1;
      }
    );

    srb1_parameters :
    {
        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
        timer_poll_retransmit    = 80;

        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
        timer_reordering         = 35;

        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
        timer_status_prohibit    = 0;

        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
        poll_pdu                 =  4;

        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
        poll_byte                =  99999;

        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
        max_retx_threshold       =  4;
    }

    # ------- SCTP definitions
    SCTP :
    {
        # Number of streams to use in input/output
        SCTP_INSTREAMS  = 2;
        SCTP_OUTSTREAMS = 2;
    };

    ////////// MME parameters:
    mme_ip_address      = ( { ipv4       = "192.168.2.50";
                              ipv6       = "192:168:30::17";
                              active     = "yes";
                              preference = "ipv4";
                            }
                          );

    NETWORK_INTERFACES :
    {
        ENB_INTERFACE_NAME_FOR_S1_MME            = "wlp3s0";
        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.2.205/24";

        ENB_INTERFACE_NAME_FOR_S1U               = "wlp3s0";
        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.2.205/24";
        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
		
        ENB_IPV4_ADDRESS_FOR_X2C                 = "192.168.2.205/24";
        ENB_PORT_FOR_X2C                         = 36422; # Spec 36422

    };
  }
);

MACRLCs = (
	{
	num_cc = 1;
	tr_s_preference = "local_L1";
	tr_n_preference = "local_RRC";
	phy_test_mode = 0;
        puSch10xSnr     =  200;
        puCch10xSnr     =  200;
        }  
);

L1s = (
    	{
	num_cc = 1;
	tr_n_preference = "local_mac";
        }  
);

RUs = (
    {		  
       local_rf       = "yes"
         nb_tx          = 1;
         nb_rx          = 1;
         att_tx         = 80;
         att_rx         = 0;
         bands          = [3];
         max_pdschReferenceSignalPower = -33;
         max_rxgain                    = 80;
         eNB_instances  = [0];

    }
);  

NETWORK_CONTROLLER :
{
    FLEXRAN_ENABLED        = "no";
    FLEXRAN_INTERFACE_NAME = "lo";
    FLEXRAN_IPV4_ADDRESS   = "127.0.0.1";
    FLEXRAN_PORT           = 2210;
    FLEXRAN_CACHE          = "/mnt/oai_agent_cache";
    FLEXRAN_AWAIT_RECONF   = "no";
};

THREAD_STRUCT = (
  {
    #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
    parallel_config    = "PARALLEL_RU_L1_TRX_SPLIT";
    #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
    worker_config      = "WORKER_ENABLE";
  }
);

     log_config :
     {
       global_log_level                      ="info";
       global_log_verbosity                  ="medium";
       hw_log_level                          ="info";
       hw_log_verbosity                      ="high";
       phy_log_level                         ="info";
       phy_log_verbosity                     ="high";
       mac_log_level                         ="info";
       mac_log_verbosity                     ="high";
       rlc_log_level                         ="info";
       rlc_log_verbosity                     ="medium";
       pdcp_log_level                        ="info";
       pdcp_log_verbosity                    ="medium";
       rrc_log_level                         ="info";
       rrc_log_verbosity                     ="high";
    };

Please note that you will need to modify the frequency and other parameters according to your own network config!

Just did a git pull on the develop branch and the previously working setup is not compiling anymore. Would be nice if someone can try to compile latest develop with LMSSDR.

MOD:

OK, it seems we have two issues:

  1. The latest develop branch fails to compile, to resolve this, go back to this version:

git checkout f6cab340

  1. A recent modification in the lms_lib.cpp file causes the LMS driver not to compile:

    targets/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp

    -LMS_VCTCXOWrite(lms_device,129);
    +LMS_VCTCXOWrite(lms_device,129, true);

Remove the “, true” part and try to compile it.

I also updated the Soapy and MyriadRF to latest master branch, but without the above 2 steps, it will not compile.

what is difference between :

LMS_VCTCXOWrite(lms_device,129);
and

LMS_VCTCXOWrite(lms_device,129, true);

have a look on it : https://xiaolimars.wordpress.com/2019/02/04/limesdrmini-with-oai/

The difference is when the “,true” part is there, the develop branch stops compiling, even with the latest soapy and myriadrf repos. If I remove, OAI compiles and runs again.

In my case, I can only get a stable connection between the phone and the eNB with the following parameters for the eNB conf.

eutra_band = 3;
downlink_frequency = 1865000000L;
uplink_frequency_offset = -95000000;
tx_gain  = 80;
rx_gain  = 55;
pdsch_referenceSignalPower  = -55;

The phone needs to be pretty close to the LimeSDRMini, about 10cm

@Niels: your pdsch_referenceSignalPower is not correct for sure. For TX gain 80, the pdsch_referenceSignalPower is -33 or -34(dBm) @5MHz. On 10MHz its half (-36 -37dBm). This is not something you can choose, this is an exact value based on the output power (=TX gain in our case) and the bandwidth.

You can play with the rx_gain and the max_rx_gain values, as if you put the RX gain a bit too high, the phone/modem can still back off its TX power. But if you set an incorrect pdsch_referenceSignalPower which is not in pair with the TX power and bandwidth, you will mislead the phone and the channel response calculation, meas reports etc. will all fail.

Use also modem not phone, for example for me, for modem huawei, Huawei E5573B, even it take 20cm of the nodeb , it still run! not for the phone,it need to be very close of the phone

Use also modem not phone, for example for me, for modem huawei, Huawei E5573B, even it take 20cm of the nodeb , it still run! not for the phone,it need to be very close of the phone

Use also modem not phone, for example for me, for modem huawei, Huawei E5573B, even it take 20cm of the nodeb , it still run! not for the phone,it need to be very close of the phone

@dchard Thanks for your info! I have made the calculation and I know that my refSignalPower is not right. But somehow my phone can connect very well with those values. And I get a stable internet connection, even though it shouldn’t work. I cannot connect my phone otherwise with the pdsch_referenceSignalPower at -33. That is why I am confused.

@dast Yes I will try with a modem as well. I have a Huawei E3372 but so far I didn’t manage to connect it to the LimeSDRMini. I’ll keep you updated.

mine run correctly now,

I understand what you say, I just reflected to it that your problem is not necessarily the pdsch reference power, but maybe something else (like the RX gain settings) solved your issues. Changing the pdsch ref sig power to incorrect values can only do harm, trust me.

To tell you something interesting: I have two LG test phones, both of them connect stable now. Not really pushing a lot of data, but stable constant ping and some browsing do work.

On the other hand, two of my Xiaomi phones (Note 3 SE and Mi 8 Lite), are not connected even once. Not even doing random access.

The 9kHz freq error is definitely huge on the Lime Mini, this can be a reason. Thats why I want to try the external reference, but I am not sure how to do that.

First of all, can I just connect a 10MHz reference to the REF SIG IN on the mini, or do I need to do any HW mods?

Hey @Niels, how to calculate this refSignalPower? Did you have any formula?

The reference signal power depends on the output power and the channel bandwidth. In order to calculate it, you need to know the exact output power. As that is something you cant know, you need to measure it, for example with a power meter, a spectrum analyzer or a vector signal analyzer. There is no way around measuring it. Thats why I provided the correct values for 5 and 10MHz with a reasonable TX gain on band 3.

If you need refsig values for other bands, let me know.

1 Like

I would like to havee refsign for the band 8 if possible?

Here are the ref.sig.power values for band8:

5MHz, TX gain=77: the ref sig power is -20dBm
10MHz, TX gain=75: the ref sig power is -24dBm

Higher gain values resulted in increased EVM, so these are the highest TX gain values which produces reasonable EVM (1-2% EVM, 4-5% EVM peak).

On band8 the TX power of the Mini is also greater: it can push -4dBm total power out at 10MHz TX gain=75. In comparison, on 1800MHz the Mini was only able to produce -17dBm output at TX gain=80.

Here are the ref.sig.power values for band20:

5MHz, TX gain=76: the ref sig power is -20dBm
10MHz, TX gain=73: the ref sig power is -25dBm

Here are the ref.sig.power values for band7:

5MHz, TX gain=70: the ref sig power is -38dBm
10MHz, TX gain=73: the ref sig power is -39dBm

Please note that on band7 the frequency error is 12KHz or more, that is completely unacceptable. This is likely the cause of the bad EVM performance on this band as well.

Here are the ref.sig.power values for band1:

5MHz, TX gain=75: the ref sig power is -30dBm
10MHz, TX gain=73: the ref sig power is -36dBm

The frequency error on band1 is around 10KHz. According to 3GPP on 2GHz the freqeuncy error should be ±100Hz or less. This can affect if the UE can synch to the Lime Mini or not, and how stable the connection will be.

1 Like

@Niels

Just to elaborate on my previous findings: I tried to attach my Mi8 Lite which was not able to connect previously, but this time instead of 1800, I switched to 800MHz band 20). And now it is connected the first time. The only difference is tat on 800, the frequency error is less then half comapred to 1800MHz.

So if someone has connectivity issues, trying lower bands (band 20 and band 8) might help.

1 Like