Category Archives: Modulation

MSK, QAM, OFDM

BER of 64-QAM OFDM in AWGN

64-QAM is an important component of the LTE Air Interface that promises higher data rates and spectral efficiencies. Combined with OFDM and MIMO it successfully combats the detrimental effects of the wireless channels and provides data rates in excess of 100Mbps (peak data rate). Here, we discuss a simple example of 64-QAM modulation with OFDM in an AWGN channel. We assume a bandwidth of 1.25MHz which corresponds to an FFT size of 128.

LTE Bandwidth
LTE Bandwidth

Given below is the code for this scheme.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% FUNCTION TO CALCULATE BER OF 64-QAM OFDM IN AWGN
% n_bits: Input, number of bits
% n_fft: Input, FFT size 
% EbNodB: Input, energy per bit to noise PSD
% ber: Output, bit error rate
% Copyright RAYmaps (www.raymaps.com)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function[ber]= M_QAM(n_bits,n_fft,EbNodB);
Eb=7;
M=64;
k=log2(M);
EbNo=10^(EbNodB/10);
x=transpose(round(rand(1,n_bits)));
h1=modem.qammod(M);
h1.inputtype='bit';
h1.symbolorder='gray';
y=modulate(h1,x);
n_sym=length(y)/n_fft;
s_ofdm=zeros(1,n_fft);
r_ofdm=zeros(1,n_fft);
for n=1:n_sym;
s_ofdm=sqrt(n_fft)*ifft(y((n-1)*n_fft+1:n*n_fft),n_fft);
wn=randn(1,n_fft)+j*randn(1,n_fft);
r_ofdm=s_ofdm+sqrt(Eb/(2*EbNo))*wn.';
s_est((n-1)*n_fft+1:n*n_fft)=fft(r_ofdm,n_fft)/sqrt(n_fft);
end
h2=modem.qamdemod(M);
h2.outputtype='bit';
h2.symbolorder='gray';
h2.decisiontype='hard decision';
z=demodulate(h2,s_est.');
ber=(n_bits-sum(x==z))/n_bits;
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

As discussed previously, with proper normalization of IFFT and FFT operations the performance of OFDM in AWGN is the same as the performance of the underlying modulation scheme. We have not even introduced the cyclic prefix in our simulation because without a fading channel there is no ISI and cyclic prefix (CP) is of no use. We will introduce the CP when we turn our attention to fading channels.

OFDM 64-QAM
OFDM 64-QAM

It must be noted that although IFFT and FFT are linear inverses of each other proper normalization is required to maintain the signal levels at the transmitter and receiver.

Bit Error Rate of 64-QAM in AWGN

64-QAM is an important modulation scheme being used in WiMAX and LTE. It allows for transmission of 6 bits symbol which results in higher bit rate and spectral efficiency. The calculation of bit error rate of 64-QAM is a bit tricky as there are many different formulas available with varying degrees of accuracy. Here, we first calculate the bit error rate (BER) of 64-QAM using a simulation and then compare it to the theoretical curve for 64-QAM.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% FUNCTION TO CALCULATE 64-QAM BER USING SIMULATION
% n_bits: Input, number of bits
% EbNodB: Input, energy per bit to noise PSD
% ber: Output, bit error rate
% Copyright RAYmaps (www.raymaps.com)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function[ber]= M_QAM(n_bits,EbNodB);
M=64;
k=log2(M)
EbNo=10^(EbNodB/10);
x=transpose(round(rand(1,n_bits)));
h1=modem.qammod(M);
h1.inputtype='bit';
h1.symbolorder='gray';
y=modulate(h1,x);
n=randn(1,n_bits/k)+j*randn(1,n_bits/k);
y=y+sqrt(7/(2*EbNo))*n.';
h2=modem.qamdemod(M)
h2.outputtype='bit';
h2.symbolorder='gray';
h2.decisiontype='hard decision';
z=demodulate(h2,y);
ber=(n_bits-sum(x==z))/n_bits
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% CALCULATE 64-QAM BER USING FORMULA
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
EbNodB=0:2:16;
EbNo=10.^(EbNodB/10);
k=6;
M=64;
x=sqrt(3*k*EbNo/(M-1));
Pb=(4/k)*(1-1/sqrt(M))*(1/2)*erfc(x/sqrt(2));
semilogy(EbNodB,Pb)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Using the above functions the BER of 64-QAM is calculated as shown below. Also shown is the constellation diagram of 64-QAM after addition of noise.

64-QAM Constellation
64-QAM Constellation
64-QAM BER
64-QAM BER

It is observed that the theoretical curve almost overlaps the simulation results. There is only a very small difference at very low signal to noise ratio. The BER of 64-QAM at 16dB is approximately equal to the BER for QPSK at 8dB. Therefore the 64-QAM can only be used in scenarios where there is a very good signal to noise ratio.

In this post we have used built in MATLAB functions for modulation and demodulation. In future posts we try to build up the simulation without using these functions!

OFDM Modulation and Demodulation (AWGN) – II

We have previously looked at a simple OFDM modulation and demodulation scheme. We saw that the BER performance of OFDM in AWGN was the same as the BER performance of the underlying modulation scheme (QPSK in this case). We will now continuously improve upon our basic simulation to get a more realistic picture. In this regard we introduce the cyclic prefix which is used in OFDM to overcome Intersymbol Interference. The duration of the cyclic prefix is 0.8usec (16 samples at 20MHz) resulting in a symbol duration of 4usec (IEEE 802.11a). Given below is the code for OFDM modulation and demodulation with cyclic prefix.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% FUNCTION TO CALCULATE BER OF OFDM IN AWGN
% seq_len: Input, number of OFDM symbols
% n_carr: Input, number of subcarriers 
% EbNo: Input, energy per bit to noise PSD
% ber: Output, bit error rate
% Copyright RAYmaps (www.raymaps.com)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function[ber]=OFDM_err(seq_len,n_carr,EbNo)
n_pre=16;                                                             
n_tot=n_carr+n_pre;                                                   
for n=1:seq_len
si=2*(round(rand(1,n_carr))-0.5);                                     
sq=2*(round(rand(1,n_carr))-0.5);                                              
s=si+j*sq;                                                            
s_ofdm=sqrt(n_carr)*ifft(s,n_carr);                                   
s_cyc=sqrt(n_carr/n_tot)*([s_ofdm(49:64),s_ofdm]);                    
wn=(1/sqrt(2*10^(EbNo/10)))*(randn(1,n_tot)+j*randn(1,n_tot));        
r=s_cyc+wn;                                                           
r_ext=r(17:80);                                                       
s_est=fft(r_ext,n_carr);                                              
si_est=sign(real(s_est));                                             
sq_est=sign(imag(s_est));                                             
ber1(n)=(n_carr-sum(si==si_est))/n_carr;                              
ber2(n)=(n_carr-sum(sq==sq_est))/n_carr;                               
end
ber=mean([ber1 ber2]);                                                
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Since the number of samples is increased from 64 to 80 their is an increase in symbol energy. Therefore the signal level needs to be scaled by a factor of sqrt(64/80) to keep the total symbol energy to be the same. This results in approximately 1dB of loss in BER performance as shown in the figure below.

OFDM BER

OFDM Modulation and Demodulation (AWGN)

OFDM modulation works on the principle of converting a serial symbol stream to a parallel symbol stream with each symbol from the parallel set modulating a seperate carrier. The spacing between the carriers is 1/T where T is the duration of the OFDM symbols (without cyclic prefix). This guarantees orthogonality of the carriers i.e. there is no interference between carriers. The addition of orthogonal carriers modulated by parallel symbol streams is equivalent to taking the IFFT of the parallel symbol set. At the receiver the inverse operation of FFT is performed and the parallel symbol streams are converted to serial symbol streams.

The main advantage of this scheme is that one carrier (or set of carriers) may undergo severe fading but other carriers would be able to carry data. Equalization on these narrowband channels is also much easier than equalization of one wideband channel. Intersymbol Interference (ISI) which effects the signal in the time domain is removed by adding a guard period between symbols, called cyclic prefix (which we will discuss later).

OFDM Modulator Demodulator

We demonstrate the performance of OFDM with QPSK modulation in a simple AWGN channel. Although the true benefits of OFDM are really visible when we have a fading channel but this simple example would serve as a good starting point.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% FUNCTION TO CALCULATE BER OF OFDM IN AWGN
% seq_len: Input, number of OFDM symbols
% n_carr: Input, number of subcarriers 
% EbNo: Input, energy per bit to noise PSD
% ber: Output, bit error rate
% Copyright RAYmaps (www.raymaps.com)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function[ber]=OFDM_err(seq_len,n_carr,EbNo)
for n=1:seq_len
si=2*(round(rand(1,n_carr))-0.5);
sq=2*(round(rand(1,n_carr))-0.5);
s=si+j*sq;
s_ofdm=sqrt(n_carr)*ifft(s,n_carr);
wn=(1/sqrt(2*10^(EbNo/10)))*(randn(1,n_carr)+j*randn(1,n_carr));
r=s_ofdm+wn;
s_est=fft(r,n_carr);
si_est=sign(real(s_est));
sq_est=sign(imag(s_est));
ber1(n)=(n_carr-sum(si==si_est))/n_carr;
ber2(n)=(n_carr-sum(sq==sq_est))/n_carr;
end
ber=mean([ber1 ber2]);                                                           
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
OFDM BER AWGN

As expected in an AWGN channel the BER performance of OFDM is simply the BER performance of QPSK in AWGN. With cyclic prefix, some of the transmitted energy would be wasted and the BER performance would be a bit worse (to be discussed in future posts).