Thread Subject: ICI self cancel for OFDM

Subject: ICI self cancel for OFDM

From: Kei Obara

Date: 4 Aug, 2011 01:24:29

Message: 1 of 1

Hi,

I made ICI self cancel program in MATLAB. However, it doesn't improve the performance against phase noise.
I want to place subarriers as X[k], -X[k] but it doesn't show improvement. If I change this to X[k], -conj(X[k]) it shows good improvement.

Can you please give me an advise what the problem is ?

Cheers,
Sandra



**************************************

nbitpersym = 256; % number of bits per OFDM symbol
nsym = 1000; % number of symbols
len_fft = 256; % fft size
sub_car = 256; % number of data subcarriers
EbNo = 0:2:30;


EsNo= EbNo + 10*log10(524/512);
snr=EsNo;

M = modem.pskmod(4); % modulation object

% Generating data
t_data=randint(nbitpersym*nsym,1);

% modulating data
mod_data = modulate(M,t_data);

% serial to parallel conversion
par_data = reshape(mod_data,nbitpersym,nsym).';

% making X[k], -X[k] subcarriers
par_data_self=zeros(nsym,sub_car*2);
for i=1:sub_car,
    par_data_self(:,2*i-1)=par_data(:,i);
    par_data_self(:,2*i)=(-1)*((par_data(:,i)));
end

% IFFT transform for OFDM transmission
IFFT_data = ifft(par_data_self.').';

% addition cyclic prefix
cylic_add_data = [IFFT_data(:,[501:512]) IFFT_data].';

% parallel to serial coversion
ser_data = reshape(cylic_add_data,524*nsym,1);

%% Phase Noise addition %%
noised_data = phase_noise_teian.'.*ser_data;

no_of_error=[];
ratio=[];
for ii=1:length(snr)
     
chan_awgn = sqrt(524/512)*awgn(noised_data,snr(ii),'measured'); % awgn addition

ser_to_para = reshape(chan_awgn,524,nsym).'; % serial to parallel coversion

cyclic_pre_rem = ser_to_para(:,[13:524]); %cyclic prefix removal

FFT_recdata = fft(cyclic_pre_rem.').';% freq domain transform

% making self canceled data by 0.5*(X[k]-(-X[k])
rx=zeros(nsym,sub_car);
for i=1:sub_car,
    rx(:,i)=0.5*(FFT_recdata(:,2*i-1)-(FFT_recdata(:,2*i)));
end

ser_data_rx = reshape(rx.',nbitpersym*nsym,1); % serial coversion

z=modem.pskdemod(4); %demodulation object

demod_Data = demodulate(z,ser_data_rx); %demodulating the data

[no_of_error(ii),ratio(ii)]=biterr(t_data,demod_Data) ; % error rate calculation

end


semilogy(EbNo,ratio,'--or','linewidth',2);
hold on;
theoryBer = (1/2)*erfc(sqrt(10.^(EbNo/10)));
semilogy (EbNo,theoryBer,'--*b','linewidth',2);
grid on
axis([0 12 10^-5 1])
xlabel('EbNo');
ylabel('BER')
title('Bit error probability curve for BPSK using OFDM');

Tags for this Thread

Everyone's Tags:

Add a New Tag:

Separated by commas
Ex.: root locus, bode

What are tags?

A tag is like a keyword or category label associated with each thread. Tags make it easier for you to find threads of interest.

Anyone can tag a thread. Tags are public and visible to everyone.

Tag Activity for This Thread
Tag Applied By Date/Time
ofdm Kei Obara 3 Aug, 2011 21:29:15
self cancel Kei Obara 3 Aug, 2011 21:29:15
cancellation Kei Obara 3 Aug, 2011 21:29:15
rssFeed for this Thread

Contact us at files@mathworks.com