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:

close all

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

    % --------------------> Receiver

    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);



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

enter image description here

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

  • $\begingroup$ Can you explain why you think the CP length should have an impact on BER? $\endgroup$ – Marcus Müller Jun 8 '18 at 18:01
  • $\begingroup$ @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. $\endgroup$ – Sofiane Jun 8 '18 at 18:11
  • $\begingroup$ @Sofiane try modeling passing signal x_ifft_p2s through channel h by linear convolution. $\endgroup$ – AlexTP Jun 8 '18 at 21:09
  • $\begingroup$ @AlexTP Always the same, even using rayleighchan for generating h, then filter for filtering. $\endgroup$ – Sofiane Jun 9 '18 at 9:35
  • $\begingroup$ @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. $\endgroup$ – AlexTP Jun 9 '18 at 16:30

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:


the header of table A.1 reads

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

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.