CFO误码率仿真源码_oo

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