[SOLVED] Problem with BER when the ofdm modulation is added to cdma-SFBC system

Status
Not open for further replies.

moneer

Newbie level 5
Joined
Dec 22, 2009
Messages
10
Helped
1
Reputation
2
Reaction score
1
Trophy points
1,283
Location
Jordan
Activity points
1,481
hi all
iam doing a research on MIMO-cdma ofdm system
the programe works fine when its only cdma-stbc but the problem when i add the ofdm modulation to it the BER goes all wrong, if any one can help me.
thanks
( here is the file since i cant attach it
clc
clear all
close all
%%
% We start by defining some common simulation parameters
numPackets = 10; % number of packets
EbNo = 0:2:16; % Eb/No varying to 20 dB
N = 2; % maximum number of Tx antennas
M = 2; % maximum number of Rx antennas
D = 1;
segmar = 0.1;
Nc = 128; % CDMA code Length
nbitpersym = 10; % number of bits per OFDM symbol (same as the number of subcarriers for BPSK)
nsym = 10; % number of symbols
len_fft = 256; % fft size
sub_car = 10; % number of data subcarriers

EsNo= EbNo + 10*log10(52/64)+ 10*log10(64/80); % symbol to noise ratio

snr= EsNo - 10*log10(64/80); % snr as to be used by awgn fn.
frmLen = nbitpersym*nsym; % frame length
%%
% and set up the simulation.
% Seed states for repeatability
seed = [98765 12345]; randn('state', seed(1)); rand('twister', seed(2));
%%

% Set up a figure for visualizing BER results
h = gcf; grid on; hold on;
set(gca, 'yscale', 'log', 'xlim', [EbNo(1), EbNo(end)], 'ylim', [1e-5 1]);
xlabel('Eb/No (dB)'); ylabel('BER'); set(h,'NumberTitle','off');
set(h, 'renderer', 'zbuffer'); set(h,'Name','Transmit vs. Receive Diversity');
title('Transmit vs. Receive Diversity');


% Create BPSK mod-demod objects
P = 2; % modulation order
bpskmod = modem.pskmod('M', P, 'SymbolOrder', 'Gray');
bpskdemod = modem.pskdemod(bpskmod);

% Pre-allocate variables for speed
tx2 = zeros(frmLen, N); H = zeros(frmLen, N, M);
r21 = zeros(frmLen, 1); r12 = zeros(frmLen, 2);
z21 = zeros(frmLen, 1); z21_1 = zeros(frmLen/N, 1); z21_2 = z21_1;
z12 = zeros(frmLen, M); H1 = zeros(1,15*nsym); H2 = H1;
H3 = H1; H4 = H1; H5 = H1; H6 = H1; H7 = H1; H8 = H1;
error11 = zeros(1, numPackets); BER11 = zeros(1, length(EbNo));
error21 = error11; BER21 = BER11; error12 = error11; BER12 = BER11;
ant1 = complex(zeros(1,frmLen));Gold_code_matrix = zeros(Nc,33);
ant2 = ant1; ant3= ant1;ant4= ant1; r3 = zeros(1,frmLen);r4 = zeros(1,frmLen);
% STBCDEC Space-Time Block Combiner
z = complex(zeros(1,frmLen));
z0 = complex(zeros(1, D)); z1 = z0;
%% CDMA codes
% PN sequence
h= hadamard(Nc);
ds = h(1,;
ds2 = h(2,;
%we use symbol energy normalized to 1
%thus, DS energy is normalized to 1 (it is a pulsewaveform)
ds=ds/norm(ds);
ds2=ds2/norm(ds2);

%%
% Loop over several EbNo points
for idx = 1:length(snr)
% Loop over the number of packets
for packetIdx = 1:numPackets

%function [ant1, ant2] = stbcenc(u)
% STBCENC Space-Time Block Encoder
% Outputs the Space-Time block encoded signal per antenna.
data = randint(1, frmLen, 2); % data vector per user per channel
tx = modulate(bpskmod, data); % BPSK modulation
tx = tx/norm(tx);
data2 = randint(1,frmLen,2);
tx3 = modulate(bpskmod, data2);
tx3 = tx3/norm(tx3);
% Alamouti Space-Time Block Encoder, G2, full rate
% G2 = [s0 s1; -s1* s0*]
for i = 1:size(tx,2)/2
s0 = tx, 2*i-1); s1 = tx, 2*i);
ant1, [2*i-1 2*i]) = [s0 -conj(s1)];
ant2, [2*i-1 2*i]) = [s1 conj(s0)];
s2 = tx3, 2*i-1); s3 = tx3, 2*i);
ant3, [2*i-1 2*i]) = [s2 -conj(s3)];
ant4, [2*i-1 2*i]) = [s3 conj(s2)];
end
%% OFDM Modulation
% serial to parallel conversion

par_data1 = reshape(ant1,nbitpersym,nsym).';
par_data2 = reshape(ant2,nbitpersym,nsym).';
par_data3 = reshape(ant3,nbitpersym,nsym).';
par_data4 = reshape(ant4,nbitpersym,nsym).';

% fourier transform time doamain data and normalizing the data
IFFT_data1 = (sqrt(100))*ifft(fftshift(par_data1.')).';
IFFT_data2 = (sqrt(100))*ifft(fftshift(par_data2.')).';
IFFT_data3 = (sqrt(100))*ifft(fftshift(par_data3.')).';
IFFT_data4 = (sqrt(100))*ifft(fftshift(par_data4.')).';

% addition cyclic prefix

cylic_add_data1 = [IFFT_data1,(6:10)) IFFT_data1].';
cylic_add_data2 = [IFFT_data2,(6:10)) IFFT_data2].';
cylic_add_data3 = [IFFT_data3,(6:10)) IFFT_data3].';
cylic_add_data4 = [IFFT_data4,(6:10)) IFFT_data4].';

% parallel to serial coversion

ser_data1 = reshape(cylic_add_data1,15*nsym,1)';
ser_data2 = reshape(cylic_add_data2,15*nsym,1)';
ser_data3 = reshape(cylic_add_data3,15*nsym,1)';
ser_data4 = reshape(cylic_add_data4,15*nsym,1)';

%%
ant11 = kron(ser_data1,ds);
ant22 = kron(ser_data2,ds);
ant33 = kron(ser_data3,ds2);
ant44 = kron(ser_data4,ds2);
%% Correlated Rayliegh Channel Design
Kr=[1 0 0 0 .0056 .0056 .0056 0.0056;0 1 0 0 .0056 .0056 .0056 0.0056;
0 0 1 0 .0056 .0056 .0056 0.0056; 0 0 0 1 .0056 .0056 .0056 0.0056;
0.0056 0.0056 0.0056 0.0056 1 0 0 0; 0.0056 0.0056 0.0056 0.0056 0 1 0 0;
0.0056 0.0056 0.0056 0.0056 0 0 1 0;0.0056 0.0056 0.0056 0.0056 0 0 0 1];
Kg=Kr;
for i=1:64
if Kr(i)==0.0056
Kg(i)=0.1;
end
end
% obtaining the coloring matrix
[L,P,U]=lu(Kg);
segmag = sqrt((2*segmar^2)/(2-pi/2));
V=sqrt(segmag/2)*(randn(8,1)+j*randn(8,1));
W=L*V;
segmar=sqrt((2-(pi/2))*0.5*(segmag^2));
E=1/segmar;
Ri=E.*W;
H1,1:3:end) = sqrt(Ri(1)/2)*(randn(1,frmLen/2)+j*randn(1,frmLen/2));
H2,1:3:end) = sqrt(Ri(2)/2)*(randn(1,frmLen/2)+j*randn(1,frmLen/2));
H3,1:3:end) = sqrt(Ri(3)/2)*(randn(1,frmLen/2)+j*randn(1,frmLen/2));
H4,1:3:end) = sqrt(Ri(4)/2)*(randn(1,frmLen/2)+j*randn(1,frmLen/2));
H5,1:3:end) = sqrt(Ri(5)/2)*(randn(1,frmLen/2)+j*randn(1,frmLen/2));
H6,1:3:end) = sqrt(Ri(6)/2)*(randn(1,frmLen/2)+j*randn(1,frmLen/2));
H7,1:3:end) = sqrt(Ri(7)/2)*(randn(1,frmLen/2)+j*randn(1,frmLen/2));
H8,1:3:end) = sqrt(Ri(8)/2)*(randn(1,frmLen/2)+j*randn(1,frmLen/2));
H1,2:3:end) = H1,1:3:end);H1,3:3:end) = H1,1:3:end);
H2,2:3:end) = H2,1:3:end);H2,3:3:end) = H2,1:3:end);
H3,2:3:end) = H3,1:3:end);H3,3:3:end) = H3,1:3:end);
H4,2:3:end) = H4,1:3:end);H4,3:3:end) = H4,1:3:end);
H5,2:3:end) = H5,1:3:end);H5,3:3:end) = H5,1:3:end);
H6,2:3:end) = H6,1:3:end);H6,3:3:end) = H6,1:3:end);
H7,2:3:end) = H7,1:3:end);H7,3:3:end) = H7,1:3:end);
H8,2:3:end) = H8,1:3:end);H8,3:3:end) = H8,1:3:end);
H1 = rectpulse(H1,Nc);H2 = rectpulse(H2,Nc);H3 = rectpulse(H3,Nc);
H4 = rectpulse(H4,Nc);H5 = rectpulse(H5,Nc);H6 = rectpulse(H6,Nc);
H7 = rectpulse(H7,Nc);H8 = rectpulse(H8,Nc);
%%
a1=max(max(abs(H1)));a2=max(max(abs(H2)));a3=max(max(abs(H3)));
a4=max(max(abs(H4)));a5=max(max(abs(H5)));a6=max(max(abs(H6)));
a7=max(max(abs(H7)));a8=max(max(abs(H8)));
H1=H1./a1;H2=H2./a2;H3=H3./a3;H4=H4./a4;H5=H5./a5;
H6=H6./a6;H7=H7./a7;H8=H8./a8;
%%
rx11 = awgn(((ant11.*(H1)+ant22.*(H3)+...
(ant33.*(H5)+ant44.*(H7)))/sqrt(N)), EbNo(idx));
rx22 = awgn(((ant11.*(H2)+ant22.*(H4)+...
(ant33.*(H6)+ant44.*(H8)))/sqrt(N)), EbNo(idx));
%%
%rx11 = a1*rx11./abs(H1);
%rx11 = a3*rx11./abs(H3);
%rx11 = a5*rx11./abs(H5);
%rx11 = a7*rx11./abs(H7);
%rx22 = a2*rx22./abs(H2);
%rx22 = a4*rx22./abs(H4);
%rx22 = a6*rx22./abs(H6);
%rx22 = a8*rx22./abs(H8);
%% filter
%[CC,DD] = butter(6,0.5,'low');
%rx1_1 = filter(CC,DD,rx11);
%rx2_2 = filter(CC,DD,rx22);

%% CDMA Demodulation
for v=1:length(ser_data1), %we have length of ser_data blocks
r3(v)=real(ds*rx11((v-1)*Nc+1:v*Nc)');
r4(v)=real(ds*rx22((v-1)*Nc+1:v*Nc)');
end
%% OFDM Demodulation
ser_to_para1 = reshape(r3,15,nsym).'; % serial to parallel coversion
ser_to_para2 = reshape(r4,15,nsym).'; % serial to parallel coversion

cyclic_pre_rem1 = ser_to_para1,(6:end)); %cyclic prefix removal
cyclic_pre_rem2 = ser_to_para2,(6:end)); %cyclic prefix removal

FFT_recdata1 =(sqrt(10)/128)*fftshift(fft(cyclic_pre_rem1.')).'; % freq domain transform
FFT_recdata2 =(sqrt(10)/128)*fftshift(fft(cyclic_pre_rem2.')).'; % freq domain transform

ser_data_1 = reshape(FFT_recdata1.',nbitpersym*nsym,1)'; % serial coversion
ser_data_2 = reshape(FFT_recdata2.',nbitpersym*nsym,1)'; % serial coversion

%%
rx1 = ser_data_1; rx2 = ser_data_2;
%%
%Reconstruct the Channels to use at STBC decoder
H1 = intdump(H1,Nc);
H2 = intdump(H2,Nc);
H3 = intdump(H3,Nc);
H4 = intdump(H4,Nc);
H5 = intdump(H5,Nc);
H6 = intdump(H6,Nc);
H7 = intdump(H7,Nc);
H8 = intdump(H8,Nc);
H1 = fft(H1); H2 = fft(H2); H3 = fft(H3);H4 = fft(H4);
H5 = fft(H5); H6 = fft(H6); H7 = fft(H7);H8 = fft(H8);
%%
e = 0.001*(randn(1,1)+j*randn(1,1));
% Space Time Combiner
for i = 1:size(rx1,2)/2
z0, D) = rx1, 2*i-1).* (conj(H1, 2*i-1)+e)) + ...
conj(rx1, 2*i)).* ((H3, 2*i)+e))+...
rx2, 2*i-1).* (conj(H2, 2*i-1)+e)) + ...
conj(rx2, 2*i)).* ((H4, 2*i)+e));
z1, D) = rx1, 2*i-1).* (conj(H3, 2*i-1)+e)) - ...
conj(rx1, 2*i)).* ((H1, 2*i)+e))+...
rx2, 2*i-1).* (conj(H4, 2*i-1)+e)) - ...
conj(rx2, 2*i)).* ((H2, 2*i)+e));

z, [2*i-1 2*i]) = [z0 z1];
end

demod21 = demodulate(bpskdemod, z);
error21(packetIdx) = biterr(demod21, data);
end
% for G2 coded 2x1 system
BER21(idx) = sum(error21)/(numPackets*frmLen);
% Plot results
semilogy(EbNo(1:idx), BER21(1:idx), 'g*');
legend('SFBC System (2Tx 2Rx)');
drawnow;
end
fitBER21 = berfit(EbNo, BER21);
semilogy(EbNo, fitBER21, 'g');
hold off;
)
thanks
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…