% Effect of Carrier Frequency Offset on OFDM system simulation under AWGN
% Prepared by Hiren gami
clc
clear all
nDSC = 256; % Number of data sub-carriers
nCP = 16; % Number of sub-carriers in cyclic prefix
nFFT = 256;
nTot = nFFT+nCP;
EbN0dB = 0:2:10;
EsN0dB = EbN0dB + 10*log10(nDSC/nFFT) + 10*log10(nFFT/nTot);
CFO = 0:0.05:0.2;
BER = zeros(1,length(EbN0dB));
MC =5000;
for ii = 1:length(CFO)
for n = 1:length(EbN0dB)
snr = EbN0dB(n);
berrors = 0;tic;
for mc = 1:MC
x = rand(1,nDSC)>0.5;
xt = 2*x -1;
xt = (nFFT/sqrt(nDSC))*ifft(fftshift(xt),nFFT);
xtt = [xt(end-nCP+1:end) xt];
% Gaussian noise of unit variance, 0 mean
nt = 1/sqrt(2)*(randn(1,nTot) + 1i*randn(1,nTot));
yr = sqrt(nTot/nFFT)*xtt + 10^(-EsN0dB(n)/20)*nt;
% applying CFO
yr =(exp(1i*2*pi*CFO(ii)*(0:length(yr)-1)/nFFT)).*yr;
% Receiver processing
yr = yr(nCP+1:end);
yr = (nDSC/sqrt(nFFT))*fftshift(fft(yr,nFFT));
yr = yr > 0; % hard demodulation
berrors = berrors + length(find((yr-x)~=0));
end
toc;
BER(ii,n) = berrors/(nFFT*MC);
end
end
semilogy(EbN0dB,BER,'-.*','LineWidth',2); hold on; grid on;
title('BER sensitivity Vs CFO under AWGN');
% theoratical calculations
dataenc = 'nondiff';
EbNo = EbN0dB;
M = 2;
ThBer = berawgn(EbNo,'psk',M,dataenc);
semilogy(EbNo, ThBer,'-*r','LineWidth',2); xlabel('Eb/N0');ylabel('BER');