This version (24 Feb 2020 23:07) was approved by rgetz.The Previously approved version (22 Nov 2016 20:53) is available.Diff

LTE Transmitter and Receiver Example


When verifying overall system performance in modern communications systems, traditional test and measurement equipment such as vector signal generators and vector signal analyzers (VSA) are required. These instruments generate or measure characteristics of digitally modulated radio signals1). Since most modern digital communication systems are almost all based on, or derived from a well-defined industry standard, 2) most traditional test and measurement equipment works well with these types of waveforms. This type of equipment is available from many different test and measurement companies. These include, but are not limited to Keysight, Tektronics, National Instruments or Rohde & Schwarz.

While the use and need for this sort of traditional test and measurement equipment can not be replaced, they are everything a software or waveform developer does not like -- large, noisy, expensive, normally lives in the lab (away from a developers desk), and is a shared resource for the entire development team. Typically near the end of a project, everyone wants on this equipment.

Providing system level developers the ability to verify some measurements before they take the system into the lab to be tested with traditional test and measurement equipment would augment the developer's ability to ensure system performance is met in the shortest time possible.

In this example, we introduce a development methodology for basic system verification for a Long-Term Evolution (LTE) based system, consisting of an AD-FMCOMMS3-EBZ RF transceiver board (that includes the AD9361) along with a suite of software, which includes MathWorks LTE System Toolbox. In this example, the baseband IQ waveforms are generated by LTE System Toolbox. They are up converted to RF band by AD9361 and then transmitted over the air. On the other end, these RF signals are captured by AD-FMCOMMS3-EBZ, down converted to baseband and saved in the workspace. Consequently, these baseband signals are analyzed by LTE System Toolbox. Typical RF/LTE performance characteristics such as Error Vector Magnitude (EVM) can be obtained.


In order to run this example, you need:

  1. MATLAB and Simulink, version 2014b or higher, and your license needs to include the following components:
  2. The following hardware:
  3. A recent Zynq image for the AD-FMCOMMS3-EBZ board.
  4. A good understanding of how the AD9361 works. At a minimum, you should read over a basic intro for the AD9361. If you have issues understanding some filtering needs/concepts described below, refer back to the basic intro. You need to understand the device, since just like the traditional instruments have a setup that must be understood, the AD9361/64 device setup is critical to getting the proper measurements. There are many things about the device that can negatively effect the results, only a few are mentioned below.

If you want to enable a static IP, use the script found here


Like all engineering solutions, there are many different ways to implement and automate a specific task. Here we will review two different methods,

  • manual file copying, MATLAB command line
  • ethernet based, system object plus MATLAB example which automates everything.

The specific solution which is most appropriate for your task at hand depends on what limitations you might face (like your IS department not wanting to connect Ethernet to the Xilinx development platforms), or your familiarity with MATLAB.

Using File I/O

This part of the example we do things by hand, and copy files around via USB or SD Card or Network. There are many labs where moving things around via USB is the only way to connect instruments.

Setting up the AD9361

Setting up the AD9361 is done via the AD9361 Wizard. This will set the sample rate, and RF bandwidth for the signal you want to send.

For this example, we will be creating an LTE10 signal and filter settings. There are some tweaks necessary for the DCXO outside this, which will be necessary to ensure that we don't have any frequency error.

The details can be found on the MATLAB AD9361 Filter Wizard section, but it should be a simple matter of selecting LTE10, designing the Tx and Rx filters, and connecting to the target, and writing the coefficients to the target.

Block diagram

LTE Playback

Creating a LTE Signal in MATLAB

This is very similar (exactly similar) to the example in the MATLAB documentation for lteTestModelTool.

We will provide a few more pointers.

    • The MathWorks documentation talks about the “test model number”, as having options of '1.1', '1.2', '2', '3.1', '3.2', and '3.3'. These numbers are the E-UTRA Test Model numbers, and are referenced as E-TMn.n in section 6 of the pdf. Care should be taken to ensure that the proper test waveform is generated for the proper tests. (i.e. E-UTRA Test Models 1.1 & 1.2 should not be used for EVM testing).

Launch the tool to generate an E-UTRA Test Model (E-TM) waveform. In this case, we will generated a waveform for a few different tests.

  • EVM for 64QAM modulation at max power (E-UTRA Test Model 3.1)
  • EVM for 256QAM modulation at max power (E-UTRA Test Model 3.1a)
  • EVM for 1024QAM modulation at max power (E-UTRA Test Model 3.1b)
  • EVM for 16QAM modulation at max power (E-UTRA Test Model 3.2)
  • EVM for QPSK modulation at max power (E-UTRA Test Model 3.3)

All should be generated for 20MHz, FDD, and we change the output variable three times (QAM64, QAM16 and QPSK).


The output needs to be scaled, to +/- 1.0 (for full scale), (and then backed off a bit, the below example is backed off -3dBFS). This can be done quickly and easily with a little MATLAB. If you don't do this, the output from the lteTestModelTool is very small, (+/- 0.0606 FS, which on the AD9361 is about +/- 62 LSBs, or about a 7 bit system, which is going to give pretty poor results).

>> db_backoff = 3;
>> QAM64_20MHz = tmwaveform * (10^(-db_backoff/20))/max([max(real(tmwaveform)) abs(min(real(tmwaveform))) max(imag(tmwaveform)) abs(min(imag(tmwaveform)))]);

Once the 307200×1 complex double variables are magnitude adjusted, it's just a matter of right clicking on them, and saving them to the host. Save them as a .mat file. The IIO Oscilliscope can read in *.mat files, and send these files out a typical DAC (like the one inside the AD9361). If you would rather have a tab delimited text file, try:

>> QAM64_20MHz_iq = [real(QAM64_20MHz) imag(QAM64_20MHz)];
>> dlmwrite('QAM64_20MHz.txt',QAM64_20MHz_iq, 'precision',4, 'delimiter','\t', 'newline', 'pc');
If you need you own format (comma delimited, or space delimited), check out the docs for dlmwrite, or if you want binary, check out frwrite, or if you really want, try Excel with xlswrite. For a 12-bit converter (like the AD9361) 4 decimal places of precision is necessary; for higher numbers of bits, you will need more precision.

If you use a different bandwidth than 20MHz, expect to see a different length vector, as you are generating a constant time, and the different bandwidths have different sample rates (which are detailed in the Filter Page).

Copying it to the target

There are many ways to copy files to the target, which are explained in the Zynq getting started guide.

Playing it via the osc application

Once it's on the target, you just run the osc application, this should include a method to play the files via FMCOMMS2/3/4 plugin. Simply select DAC Buffer Output, and then select the file, and the channels that you want to output things on.

That's it - you are now broadcasting LTE waveforms.

LTE Recording

Capturing a waveform via the osc application

Copying it to the host

Analyzing the LTE waveform in MATLAB

A Complete Example in MATLAB

Since the libiio interface is available in MATLAB, and the LTE System Toolbox runs in MATLAB environment, we can implement the whole transmitting and receiving process in MATLAB.

The MATLAB version LTE example can be found here:

In order to run this example, you need to get the libiio interface from here and include them in the same folder as your example:

The main function is ad9361_LTE.m. This function mainly consists of four parts:

  • Pick up LTE parameters according to LTE Mode
  • Generate LTE Signal using LTE System Toolbox
  • Transmit and Receive using MATLAB libiio
  • Post Processing of Caputured Data

Detailed comments have been provided in the function to describe the purpose of each part.

In order to run this example, simply use the following command:


where ip is the IP address of your board, LTE mode is the LTE mode you would like to simulate. Currently, this example supports LTE-1.4, 3, 5 and 10. Make sure you specify plots as output parameter, so that these plots will not close automatically at the end of simulation.

For example, the following command simulates the transmit and receive of LTE-10 signal:


At the end of the simulation, you will get the RSSI values on both channels, EVM result in the command window, as well as the following plots:

  • Time Scope

Block diagram

  • Spectrum Analyzer (hsa object)

Block diagram

  • Constellation Diagram of recovered symbols (hcd object)

Block diagram

  • EVM (plots object)

Block diagram

One other important feature of this example is to calculate the EVM of the Tx and Rx, which provides a performance metric of the system. In this example, the EVM is calculated by PDSCHEVM function, which is based on PDSCH Error Vector Magnitude (EVM) Measurement.

In the command window, the average EVM for a downlink RMC is displayed. First the results for low and high edge EVM are calculated for each subframe within a frame and their averages are displayed. The max of these averages is the EVM per frame. The final EVM for the downlink RMC is the average of the EVM across all frames, as highlighted below. According to the experiment, when the digital Tx - digital Rx loopback is used (RF bypassed), the overall EVM is around 0.077%. When a loopback cable is used between Tx and Rx (RF included), the overall EVM is below 2%.

Block diagram

As a conclusion, in this model, the combination of AD-FMCOMMS2/3 and MathWorks LTE System Toolbox replaces the traditional test and measurement equipment, which makes the instrumentation and verification process more affordable and flexible.

resources/tools-software/linux-software/libiio/clients/lte_example.txt · Last modified: 24 Feb 2020 23:07 by rgetz