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$ Jun 8, 2018 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, 2018 at 18:11
  • $\begingroup$ @Sofiane try modeling passing signal x_ifft_p2s through channel h by linear convolution. $\endgroup$
    – AlexTP
    Jun 8, 2018 at 21:09
  • $\begingroup$ @AlexTP Always the same, even using rayleighchan for generating h, then filter for filtering. $\endgroup$
    – Sofiane
    Jun 9, 2018 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, 2018 at 16:30

2 Answers 2


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 [email protected]

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 [email protected]

  • $\begingroup$ Thanks for responding, but this has no relation to my question. $\endgroup$
    – Sofiane
    Jun 9, 2018 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$ Oct 11, 2018 at 6:04
  • $\begingroup$ @Zeyad_Zeyad The problem is still not solved. $\endgroup$
    – Sofiane
    Oct 11, 2018 at 8:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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