OFDM preamble generation in MATLAB used for WLAN,WiMAX,LDACS

This page covers OFDM preamble generation as per wimax system. The same concept is employed to generate preamble used in WLAN and LDACS based OFDM systems.

As we know, fixed pattern referred as preamble is used for time, frequency and channel synchronization in many of the wireless systems such as WLAN, WiMAX, LTE etc. In this page we will see how this preamble is generated using the equations provided in the IEEE standards such as 802.11, 802.16 etc.

STEP1: First preamble synchronization sequences are generated for both the symbols in the frequency domain as per equation given in the standard. Following are the equations for symbol-1 and symbol-2 of the preamble as per fixed wimax system. This is used for OFDM based system. wimax uses 256 point OFDM symbol.

The downlink long preamble in wimax consists of two consecutive OFDM symbols. Symbol1 has four times 64 sequence. Symbol2 has 2 times 128 sequence. In the frequency domain, these symbols are represented by P4x64 (k) and PEVEN (k) as per equation mentioned in the figure-1. Both of these preamble symbols are derived from a sequence PALL (k) of the form as mentioned in the same figure. Complete PALL sequence for full bandwidth is mentioned in IEEE 802.16-2004 OFDM physical layer specifications.

preamble in frequency domain

STEP2: After 256 Point IFFT is done for frequency domain vector of symbol1 and symbol2 as generated using above two equations in step1. Arrange the frequency domain values as per IFFT structure shown below. Using this IFFT obtain the time domain vector of both the symbols of the preamble.

OFDM preamble generation time domain

STEP3: Now add cyclic prefix for both the symbols as shown in the figure below. This provides time domain preamble with cp for both the symbols i.e. symbol1 and symbol2. Symbol1 is referred as short preamble and symbol2 is referred as long preamble. Cyclic prefix is added to avoid the delay spread of the channel.

OFDM preamble in time domain
clc;
clear all;
close all;
%%%Preamble in frequency domain as provided in the wimax standard
%%%These are frequency domain 201 values in the order of 100 negative halves, DC and 100 positive
%%%halves
%%%STEP1 Pall= [1.0000 - 1.0000i 1.0000 - 1.0000i -1.0000 - 1.0000i 1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i ...
-1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 + 1.0000i -1.0000 - 1.0000i ...
1.0000 + 1.0000i 1.0000 + 1.0000i -1.0000 - 1.0000i 1.0000 + 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i ...
1.0000 - 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i -1.0000 - 1.0000i 1.0000 + 1.0000i ...
1.0000 - 1.0000i 1.0000 - 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i ...
1.0000 + 1.0000i -1.0000 - 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i -1.0000 - 1.0000i 1.0000 + 1.0000i ...
-1.0000 - 1.0000i -1.0000 - 1.0000i 1.0000 - 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i ...
-1.0000 - 1.0000i 1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i ...
1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 + 1.0000i -1.0000 - 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i ...
-1.0000 - 1.0000i 1.0000 + 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i 1.0000 - 1.0000i -1.0000 + 1.0000i ...
1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 - 1.0000i -1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i ...
-1.0000 - 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i ...
-1.0000 + 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i ...
1.0000 + 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i ...
-1.0000 - 1.0000i -1.0000 - 1.0000i 1.0000 + 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i ...
1.0000 - 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i ...
-1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 - 1.0000i 1.0000 + 1.0000i 0.0000 + 0.0000i -1.0000 - 1.0000i ...
1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 - 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i ...
1.0000 + 1.0000i -1.0000 - 1.0000i 1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i ...
-1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i -1.0000 - 1.0000i ...
-1.0000 - 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i -1.0000 + 1.0000i ...
1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i -1.0000 - 1.0000i ...
-1.0000 - 1.0000i -1.0000 - 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i ...
-1.0000 - 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i 1.0000 + 1.0000i -1.0000 - 1.0000i 1.0000 - 1.0000i ...
1.0000 - 1.0000i 1.0000 + 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i 1.0000 + 1.0000i ...
-1.0000 - 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i ...
1.0000 - 1.0000i 1.0000 - 1.0000i -1.0000 + 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i -1.0000 - 1.0000i ...
1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 - 1.0000i 1.0000 + 1.0000i 1.0000 + 1.0000i ...
1.0000 + 1.0000i -1.0000 - 1.0000i 1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i ...
-1.0000 + 1.0000i 0.0000 + 0.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i -1.0000 - 1.0000i ...
-1.0000 - 1.0000i 1.0000 - 1.0000i -1.0000 + 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i 1.0000 - 1.0000i ...
-1.0000 + 1.0000i -1.0000 + 1.0000i -1.0000 + 1.0000i 1.0000 - 1.0000i -1.0000 + 1.0000i 1.0000 + 1.0000i ...
1.0000 + 1.0000i 1.0000 + 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i -1.0000 - 1.0000i ...
1.0000 + 1.0000i 1.0000 - 1.0000i 1.0000 - 1.0000i]

for k=1:201
c=mod(k,4)
if c==1
S1(k)=2*conj(Pall(k));
end
S1(k+1)=0;
end

for k=1:201
c=mod(k,2)
if c==1
S2(k)= sqrt(2)*(Pall(k));
end
S2(k+1)=0;
end

%%STEP2 Arranging the preamble symbol1 and symbol2 as per 256 IFFT structure and taking IFFT S1=[0,S1(102:201),zeros(1,28),zeros(1,27),S1(1:100)];
S2=[0,S2(102:201),zeros(1,28),zeros(1,27),S2(1:100)];
S1_td=ifft(S1,256);
S2_td=ifft(S2,256);
%%STEP3 Adding CP to the time domain preamble symbol1 and symbol2 CP=64;
S1_tdcp1=[S1_td(end-CP+1:end) S1_td];
S2_tdcp1=[S2_td(end-CP+1:end) S2_td];
preamble = [S1_tdcp1 S2_tdcp1];
x1=corr(S1_tdcp1,S1_tdcp1);
x2=corr(S2_tdcp1,S2_tdcp1);
%%%Correlation of symbol1 with itself will have four peaks figure;plot(abs(x1));title('short preamble spectrum');
%%%Correlation of symbol2 with itself will have two peaks figure;plot(abs(x2));title('long preamble spectrum');

save file_wimax_preamble S1_tdcp1 S2_tdcp1;
LDACS preamble in frequency domain

Figure mentions LDACS preamble equations used to generate LDACS compliant preamble in the frequency domain. After this the same is arranged and converted to time domain preamble using IFFT. Later CP is added to take care of delay spread of the channel.

Useful Links to MATLAB codes

Refer following as well as links mentioned on left side panel for useful MATLAB codes.
OFDM Preamble generation  Time off estimation corr  Freq off estimation corr  channel estimation  11a WLAN channel  PN sequence generation  OFDMA Tx Rx  AES DES  carrier aggregation  CCDF  FIR Filter  IIR Filter  Low Pass FIR  Viterbi decoder  CRC8 CRC32 

RF and Wireless tutorials

WLAN  802.11ac  802.11ad  wimax  Zigbee  z-wave  GSM  LTE  UMTS  Bluetooth  UWB  IoT  satellite  Antenna  RADAR