Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Ici self cancellation in ofdm

Status
Not open for further replies.
i am trying to do ici self cancellation in ofdm
i am implementing the following block diagram for which i have following code.
in this code i am not getting that how to do windowing and frequency equalization
can anyone plz help..


Code:
clear all
nFFT = 16; % fft size
nDSC = 4; % number of data subcarriers
nBitPerSym = 4; % number of bits per OFDM symbol (same as the number of subcarriers for BPSK)
nSym = 10^4; % number of symbols
EbN0dB = [0:10]; % bit to noise ratio
EsN0dB = EbN0dB + 10*log10(nDSC/nFFT) + 10*log10(16/20); % converting to symbol to noise ratio
for ii = 1:length(EbN0dB)
   % Transmitter
   ipBit = rand(1,nBitPerSym*nSym) > 0.5; % random 1's and 0's
   ipMod = 2*ipBit-1; % BPSK modulation 0 --> -1, 1 --> +1
   ipMod = reshape(ipMod,nBitPerSym,nSym).'; % grouping into multiple symbolsa
   % Assigning modulated symbols to subcarriers from [-26 to -1, +1 to +26]
   xF = [ipMod(:,[1:nBitPerSym/4]) zeros(nSym,3) ipMod(:,[(nBitPerSym/4)+1]) zeros(nSym,3) ipMod(:,[(nBitPerSym/4)+2]) zeros(nSym,3) ipMod(:,[(nBitPerSym/4)+3]) zeros(nSym,3)];
   % Taking FFT, the term (nFFT/sqrt(nDSC)) is for normalizing the power of transmit symbol to 1 
   
   xt = (nFFT/sqrt(nDSC))*ifft(fftshift(xF.')).';
   % Appending cylic prefix
   xu = [xt(:,[13:16]) xt];
   % Concatenating multiple symbols to form a long vector
   xv = reshape(xu.',1,nSym*20);
   % Gaussian noise of unit variance, 0 mean
   nt = 1/sqrt(2)*[randn(1,nSym*20) + j*randn(1,nSym*20)];
   % Adding noise, the term sqrt(80/64) is to account for the wasted energy due to cyclic prefix
   yt = sqrt(20/16)*xv + 10^(-EsN0dB(ii)/20)*nt;
   % Receiver
   yt = reshape(yt.',20,nSym).'; % formatting the received vector into symbols
   yt = yt(:,[5:20]); % removing cyclic prefix
   % converting to frequency domain
   yF = (sqrt(nDSC)/nFFT)*fftshift(fft(yt.')).'; 
   yMod = yF(:,[[1:nBitPerSym/4] 3+[nBitPerSym/4+1] 3+[nBitPerSym/4+2] 3+[nBitPerSym/4+3]]); 
   % BPSK demodulation
   % +ve value --> 1, -ve value --> -1
   ipModHat = 2*floor(real(yMod/2)) + 1;
   ipModHat(find(ipModHat>1)) = +1;
   ipModHat(find(ipModHat<-1)) = -1;
   % converting modulated values into bits
   ipBitHat = (ipModHat+1)/2;
   ipBitHat = reshape(ipBitHat.',nBitPerSym*nSym,1).';
   % counting the errors
   nErr(ii) = size(find(ipBitHat - ipBit),2);
end
simBer = nErr/(nSym*nBitPerSym);
theoryBer = (1/2)*erfc(sqrt(10.^(EbN0dB/10)));
close all; figure
semilogy(EbN0dB,theoryBer,'bs-','LineWidth',2);
hold on
semilogy(EbN0dB,simBer,'mx-','LineWidth',2);
axis([0 10 10^-5 1])
grid on
legend('theory', 'simulation');
xlabel('Eb/No, dB')
ylabel('Bit Error Rate')
title('Bit error probability curve for BPSK using OFDM')
 

Attachments

  • Untitled.png
    Untitled.png
    27.8 KB · Views: 68
Last edited by a moderator:

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top