wiki:OFDM/MIMO/Docs/PHYDetails

MIMO OFDM | Documentation | OFDM Physical Layer Details

The WARP MIMO OFDM core implements a real-time OFDM transceiver in the fabric of a Xilinx FPGA.

Antenna Configurations

The OFDM PHY supports three primary antenna modes: SISO, Alamouti and 2x2 multiplexing. The antenna mode is configurable per-packet from user C code. The transmitter and receiver must agree ahead of time on the antenna mode.

The core has ports for two antennas, referred to as Antenna A and Antenna B. In hardware, these ports can be connected to radio boards in arbitrary slots (hence the A/B label, instead of actual radio slot numbers).

SISO: this is the simplest mode, wherein the transmitter sends and the receiver captures all data from a single antenna. The choice of transmit antenna is set by user code per-packet. The choice of receive antenna is either set per-packet by code or automatically per-packet by selection diversity logic. In selection diversity mode, the receiver checks the AGC gain choices for both antennas and choose the I/Q stream from the antenna with the higher SNR (i.e. lower AGC gains). This selection is made early in the packet preamble.

Alamouti: this mode uses Alamouti's simple transmit diversity scheme. Both transmit antennas are used for every packet, with all data being sent from both antennas, encoded with the Alamouti STBC. The receiver uses a single antenna, selected by user code or by selection diversity.

2x2 multiplexing: this mode uses spatial multiplexing to transmit and receive from both antennas. This scheme doubles the data rate (vs. SISO), as two symbols are transmitted with each channel use. But this mode is less reliable than SISO or Alamouti, since a given data bit is transmitted from only one antenna (diversity = 1).

WARPPHY provides a function to configure the PHY and antenna modes from user code:

warpphy_setAntennaMode(txMode, rxMode);

txMode and rxMode must be selected from the values below (defined in warpphy.h). Remember that the PHY modes (SISO, Alamouti and multiplexing) don't interoperate over-the-air; every node must be configured with the same PHY mode. The antenna mode (choice of SISO antenna, selection diversity, etc.) can be configured per-node.

Tx Modes

  • TX_ANTMODE_SISO_ANTA: SISO on antenna A
  • TX_ANTMODE_SISO_ANTB: SISO on antenna B
  • TX_ANTMODE_MULTPLX: 2-antenna spatial multiplexing
  • TX_ANTMODE_MULTPLX_SWAPPED: 2-antenna spatial multiplexing, antennas swapped
  • TX_ANTMODE_ALAMOUTI_2ANT: 2-antenna Alamouti
  • TX_ANTMODE_ALAMOUTI_2ANT_SWAPPED: 2-antenna Alamouti, antennas swapped
  • TX_ANTMODE_ALAMOUTI_ANTA: 1-antenna Alamouti, stream A on antenna A
  • TX_ANTMODE_ALAMOUTI_ANTB: 1-antenna Alamouti, stream B on antenna B
  • TX_ANTMODE_ALAMOUTI_ANTA_SWAPPED: 1-antenna Alamouti, stream B on antenna A
  • TX_ANTMODE_ALAMOUTI_ANTB_SWAPPED: 1-antenna Alamouti, stream A on antenna B

Rx Modes

  • RX_ANTMODE_SISO_ANTA: SISO on antenna A
  • RX_ANTMODE_SISO_ANTB: SISO on antenna B
  • RX_ANTMODE_SISO_SELDIV: SISO using selection diversity on both antennas
  • RX_ANTMODE_MULTPLX: 2-antenna multiplexing
  • RX_ANTMODE_ALAMOUTI_ANTA: 1-antenna Alamouti on antenna A
  • RX_ANTMODE_ALAMOUTI_ANTB: 1-antenna Alamouti on antenna B
  • RX_ANTMODE_ALAMOUTI_SELDIV: Alamouti using selection diversity on both antennas

Examples
The following are examples of valid antenna configurations. Notice that in every example, the Tx and Rx PHY modes (SISO, Alamouti or multiplexing) match. This is important and must be enforced in code (the PHY will accept invalid configurations with unpredictable results).

//SISO mode, Tx and Rx on antenna A (this is the default in the OFDM reference design)
warpphy_setAntennaMode(TX_ANTMODE_SISO_ANTA, RX_ANTMODE_SISO_ANTA);

//SISO mode, Tx and Rx on antenna B
warpphy_setAntennaMode(TX_ANTMODE_SISO_ANTB, RX_ANTMODE_SISO_ANTB);

//SISO mode, Tx on antenna A, Rx on both antennas using selection diversity
warpphy_setAntennaMode(TX_ANTMODE_SISO_ANTA, RX_ANTMODE_SISO_SELDIV);

//Alamouti mode, Tx from both antennas, Rx on antenna A
warpphy_setAntennaMode(TX_ANTMODE_ALAMOUTI_2ANT, RX_ANTMODE_ALAMOUTI_ANTA);

//Multiplexing mode, Tx and Rx with both antennas
warpphy_setAntennaMode(TX_ANTMODE_MULTPLX, RX_ANTMODE_MULTPLX);

OFDM Parameters

The OFDM core uses 64 subcarriers, spaced evenly in the transmitted waveform. 4 subcarriers are dedicated to pilot tones. The DC subcarrier (index 0) must always be empty. The remaining subcarriers can be loaded with data modulated as BPSK, QPSK, 16-QAM or 64-QAM symbols. Any combination of modulation schemes can be used across subcarriers, though the subcarrier-modulation assignment must be fixed for a full packet.

The bandwidth of the OFDM signal is 1/4 of the core's master clock. In most implementations, the master clock is sourced by the host PLB46 bus. We have tested the core with 40 and 80MHz bus clocks (corresponding to 10 and 20MHz over-the-air bandwidths).

The 64 subcarriers are numbered ![0, 1, ... 63] throughput the model and supporting code.

Subcarrier Indices

Our example projects load data into 48 subcarriers. The table below lists the utilization of all subcarriers in our designs:

IndexUtilization
0 (DC) Must be empty (zero)
7, 21, 43, 57 BPSK pilot tones
1-6, 8-20, 21-26, 38-42, 44-56, 58-63 Data symbols
27-37 Empty (zero)

This subcarrier utilization is not a requirement of the PHY; the OFDM Tx and Rx logic will support other mappings. We use 48 data-bearing subcarriers to reduce adjacent channel interference (just like 802.11) and to have an integral number of bytes per OFDM symbol. The table below lists the number of bytes per OFDM symbol for the supported modulation schemes when using 48 data-bearing subcarriers per symbol.

ModulaitonBytes per OFDM Symbol
BPSK6
QPSK12
16-QAM24
64-QAM36
Last modified 14 years ago Last modified on Sep 30, 2010, 9:43:45 PM