# Cyclic prefix length in baseband OFDM with ZF equalizer

My question is about baseband OFDM. I try to plot the BER according to the SNR. I noticed that changing cyclic prefix length does not affect the performances. I.e., following the code below, gi = n_sp/1024 or n_sp/4 or even 0, gives the same performance (always the same BER curve). Is there a mistake somewhere?

NB: At the receiver I use ZF-equalizer. The full Matlab code is:

clear
close all
clc

n_subc = 2^11;                          % # of subcarriers
n_ofdm_sym = 10;                        % # of OFDM symbols
n_data_sym = n_subc*n_ofdm_sym;         % # of data symbols to transmit
gi = n_subc/4;                          % CP length

dqpskmod  =  comm.DQPSKModulator;
dqpskdemod = comm.DQPSKDemodulator;

h = [.7*exp(1i*pi/4) .4*exp(1i*pi/3) .2*exp(1i*pi/6) .1*exp(1i*pi/5)]; % 4-taps channel

SNR = -10:2:30;

for i = 1:length(SNR)
for j = 1:100                                % Monte Carlo iterations

d_symb = randi([0 3],1,n_data_sym);
x_mod = step(dqpskmod, d_symb').';           % DQPSK modulated symbols

x_mod_s2p = reshape(x_mod,n_subc,[]);        % serial to parallel

x_ifft = ifft(x_mod_s2p,n_subc);

x_cp = [x_ifft(end-gi+1:end,:); x_ifft];     % add CP

x_ifft_p2s = reshape(x_cp,1,[]);             % parallel to serial

% --------------------> Channel mixing and adding noise

y = conv(x_ifft_p2s,h,'same');                          % Linear convolution
% y = ifft(fft(h,length(x_ifft_p2s)).*fft(x_ifft_p2s)); % OR circular convolution
y = awgn(y,SNR(i),'measured');                          % add noise

y_s2p = reshape(y,n_subc+gi,[]);             % S2P

y_cp = y_s2p(gi+1:end,:);                    % Removing CP

y_fft = fft(y_cp,n_subc);                    % FFT

y_p2s = reshape(y_fft,1,[]);                 % P2S

pilotX = x_mod(1:4:end);                     % Pilot extraction from the DQPSK transmitted data
pilotY = y_p2s(1:4:end);                     % Pilot extraction from the DQPSK received data
H_est = pilotY./pilotX;                      % Channel estimation
H_est_interp = interp1(1:4:n_data_sym,H_est,1:n_data_sym); % Linear interpolation
H_est_interp(end) = H_est_interp(end-1);     % To avoid the last NaN

X_est = y_p2s./H_est_interp;                 % ZF equalizer

y_demod = step(dqpskdemod,X_est.')';         % DQPSK demapping

d_symb(1:4:end)  = [];                       % Pilot suppression from the original data
y_demod(1:4:end) = [];                       % Pilot suppression from the received data

[~,ber(j)] = biterr(d_symb,y_demod);

end
BER(i)=mean(ber)
end

figure
semilogy(SNR,BER)


The figure below gives the results for gi = n_sp/1024, n_sp/4, and 0:

Additional question: why BER saturates for SNR above 22dB? There is no saturation for QAM modulation, is it specific to the DQPSK?

• Can you explain why you think the CP length should have an impact on BER? – Marcus Müller Jun 8 '18 at 18:01
• @MarcusMüller CP length must be higher than the highest delay introduced by the channel, so if CP is lower, there is an ISI, which means lower BER. – Sofiane Jun 8 '18 at 18:11
• @Sofiane try modeling passing signal x_ifft_p2s through channel h by linear convolution. – AlexTP Jun 8 '18 at 21:09
• @AlexTP Always the same, even using rayleighchan for generating h, then filter for filtering. – Sofiane Jun 9 '18 at 9:35
• @Sofiane if your circular convolution is not the bug, you should post the entire code and explain what you have done for further help. It would be great if we had a new OFDM without CP. – AlexTP Jun 9 '18 at 16:30

The channel which you have created is having 4-Taps and all taps are one after the other, meaning roughly there are 4 multi-paths and they are very close to each other. How close depends on what is the Sub-Carrier Spacing you would have assumed. Anyway, the point is only 3 samples of Cyclic Prefix would be enough and even with 0 or 2 samples of CP will not cause any noticeable degradation. The degradation is mostly due to AWGN which you are adding.

If you want to see the impact of 4-Tap channel, then I will suggest you to have larger delays multiplied to the magnitude of the four taps. One way to do it is as follows:

h = [.7*exp(1i*pi/4) zeros(1,50) .4*exp(1i*pi/3) zeros(1,75) .2*exp(1i*pi/6) zeros(1,100) .1*exp(1i*pi/5)]; % 4-taps channel


This will create four paths channel with 2nd, 3rd and 4rth path coming at 50, 126 and 227 samples respectively and hence the 2nd, 3rd and 4rth copy of one OFDM symbol will interfere with next OFDM symbol more.

With your current h assignment, all you will have is intra-symbol interference which can be delt with no CP since the channel is just 4-taps with no delays in between.

Also, consider removing AWGN and varying the amount of zeros I have added in between 4-Taps of h, to actually notice the impact of multipath inter-symbol interference and advantage of 512 length CP over 0/2 length CP.

this is John BG jgb2012@sky.com

In the OFDM I studied, DVB-T, the cyclic prefix is not used to calculate BER, just to sync.

1.- Have a look at the following article:

OFDM Receiver Performance Analysis with Measured Channel Model for Power Line Communication Yonghwa Kim, et al, from the Korea Electrotechnology Research Institute:

In Figure 1, the header packets are used to synchronise, the data packets come after that.

In page 3/6 of the previous reference one reads:

Assuming signal detection and AGC is completed at the receiver, time synchronization algorithm finds the start point of each SYNC signal

then error measurements can start.

2.- Also in ETSI standard 300744:

http://www.etsi.org/deliver/etsi_i_ets/300700_300799/300744/01_60/ets_300744e01p.pdf

Required C/N for non-hierarchical transmission to achieve a BER = 2 x 10-4 after the Viterbi decoder ..

The Viterbi decoder doesn't feed on the raw base-band signal, bun only on data.

3.- Actually, when I did BER measurements on microwave links, on plugs on tester on one side of the link, then you have to go to the other side, and connect the paired tester. Leave it for, a reasonable amount of time for the testers result to be accepted by the next contractor or the same network operator to validate the measurements.

The testers input and output data that doesn't mix with the prefix packets, that even vary in length, that then wouldn't be useful for BER measurements because one has to input a known sequence on one side of the link, and the look for exactly same test sequence on the other side. It's complicated if the length test sequence is going to depend upon the distance between Rx Tx antennas, or weather, whatsoever.

Hope it helps

John BG jgb2012@sky.com

• Thanks for responding, but this has no relation to my question. – Sofiane Jun 9 '18 at 9:39
• @Sofiane Are you still there? did you resolve that issue? if not, please let me know, we can analyze it together deeply. – Zeyad_Zeyad Oct 11 '18 at 6:04
• @Zeyad_Zeyad The problem is still not solved. – Sofiane Oct 11 '18 at 8:35