LTE, GNU Radio, and USRPs

Update: This post is approaching 2 years in age, and as you might expect, some of the information is no longer up-to-date. I am working on a post update with new information. In the meantime, I wouldn't rely on this post for anything other than a general list of options. -Ben 02/10/2015

Hacking with cellular technology is, for both hardware and software developers, very sexy. It's a great application for showing off hardware, provides opportunities for really interesting software challenges, and is an impressive demo. And, as it turns out, working implementations are incredibly useful! As an example, USRPs are used with an open implementation of the GSM stack to provide cellular service in very rural towns in some areas. This open GSM implementation is, of course, OpenBTS.

As LTE gets rolled out throughout more cities and countries, and most new handsets are LTE-capable, an LTE implementation as functional and available as OpenBTS is a highly-sought, but elusive, commodity. Let's look at a rundown of some of what is out there (in no particular order):

The different options are all in various states, and implement different parts of an LTE system (e.g., basestation, handsets, downlink, uplink, etc.,). Let's dive into each one in a bit more detail.

Disclaimer

So as it turns out, most of the information out there regarding available LTE implementations is actually about people looking for available LTE implementations. I found it very difficult to find any hard information about most of the options.

This post is based purely on the information I could find available online in late June 2013. I hope it changes soon!

1) Bellard's / Amarisoft's LTE-eNodeB

This is the most operational and impressive of the available implementations. It is a full eNodeB implementation (the basestation), including the uplink and downlink. It is written entirely in host software, and uses an N-series USRP for the radio front-end. We have tested the software in the office, and it is really quite impressive.

The only downside to this software is that it isn't open-source. It is entirely closed source, distributed in binary form, and a paid license is required to use it.

2) Johannes Demel's Work at KIT: gr-lte

gr-lte is a GNURadio module written principally, as far as I can tell, by Johannes Demel, currently a Masters student at KIT. This work was part of Johannes' B.S. work, and it looks like Johannes has made some great progress on the code. The lab that Johannes is a part of, the CEL, is on a roll when it comes to talented people and fantastic contributions to GNU Radio such as gr-specest and gr-ofdm (both principally the work of Martin Braun).

gr-lte focuses on building an LTE receiver - specifically, the reception, synchronization, and decoding of LTE signals. So, unlike Fabrice's work, gr-lte implements what you would typically consider part of an LTE handset, or User Equipment (UE) - not the basestation.

It is FOSS (GPL v3), but the docs say it requires MATLAB for the *.m scripts that it uses for DSP. I haven't looked into it further, and so am uncertain if Octave could be substituted - it's possible that it uses MATLAB toolboxes that Octave doesn't replicate.

Unfortunately, it hasn't been updated in a few months, and I'm not sure how much of it is stable / fully operational.

Regardless, gr-lte is the only FOSS work happening in the public, that I'm aware of, made to work as a GNU Radio module - which makes it immediately more useful, accessible, and potentially important.

3) OpenLTE

OpenLTE focuses on the transmission and reception of the downlink. So, whereas Fabrice's work is a full basestation implementation (downlink and uplink), and Johannes's work focuses on receiving the downlink, OpenLTE does a bit of both sides.

OpenLTE is the work of a Motorola SW engineer, Ben Wojtowicz, working on it as a hobby. It is fully open source, and even includes Octave scripts for simulating the link - talk about thorough design of the spec! According to the website, the software can TX & RX a file between two RTL-SDR nodes.

The bad news is that it looks like the code was last updated in March, and the mailing list traffic is pretty light. It's obvious that a lot of work has been put into the project already, but it's not clear how active development still is.

4) Eurecom's OpenAirInterface

UPDATE: In response to this blog post, a researcher with Eurecom posted updated documentation on their website. Since I haven't reviewed it, I do not plan to change the below text. Be sure to check it out, though.

This project is publicly-funded through a Euro R&D grant, and run by Eurecom. Unfortunately, it is really unclear to me what they have developed, what is available, what works, and if anything is still under development.

According to their website, they have developed hardware, but all of the links on their webpage are dead. The website also talks about the simulation / emulation environments, but the link to that is dead as well. There is a link to 'snapshots', but it looks like you must register to see the code, which is a pretty fantastic FOSS #fail.

The software that I could find is dated. The website says you need a modified Linux kernel to use the software, but the most recent kernel and instructions are for Ubuntu 10.04 - over 3 years old.

It is also wholly unclear what of LTE they ever implemented and/or got working. Overall, the project seems totally dead, and it's unclear what was accomplished.

The website is difficult to navigate, and I couldn't find a bugtracker, mailing list, or, actually, the code, but the project does appear to be active. They have posted updates regularly, every month, and appear to have some sort of operational LTE downlink, based on the latest project update PDF.

So, the project is definitely active... and something definitely works... I'm just not 100% certain what, exactly. By the looks of their website, though, they intend to become the OpenBTS of LTE - which is exactly what everyone is looking for.

Conclusion

The long-and-short of it is that if you are looking for an open-source implementation, like OpenBTS, but for LTE, it doesn't exist (yet). There are projects working on both the basestation and 'user equipment' side of the protocol, but none are complete, and a number appear to have been abandoned. The best option, right now, is Amarisoft's closed-source eNodeB implementation.

This is an obvious gap, and a lot of people see the need. I'm sure, before too long, we will see more new and interesting work rise up in this space.