The industrial grade dual-channel wide-band SDR transceiver

Multi-BTS with Osmocom and a single UmTRX

Posted: July 23rd, 2015 | Author: | Filed under: Uncategorized | 36 Comments »



Early on in the design of UmTRX it was decided that it would be a dual-channel platform, with this being identified as supporting many target use cases and operator requirements, including:

  • dual-band operation, e.g. 1800MHz for local coverage and 900MHz for longer distance
  • road coverage, with a dedicated BTS and narrow beam antenna facing in each direction
  • two operators on a single system, e.g. one public and one private network

Not to mention that the capacity afforded by two carriers also happens to be the sweetspot for many villages and rural installations.

Given that making a single channel system which meets GSM specifications is sufficient a challenge in itself, the approach favoured was a dual-channel platform comprised of two completely independant transceivers — rather than two carriers with one transceiver and DSP tuning.

At the present time UmTRX is the only truly dual-channel transceiver that is fully compatible with the Osmocom GSM stack. There are some platforms which offer the ability to support two carriers with a single radio, but these are limited by the bandwidth of the transceiver and channels must be in the same band and cannot be spaced too far apart.

In this post we take a look at how it’s possible to run two separate GSM BTS instances with a single UmTRX. Which is to say, two independent base stations with only one UmTRX transceiver board, or commercial base station hardware that is based on this, such as the UmSITE product line.

Note that while a single BTS together with UmTRX can also be configured to use both channels — i.e. as a BTS equipped with dual-TRX — this is different as there is only a single BTS instance, with both TRX configured for the same band and connecting to a common BSC and network.

Hardware setup


The hardware setup used in testing is quite simple, with a UmTRX connected to a HP Microserver running Ubuntu 14.04.2 and the Osmocom software. The TX ports for channels 1 and 2 were connected to an Agilent E4406A VSA Transmitter Tester and an ISO-TECH ISA 830 TG spectrum analyser.

Software installation

Build tools and packaged dependencies were installed first via apt-get:

$ sudo apt-get install python-software-properties build-essential cmake libtool autoconf autotools-dev pkg-config git libopencore-amrnb-dev libsofia-sip-ua-dev libortp-dev sqlite3 libdbi-dev libdbd-sqlite3 libncurses5-dev libpcsclite-dev libusb-1.0-0-dev


The base UHD driver was installed next and packages with module support compiled-in are available via the Pothosware PPA, which can be added with:

$ sudo add-apt-repository ppa:guruofquality/pothos

Following which the Apt cache is updated and UHD can be installed, along with the Boost development files which are required in order to build the UmTRX module for UHD:

$ sudo apt-get update
$ sudo apt-get install uhd libboost1.54-all-dev

The UHD-Fairwave sources were cloned and built next:

$ git clone
$ cd UHD-Fairwaves/host
$ mkdir build
$ cd build
$ cmake ../
$ make

The UmTRX driver module can then be installed simply via “sudo make install”, else packaged as a Debian package via cpack. For more details see the Driver page.

Osmocom software

The Osmocom software is installed by cloning the sources, creating a build directory, entering this and running cmake, followed by configure and make etc. Rather than detail all these individual steps for each component in the software stack, just the required git branches along with any configuration options are noted here. See the linked wiki pages/sources for more details.


The following Osmocom libraries are required:

The master development branch should be used for each.


OpenBSC should be built from the fairwaves/master branch.

First OsmoBTS

The software for the first OsmoBTS instance should be built from the fairwaves/master branch. Remembering to configure TRX hardware during build with:

$ ./configure --enable-trx

Second OsmoBTS

At the time of writing multi-BTS functionality has not been integrated into the OsmoBTS main development branch, and so the software for the second OsmoBTS instance must be built from the achemeris/2sector branch. Once again, TRX hardware needs to be enabled, but this build of OsmoBTS should be installed to a different location from the first. For example, by using:

$ ./configure --prefix=/usr/local/special/2sector --enable-trx


Similarly, at the present time the achemeris/2sector branch of OsmoTRX must be used.

Once the OsmoBTS and OsmoTRX code to support multi-BTS configurations has been tidied up, this functionality will be available via the fairwaves/master branches of each.


The configuration used was based on the multi-BTS with handover example, with one major difference: each BTS instance must be configured to have only a single TRX, both in the OsmoBTS configurations and the OpenBSC NITB configuration sections for these. In our example it was decided to put BTS 0 on 1800MHz and BTS 1 on 900MHz.

So for BTS 0 the first 5 lines of configuration were:

bts 0 
 band DCS1800 
 ipa unit-id 1801 0 
 oml remote-ip 
 rtp bind-ip

And with BTS 1 the first 5 lines were:

bts 0 
 band GSM900 
 ipa unit-id 1802 0 
 oml remote-ip 
 rtp bind-ip

Note the use of different values for ipa unit-id.

The OpenBSC NITB configuration (open-bsc.cfg) used was based on the multi-BTS one, with the main difference being to remove the trx 1 config sections from bts 0 and bts 1. The first BTS was put on ARFCN 540, which has a downlink at 1810.8MHz, with the second BTS on ARFCN 63, which has a downlink frequency of 947.6MHz.


The OpenBSC network-in-the-box software was started first with:

$ osmo-nitb -c ~/.osmocom/open-bsc.cfg -l ~/.osmocom/hlr.sqlite3 -P -C --debug=DRLL:DCC:DMM:DRR:DRSL:DNM


Followed by the first BTS.

$ osmobts-trx -t 1 -c ~/.osmocom/osmo-bts-0.cfg


And then the second BTS, which was installed to a non-standard location:

$ /usr/local/special/2sector/bin/osmobts-trx -t 1 osmobts-trx -t 1 -c ~/.osmocom/osmo-bts-1.cfg


For obvious reasons each started with only one TRX.

Next the transceiver was started with two channels.

$ sudo osmo-trx -c 2


Note that the above screenshots were taken after everything had been started up.

With our two BTS network started we could then see that we had carriers on the expected ARFCNs.


So there we have it — you can now run two independent BTS instances with a single UmTRX board!

36 Comments on “Multi-BTS with Osmocom and a single UmTRX”

  1. 1 Stanley said at 5:53 pm on July 29th, 2015:

    Hi, I followed the steps but I got stuck on the second OsmoBTS software, I always get an error when trying to build it. Could you please provide some detailed steps concerning the second build. Also is it necessary to use the achemeris/2sector branch ?

  2. 2 Andrew Back said at 4:07 pm on July 30th, 2015:

    Hi Stanley, yes, you must use the achemeris/2sector branch for the 2nd OsmoBTS instance. The steps to build this are the same as for the 1st OsmoBTS, apart from the an alternate prefix specified with configure.

    If you’re still stuck if you could you please post more details of the error to the UmTRX mailing list.

  3. 3 Stanley said at 6:40 pm on July 30th, 2015:

    Hi, I downloaded the 2nd osmo-bts from this link :
    When I reach ” make ” I get the following error :
    make[3]: Entering directory `/home/Stanley/2ndosmobts/osmo-bts-achemeris/osmobts/osmo-bts/src/common’
    CC abis.o
    In file included from abis.c:42:0:
    /usr/local/include/osmocom/gsm/ipa.h:11:8: error: redefinition of ‘struct ipaccess_unit’
    struct ipaccess_unit {
    In file included from abis.c:41:0:
    /usr/local/include/osmocom/abis/ipaccess.h:7:8: note: originally defined here
    struct ipaccess_unit {
    abis.c: In function ‘abis_open’:
    abis.c:258:25: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default]
    bts_dev_info.unit_name = model_name;
    abis.c:261:25: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default]
    bts_dev_info.location2 = model_name;
    make[3]: *** [abis.o] Error 1
    make[3]: Leaving directory `/home/Stanley/2ndosmobts/osmo-bts-achemeris/osmobts/osmo-bts/src/common’
    make[2]: *** [all-recursive] Error 1
    make[2]: Leaving directory `/home/Stanley/2ndosmobts/osmo-bts-achemeris/osmobts/osmo-bts/src’
    make[1]: *** [all-recursive] Error 1
    make[1]: Leaving directory `/home/Stanley/2ndosmobts/osmo-bts-achemeris/osmobts/osmo-bts’
    make: *** [all] Error 2
    Should I download everything else one more time or only the osmo-bts application ?

  4. 4 Andrew Back said at 4:25 pm on July 31st, 2015:

    Which libosmo-abis branch are you using? Make sure that it is master and not fairwaves/master.

  5. 5 David said at 1:50 pm on August 11th, 2015:

    HI, does multi-BTS work on the older UmTRX v2.1. Also I noticed that some tutorials use TRX_0 and TRX_1 for each BTS, does the UmTRX support two signals on the same channel ?

  6. 6 Andrew Back said at 1:56 pm on August 11th, 2015:

    Yes, I used v2.1 UmTRX hardware. Just be certain to be running the latest driver and firmware etc.

    With Multi-BTS you are limited to a a single TRX per BTS and this gives a total of 2x ARFCN. You cannot have a TRX0 and TRX1 with each BTS — this would not work.

    Of course, it may be theoretically possible to have a single UmTRX support 4x ARFCN (2 per TRX, provided that they are closely spaced and this can be “digitally tuned”). However, I’m not aware of anyone having done this and you’d likely have to hack the transceiver software yourself.

  7. 7 David said at 1:27 pm on August 12th, 2015:

    I followed the exact steps but unfortunately I got an error when trying to run the two BTS together. Both applications (osmobts-trx) are working fine but not when they are run at the same time. When I try to launch the second one I get the following error:

    rtp bind-ip is now deprecated
    unable to connect/bind socket: Address already in use
    Error initializing telnet

  8. 8 David said at 8:17 am on August 13th, 2015:

    Hi, both BTS are working fine right now. Thanks for this great tutorial.

  9. 9 Stanley said at 11:57 am on August 13th, 2015:

    Hi, I also was able have the two channels working properly ! But I have a question concerning having two operators on a single system, how can we configure the system to give each BTS a certain MNC ?

  10. 10 Andrew Back said at 12:12 pm on August 13th, 2015:

    @David, that’s good to hear!

    @Stanley, good to hear that you are up and running also.

    As far as I know, in order to run two seperate networks you would need to have two instances of OpenBSC NITB. The simplest way would be to put these on different hosts/VMs and configure each BTS to bind to a different IP.

  11. 11 Stanley said at 12:56 pm on August 17th, 2015:

    1) Can the two instances of OpenBSC work on the same PC without VMs.

    2) Can’t we change some code so that both BTS work using only one OpenBSC NITB ?

  12. 12 john said at 7:41 am on August 20th, 2015:

    Hi, Is there a way to get the power transmitted or received by the MS such as the “chans” command in OpenBTS ?

  13. 13 Alexander Chemeris said at 10:09 pm on August 20th, 2015:

    1) You can’t do that without hacking the OpenBSC code – two instances will try to bind to the same ports and the second instance will fail. If you change the code to make ports configuratble, it will be a welcome change. Patches are welcome.
    2) Theoretically you can, but it’s not a simple change.

  14. 14 Alexander Chemeris said at 10:12 pm on August 20th, 2015:

    Use “show lchan summary” and related commands.

    There is also “meas_vis” application in OpenBSC repository to visualize those values in real-time in a console. We have made a web-based version of it too which you can use to monitor those values in a browser in real-time:

  15. 15 Chan said at 12:53 pm on September 10th, 2015:


    I was wondering if it is possible to have two working BTS where each one has a specific group of subscribers that can connect to, for example one would be used by any subscriber while the other can only be used by people having some privileges.

  16. 16 Alexander Chemeris said at 12:24 am on September 11th, 2015:

    This is possible if you configure two OsmoNITB and connect each OsmoBTS to its own OsmoNITB. See comments above on how to do that.

  17. 17 chan said at 8:05 am on October 28th, 2015:


    I’ve been trying to change some code in order to have the two BTS slightly different in terms of identity (different mnc, privileges …) but with no success.
    Can anyone guide me where should I be searching for the code to be changed ?

  18. 18 David said at 8:41 am on November 2nd, 2015:

    I noticed that the MS will only be able to connect to the primary BTS, for example if I remove the antenna of BTS-1 I will still be able to find the BTS-2 when scanning with my phone, but when I try to connect, BTS-2 doesn’t receive anything (as if it was only sending but not receiving data). Is this normal or did I miss something ?

  19. 19 David said at 10:40 am on November 4th, 2015:

    when trying to work with 2 BTS (same MCC, MNC), the phone can only connect to BTS0 while for BTS1 I get the following behaviour:

    Activating ARFCN
    RF Channel Release CMD due error 1

    Is there a bug or this is how it should work?

  20. 20 Alex said at 1:08 pm on November 7th, 2015:

    Does the UmTRX v2.1 support two BTS simultaneously ? Only one seems to fully work while the second BTS only transmits without receiving (can’t register to it).

  21. 21 Alexander Chemeris said at 1:17 pm on November 7th, 2015:

    Yes, both BTS should both receive and transmit. All versions of UmTRX have two independent receive and transmit channels.

  22. 22 Alex said at 1:49 pm on November 7th, 2015:

    Is it normal that I can’t connect to the second BTS ? I installed all the libraries as mentioned in this blog, it seems that everything is working fine apart from not being able to connect to BTS1.

    Thank you,

  23. 23 Alex said at 2:43 pm on November 7th, 2015:

    Is it normal that I can’t connect to the second BTS ? I installed all the libraries as mentioned in this blog, it seems that everything is working fine apart from not being able to connect to BTS1.

    Thank you,

  24. 24 Sami said at 11:50 am on November 9th, 2015:

    Does this setup require some special hardware connections, or we should only connect an antenna for each TX/RX ?

  25. 25 Ronald said at 7:16 pm on November 9th, 2015:

    Did not work for me. Only one BTS working as it should.

  26. 26 Alexander Chemeris said at 6:03 am on November 10th, 2015:

    No special setup – just connect antennas you normally do.

  27. 27 Alexander Chemeris said at 6:05 am on November 10th, 2015:

    Ok, may be something got broken since I wrote the code. I’ll check when I get a chance (not very soon, unfortunately).

    Also everyone is welcome to help debug this and cleaning this up to include it into the master branch. ;)

  28. 28 David said at 10:55 am on November 11th, 2015:

    I am willing to find what’s causing this problem, but I’m not sure if it’s caused by the BSC or the TRX side. Any suggestions ?

  29. 29 David said at 4:33 pm on November 17th, 2015:

    Still wasn’t able to find anything, I’m working with ubuntu 14.10 on a VM, might this be causing any problem ?

  30. 30 Sami said at 7:16 am on November 24th, 2015:

    Do both TRX depend on the same oscillator? Maybe it’s a hardware issue.

  31. 31 Alex said at 9:25 am on December 8th, 2015:

    How can we have two RX working using GnuRadio ?

  32. 32 Serving the Underserved with Open Source Mobile Infrastructure | SOPEE.NET IT KNOWLEDGE BASE said at 1:06 pm on December 14th, 2015:

    […] recent modification that Fairwaves were able to make to the Osmocom software meant that a single UmTRX transceiver could be used to support two fully independent base stations, or even two […]

  33. 33 Francois said at 8:34 am on December 22nd, 2015:

    was anyone able to have this setup working ?

  34. 34 Francois said at 4:59 pm on December 30th, 2015:

    I couldn’t register my phone to BTS1 although it looks like its working, also no handover was possible. Is it a hardware problem?

  35. 35 David said at 1:36 pm on March 14th, 2016:

    Has anyone been able to have it working yet ?

  36. 36 Francois said at 8:34 am on March 16th, 2016:

    most probably the hardware does not support this operation

Leave a Reply