Is it possible the difference between OFDM-CP and OFDM-ZP about 10dB I'm building basic matlab code for ofdm, but when I change the CP OFDM into ZP-OFDM with sme parameters, I get the performance is worse by up to 10 dB!! Is that right ? or there is some thing wrong in the code !! 

clear all; clc; clear; 

N_sub = 64;   %Num of subcarriers 
N_sym = 20;    %Number of symbols 
Mod = 4;         %Modulation order 
bi = log2(Mod);  %Number of bits
N_bits = N_sub*N_sym*log2(Mod); 
CP = N_sub/4;  %CP length 

%set channel parameters 
h = randn(1,16);
h = [h zeros(1,N_sub-length(h))];
h = repmat(h,N_sym,1)';
ntap = size(h,1) - 1;

SNR_dB = 0:2:20;
errors = zeros(length(SNR_dB),1);

N_fram = 10^3;        %Number of frame
for snr = 1:length(SNR_dB) 
    for i = 1 : N_fram
        bits = randi([0 1], 1 , N_bits);
        data_temp = bi2de(reshape(bits,N_bits/bi,bi));
        % Set modulation of data
        data_mod = (1/sqrt(2))*qammod(data_temp , Mod); 

        data_fram = reshape(data_mod,N_sub,[]);    %% Serial to parallel conversion

        %FFt operation 
        data_freq_total = sqrt(N_sub)*ifft(data_fram);

        %adding CP 
        data_cp = [data_freq_total(end-CP+1:end,:); data_freq_total];  %Adding CP 
%         data_cp = [zeros(CP,N_sym); data_freq_total];                  %Adding ZP

        %channel convolution 
        for j_c = 1 : N_sym
            y(:,j_c) = conv(h(:,j_c),data_cp(:,j_c));                          % Linear convolution
        end
        y = awgn(y,SNR_dB(snr),'measured');                          % add noise

        %serial to parallel conversion 
        y_s2p = reshape(y,N_sub+CP+ntap,[]);

        %remove cp 
        y_cp2 = y_s2p(CP+1:end-ntap,:); 

        %FFT operation 
        data_freq_total_r = (1/sqrt(N_sub))*fft(y_cp2,N_sub);

        %Channel recovery
        y_fft_total = [];
        for j_r = 1 : N_sym
            y_fft_c = data_freq_total_r(:,j_r);
            y_fft_l = y_fft_c ./ fft(h(:,1),N_sub);
        y_fft_total = [y_fft_total y_fft_l];
        end 

        %set demodulation 
        data_rec = reshape(y_fft_total, N_sub*N_sym,1);
        data_demod = qamdemod(data_rec, Mod); 
        bits_r = reshape(de2bi(data_demod,bi),1,[]);

        %calculate the errors
        errors_ofdm = sum(xor(bits,bits_r));
        errors(snr) = errors_ofdm + errors(snr);
    end 
    snr
end 
err_ber_fram_ofdm = errors/N_bits./N_fram;
figure (1)
semilogy(SNR_dB,err_ber_fram_ofdm)
grid on 
legend('OFDM');


The difference I perform when modifying the CP-OFDM into ZP-OFDM is as below: 

%adding CP 
            data_cp = [data_freq_total(end-CP+1:end,:); data_freq_total];  %Adding CP 
    %         data_cp = [zeros(CP,N_sym); data_freq_total];                  %Adding ZP


What's the issue of that degradation of performance ? 



thank you
I tried using MMSE equalizer, it worked well. single tap equalizer is not always working with ZP as well as CP OFDM.