You are on page 1of 77

:

CDMA
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CDMA
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DS-CDMA
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DS-CDMA
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DS-CDMA
.. . . . . . . . . . . . . . . . . . . . . . . . .
.. . . . . . . . . . MAI
. . . . . . . . . . . . . . . . . . . . . . . . . . . . DS-CDMA
.. BER BPSK/DS-CDMA . . .
.. BER BPSK/DS-CDMA
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


. . . . . . . . . . . . . . . . . .
.
. . . . . . . . . . . . . . . .
..
. . . . . . . . . . . . . .
..
. ). . . . . . . . . . . . . . . . . . . (Encoding
. ). . . . . . . . . . . . . . . . . . . (Population
. ). . . . . . . . . . . . . . . (Fitness function
. . . . . . . . . . . . . . . . . . . . . . . . .
.. )(Roulette Wheel Selection
.. ). . . . . (Elitism Selection
. ). . . . . . . . . . . . . . . . . (Crossover
.. . . . . . . . . . . . . . . .
.. . . . . . . . . . . . . . . .
.. . . . . . . . . . . . . . . . . .
. ). . . . . . . . . . . . . . . . . . (Mutation
.. . . . . . . . . . . . . .
. ). . . . . . . . . . . . . . . . . . . . (Replace

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

MC-CDMA
Annealing
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MC-CDMA
.. . . . . . . . . . . . . . . . . . . . MC-CDMA
.. . . . . . . . . . . . . . . . . . MC-CDMA

.
.
.
.
.
.
.
.
.
.
.
.
.

. . . . . . GA
.. . . . . . . . . . . . . . . . . . . .
.. )( . . . . . . . . . . . . . . . . .
.. . . . . . . . . . . . . . . . . . . . . . . .
.. . . . . . . . . . . . . . . . . . . . . . . . . . .
.. . . . . . . . . . . . . . . . . . . . . . . . . . .
.. . . . . . . . . . . . . . . . . . . . . . . . . . .
.. . . . . . . . . . . . . . . . . . . . . . .
.. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.. . . . . . . . . . . . . . . MC-CDMA
.. MC-CDMA . . . . . . . .
.. BER . MRC
.. DFT
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . MC-CDMA .
. . . . . MC-CDMA in Rayleigh Channel Single User .
. . . . . . . . . . . MC-CDMA in Rayleigh Channel .
Estimation and Multi-user Detection for MC-CDMA .
. . . . . . . . . . . . System Using Genetic Algorithm
. . . . . . MSE (N=4)of various estimation schemes .

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
Joint Channel
. . . . . . . . .
. . . . . . . . .


CDMA
.

CDMA

.
.
.

.
TDMA , OFDM . OFDM
TDMA
. .
CDMA .

.
.

MAI .

.
.

:. CDMA

MAI CDMA .
. spreading code
.
))(Spread Spectrum Multiple Access (SSMA
CDMA .
. CDMA .
. CDMA
DS-CDMA

.
. CDMA )) (frequency hopping CDMA (FH-CDMA
.

. FH CDMA jamming
FH CDMA. (Slow Frequency Hopping) SFH (Fast Frequency
Hopping) FFH . FFH


SFH
. CDMA TH-CDMA
.
.

CDMA . hybrid

CDMA .
CDMA .

CDMA MC-

. MC-CDMA

TDMA , OFDM . OFDM )


( CDMA . CDMA MC-CDMA .
) (MC ) (CDMA . DS
CDMA CDMA .

TDMA , FDMA .
CDMA , FDMA , TDMA .

.
FDMA TDMA CDMA

MAI . TDMA , CDMA


. CDMA, FDMA
. CDMA
.

) (ISI .

CDMA

.
) (fading

.
CDMA -

- .

. .
MAI

CDMA

.
.
. CDMA
DS-CDMA .

:.

DS-CDMA k

. . despreading
.

DS-CDMA

CDMA . .

k k=1,2,...,K. . BPSK

. ) dk (t

) ck (t . .
. .
Q chip .
k-1 .

DS-CDMA

k k ) ck (t
.
. . .
)(.
rad
wc
sec

Sk (t) = Adk (t)ck (t) cos wc t


A . DS-CDMA

. DS-CDMA
k k-1
. . .
) . SS (BS
)(.

) sk (t k

k=

= )r(t

uplink

:. PSD

despred

. . PSD PSD

. despresd

T
.
Tc

Tc

Tc .

chip

k k . .

..


)(.

) (K = . :
) r(t) = s (t )c (t )cos(wc t +

= wc .
despread .
)(.

) sb (t) = r(t)c (t ) = Ad (t )c (t )c (t ) cos(wc t +

. ).
( .

correlator

) (. correlator .
)(.

sb (t) cos(wc t + + )dt

t +T

= z

T .

= ) = sb (t
.
)sb (t) = Ad (t)c (t) cos(wc t

)(.

. . ) ( =
.
d (t)c (t)[cos (wc t) + ]dt

)(.

t +T

)Ad (t)c (t) cos (wc t

t +T

= z

cos wc t ) wc ) d (t)c (t(


z .
Ad (t)c dt

)(.

t +T

= z

d BPSK (d (t) = c (t) = T


AT

)(.

z =

. ) :( =
Ad (t )c (t )c (t ) cos(wc t + ) cos(wc t + + )dt
)(.

Ad (t )c (t )c (t ) cos()dt

t +T
t
t +T

= z

])[cos(A + B) + cos(A B

] [cos[(wc t + ) + correlator .

d (t ) = :

= cos A cos B .

)(.

)cos()Rcc (

) Rcc (
)(.

c (t )c (t )dt =

t +T

)cos(

) c (t .
T
= )Rcc (
)c ( )c (

z =


Rcc . | .


..

| SNR BER .

Rcc BER .

MAI

) (k > .

)sk (t k )sk (t)(t) = sk (t


= ) (t tk
) (t tk
)(.
k

= )r(t

k=

k = . ) r(t ) c (t )d (t
. K ) c (t
.
)(.

) sk (t k )c (t

k=

= )sb (t

correlator . correlator
.
sk (t k )c (t ) cos(wc t + )dt

k=

) [s (t )c (t ) + s (t )c (t
)(.

t +T
t
t +T

+ . . . + sk (t k )c (t )] cos(wc t + )dt

= z

k = =
sk (t)c (t) cos(wc t)dt
Adk (t)ck (t)c (t) cos (wc t)dt

k=
K

t
t +T

k=
K

k=

[d (t)c (t) + d (t)c (t)c (t) + . . . + dk (t)ck (t)c (t)]dt

= z

t +T

dk (t)ck (t)c (t)dt


)(.

t +T

t
t +T

=
=

) cos(wc t .

)(.

for i = j

for i = j

= ci (t)cj (t)dt

. d (t) =
c (t) = T

:
AT

)(.

z =

.
. (
ci (t )ci (t) =

) ( .( = . .

MAI .

T
for i = j
= ci (t)cj (t)dt
)(.

= Rij = for i
j


:
[d (t)c (t) + d (t)c (t)c (t) + . . . + dk (t)ck (t)c (t)]dt

t +T

= )z (t

A
] = [T T R . . . T RK

)(.

MAI .

DS-CDMA

lrDS-CDMA BPSK ) .(.


BER . .
BPSK . c = A
P

P . Eb = A T = P T

). .(BPSK
R .
T chip Tc .T = QTc
. chip
.
K .
K .
K .

:.

DS-CDMA .

k . . despread
.

..

BER BPSK/DS-CDMA

AWGN MAI K

. .
. ) r(t K
. k .
AWGN :
)(.

)(.

)P dk (t k + n(t

= )r(t

k=

z correlator .
T

= z
r(t)c (t t )dt

= c .

. ( = = ) :

r(t)c (t)dt
K
]
[

P d (t)c (t) +
P dk (t k )ck (t k )c (t) + n(t)c (t) dt

= z

k=

)(.

=D + I +

n(t) .

) ( D . .
T
= D
P d (t)c (t)dt
)(.

c (t) = d (t) = :

D = P T

)(.

n(t) AWGN.
T

)(.

n(t)c (t)dt

despread AWGN n(t) .

. ] var[ .

]
n(u)c (u)du

)(.

] var[] =E[
[ T

=E
n(t)c (t)dt

E[n(t)n(u)]c (t)c (u)dtdu

) n(t :

)(.

)(t u

= ])E[n(t)n(u

] var[ :

N T
N T
= (t u)c (t)c (u)dtdu
= c (u)du
)(.

= ]var[


I . MAI .
T

)(.

dk (t k )ck (t k )c (t)dt

=I

k=

k . I
. I
.
)(.

T
= ]T = QTc var[I
(k )P

(k )P

QTc

= P

K
QTc
k=

= ]var[I

SNR ) (.
D
]var[] + var[I
[
]
PT
SNRo = N T
T

+ Q (k )P
[ N T
]
T
(k )P

=
+
PT
PT
]
[
N
k
+
=
Eb
Q

)(.

= SNRo

)(.

MAI

Eb
N

SNR .

SNR K Q . K Q
CCL ) (
] K = = Q [.

..

BER BPSK/DS-CDMA

.
over sampling .
CDMA TDMA .


. BER

.
z

z = D + I + D .
:

D = P T
:
N T

= ]var[

I.
)(.

P dk (t)ck (t)c (t)dt

k ck (t)c (t)dt
k :
)(.
ck (t)c (t)dt

ck (t)c (t)dt
T

K
T

k=

=I
.


P dk (t)ck (t)c (t)dt = P

= Ik

k .
T
ck (t)c (t)dt = Rk, T

)(.

P Rk, T

)(.

= Ik

SI I k :
K
[ K
K
]

= SI
= Ik
P Rk, T = P T
Rk,
)(.

k=

k=

k=

:
)(.

)(.

D
var[] + SI
]
[
PT
SNRo = N T
K

+
P
T
k= Rk,

K
[ N T
]
k= Rk,

=
+
PT
PT
= SNRo

P Eb = P T .:
[
]
K

= SNRo
+
Rk,
)(.
) (Eb /N
k=

SNR MAI CCL


) ( . CCL
MAI .

.

.

) (

..

.
.


. .

..

.
.

.
.

)
)

. )(Encoding

)(


].[13KHODAM , 10,11,13 OF 12 KHODAM

... ) (

. .

. .

:.

. .

:.

)(Population

. .

.
.


.
.

)(Fitness function

.
.

.
.
.

..

)(Roulette Wheel Selection

. .

:.

..

)(Elitism Selection

)(Crossover


.
)( .
:

..


. . .

:.

..


. . .

:.

..

. .
.

:.

)(Mutation


.
.
.

.
. . .

..

.
.

:.

)(Replace


.

.

. .

:. .



MC-CDMA

Annealing

:
MC-CDMA ) (MAI
.


) (GA

. GA

GA

SAM - GA ) (SA .
SAM - GA .
SAM - GA . SAM - GA
) (MSE ) (BER
CIR MC-CDMA
.

:
MC-CDMA

) (GA

annealing

.

. MC-CDMA ) (OFDM ) (CDMA

MC-CDMA
OFDM CDMA .
) (MAI
.
MAI

MC-CDMA.

) (MUD

MAI . MAI
) Verdu (BER

) (OMUD

likelihood
.
OMD
BER . OMD
.
MUD
) (GA OMUD

. .
][ ) (SD V - BLAST .
OFDM . ] [
CIR DS - CDMA .

A/D

CIR GA CIR .
GA CIR MIMO OFDM CDMA
[ ] .
GA CDMA MIMO OFDM
GA MC-CDMA
. GA MC-CDMA
. GA

GA SAM - GA

) (SA .
SAM - GA . SAM - GA .
SAM - GA CIR
MC-CDMA.

:. MC-CDMA

. MC-CDMA
..

MC-CDMA

. MC-CDMA u .
P / :
P

= du
) bup (i)ps (t iTs
)(.
i= p=

Nc

SF

= SF P NC bup (i)

P i u Ps (t)

Ts.

/ SF
. NC ) (IFFT
/ .
. u
:
)(.

) ej (fc +(Pn +p)f )(tiTs ) bup (i)ps (t iTs

P
SF

= )su (t

i= p= n=

Ts = P Ts + TGI f = Ts TGI Ts TGI T


/ f

:. MC-CDMA

) (BPSK }) {au (), au (), , au (SF u


.
) (WSSUS . L
CIR .
L

) glu (t)(t l
)(.
= ) hu (t;
l=

l l glu l u . .
.
)hu (t; )d + n(t
)(.

)au (n)HPun +p (i)ej (Pn +p)f bup (i)ps (t iTs ) + n(t

) su (t

= )r(t

u=

N
P
SF

u= i= p= n=

FFT Pn + p :
N

)(.
= )rPn +p (n
au (n)HPun +p bup + n
u=

n = nI + jnQ nQ nI n quadrature
.
MRC SINR . . MRC P
u :
)(.

)u (n)rP n+p (n

SF

n=

= Dpu

:. MC-CDMA

)(.

) u (n) = au (n)(HPu n+p

MRC HPu n+p . MRC hard decision


.

..

MC-CDMA


MC-CDMA .
. TDD - CDMA
uplink
.
] [ OFDM uplink
. MC-CDMA
. . . MC-CDMA .

CIR signicant

taps

:. MC-CDMA

non-signicant taps . non-signicant taps J


. CIR
.

GA

. MC-CDMA GA
.
CIR . i , i = , , , N
. h
MRC CIR .
bi , i = , , , N . CIR
GA .

:. MC-CDMA GA

..

BPSK :
] bb = [bb , bb , , bbN

)(.

i bbi = [bbi , bbi , , bbiM ], i = , , , N N


M . CIR h
b
h = [b
h , b
h , , b
] hN

)(.

b J
hi = [b
hi , b
hi , , b
i CIR ] hiN
.

)(

..

GA .
:
) (I
MRC Np
:
.

Np

GA MRC .

Np

Np

)(

)(

)CIR (II
CIR .

. CIR
GA (NP ) . CIR
.
CIR . p
p p CIR.

..

) (ML . i ] b = [b , b , , bN
= [h
, h
, , h
] N
h GA :
SF

=
bu (i)H
u (i)au (n)]
)C(b, h
[rP n+p (i)
)(.
p
P n+p
u=

n=

..
) (roulette wheel ranking-based
) (crossover .

.
.
.



. :
) (INp .
.
) (II p .
)p

Np

p=

..

((Np p + )/

..

CIR .

CIR J

. real-coded CIR

C . A

A .
)(.

..

], [ ,

c = + j ,

A = A + C


. .
.

..
GA ) .. ( ) ..
( .
.

MATLAB .
N =
. .

..

MC-CDMA

MC-CDMA cyclic prex

:. MC-CDMA

..

MC-CDMA

MC-CDMA cyclic prex


.

:. MC-CDMA

..

BER

MRC

BER :.

..

DFT

:. DFT

GA (MSE)
) (BER CIR
MC-CDMA .

MC-CDMA

%%MC-CDMA simulink for obtain BER of User1 & User2 & User3 & User4
% Author: Salman Poozesh &

Mohammad Javad Saber

% Data Modified: March 2012

%%
clear;clc;
disp('Please Wait...');
Users = 4;

% Number of Users

N = 10^4;

% Number of Bits for

%%

Data_Users

Generation Walsh Code

n = 4;

% Number of

Data Sub-Carriers

walsh = hadamard(n);
Code1 = walsh(1,:);

% Taking 1nd row of walsh Code for User1

Code2 = walsh(2,:);

% Taking 2rd row of walsh Code for User2

Code3 = walsh(3,:);

% Taking 3rd row of walsh Code for User3

Code4 = walsh(4,:);

% Taking 4rd row of walsh Code for User4

%%

Generating Data for User1

Data_User1 = rand(1,N)>0.5;

% Generation of Data for User1

Data_User1_BPSK = 2 * Data_User1 - 1; % BPSK modulation 0 --> -1 & 1 --> 1


%%

Spreading & IFFT & Pilot for User1

Data_User11 = Data_User1_BPSK';
spData1_User1 = Data_User11 * Code1;

% Spreading for User1


spData12 = (spData1_User1)';
Ifft_Data_User1 = ifft(spData12);

% Taking the IFFT

Ifft_Data12 = Ifft_Data_User1';
%%

Append Cyclic Prefix1 for User1

y1 = [Ifft_Data12(:,(n - 2):n) Ifft_Data12];


transData1 = y1';
tx_User1 = transData1;
%%

% Transmitting Data for User1

Generating Data for User2

Data_User2 = rand(1,N)>0.5;

% Generation of Data for User2

Data_User2_BPSK = 2 * Data_User2 - 1; % BPSK modulation 0 --> -1; 1 --> 1


%%

Spreading & IFFT & Pilot for User2

Data_User21 = Data_User2_BPSK';
spData2 = Data_User21 * Code2;

% Spreading for User2

spData22 = (spData2)';
Ifft_Data_User2 = ifft(spData22);

% Taking the IFFT

Ifft_Data22 = Ifft_Data_User2';
%%

Append Cyclic Prefix1 for User2

y2 = [Ifft_Data22(:,[(n - 2):n]) Ifft_Data22];


transData2 = y2';
tx_User2 = transData2;
%%

% Transmitting Data for User2

Generating Data for User3

Data_User3 = rand(1,N)>0.5;

% Generation of Data for User3

Data_User3_BPSK = 2 * Data_User3 - 1;
%%

% BPSK modulation 0 -> -1; 1 -> 0

Spreading & IFFT & Pilot for User3


Data_User31 = Data_User3_BPSK';
spData3 = Data_User31 * Code3;

% Spreading for User3

spData32 = (spData3)';
Ifft_Data_User3 = ifft(spData32);

% Taking the IFFT

Ifft_Data32 = Ifft_Data_User3';
%%

Append Cyclic Prefix1 for User3

y3 = [Ifft_Data32(:,[(n - 2):n]) Ifft_Data32];


transData3 = y3';
tx_User3 = transData3;
%%

% Transmitting Data for User3

Generating Data for User4

Data_User4 = rand(1,N)>0.5;

% Generation of Data for User4

Data_User4_BPSK = 2 * Data_User4 - 1; % BPSK modulation 0 --> -1; 1 --> 1


%%

Spreading & IFFT & Pilot for User4

Data_User41 = Data_User4_BPSK';
spData4 = Data_User41 * Code4;

% Spreading for User4

spData42 = (spData4)';
Ifft_Data_User4 = ifft(spData42);

% Taking the IFFT

Ifft_Data42 = Ifft_Data_User4';
%%

Append Cyclic Prefix1 for User4

y4 = [Ifft_Data42(:,[(n - 2):n]) Ifft_Data42];


transData4 = y4';
tx_User4 = transData4;
%%

% Transmitting Data for User4

Adding Data for Transmission of All User

x = tx_User1 + tx_User2 + tx_User3 + tx_User4;


Data_channel = x;
%%

Addition of AWGN noise

Data_noise1 = Data_channel(:);
Data_noise2 = reshape(Data_noise1,1,length(Data_noise1));
noise = 1 / sqrt(2) * [randn(1,length(Data_noise2))
+ j * randn(1,length(Data_noise2))];
snr = [0:20];

% Multiple Eb / N0 Values

for K = 1:21
y = Data_noise2 + (sqrt(1) * 10^( - snr(K) / 20)) * noise;
%%

Receiver

received_Data = y;
%%

%Addition of Noise

% Fadded Data Received With Awgn Noise


Removing Cyclic Prefix

rx1 = reshape(received_Data,(n + 3),length(received_Data) / (n + 3));


rx12 = rx1';
rx13 = rx12(:,[(4:(n + 3))]);
rx14 = rx13';
%%

Taking FFT

fft_received_Data = fft(rx14);

%%

Despreading

recData11 = (fft_received_Data' * Code1')';


recData21 = (fft_received_Data' * Code2')';
recData31 = (fft_received_Data' * Code3')';
recData41 = (fft_received_Data' * Code4')';


%%

BER of Data User1

recData12 = real(recData11)>0;
errors_User1(K) = size(find(Data_User1 - recData12),2);
SBer1 = errors_User1 / N;
%%

% Errors for User1

% simulated ber User1

BER of Data User2

recData22 = real(recData21)>0;
errors_User2(K) = size(find(Data_User2 - recData22),2); % Errors for User2
SBer2 = errors_User2 / N;
%%

% simulated ber User2

BER of Data User3

recData32 = real(recData31)>0;
errors_User3(K) = size(find(Data_User3 - recData32),2); % Errors for User3
SBer3 = errors_User2 / N;
%%

% simulated ber User3

BER of Data User4

recData42 = real(recData41)>0;
errors_User4(K) = size(find(Data_User4 - recData42),2); % Errors for User4
SBer4 = errors_User4 / N;

% simulated ber User4

end
%%

Displaying Result

semilogy(snr,SBer1,'r','LineWidth',2);
hold on;
semilogy(snr,SBer2,'y','LineWidth',2);
hold on;
semilogy(snr,SBer3,'g','LineWidth',2);
hold on;


semilogy(snr,SBer4,'b','LineWidth',2);
axis([0 20 10^-5 0.5]);
grid on;
title('MC-CDMA,BER Vs Eb/No');
legend('Simulated BER for User1','Simulated BER for User2','Simulated BER for User3'
,'Simulated BER for User4');
ylabel('BER');xlabel('Eb/No, dB');
clc;

MC-CDMA in Rayleigh Channel Single User

%%MC-CDMA in Rayleigh Channel for Single User


% Author: Salman Poozesh & Javad Saber
% Data Modified: March 2012

%%
clc;clear;
disp('Please Wait...');
Users = 4;

% Number of Users

N = 10^4;

% Number of Bits for

%%

Data_Users

Generation Walsh Code

n = 4;

% Number of

Data Sub-Carriers

walsh = hadamard(n);
Code1 = walsh(1,:);
%%

% Taking 1nd row of walsh Code for User1


Generating Data for User1

Data_User1 = rand(1,N)>0.5;

% Generation of Data for User1

Data_User1_BPSK = 2 * Data_User1 - 1; % BPSK modulation 0 --> -1 & 1 --> 1


%%

Spreading & IFFT for User1

Data_User11 = Data_User1_BPSK';
spData1_User1 = Data_User11 * Code1;

% Spreading for User1

spData12 = (spData1_User1)';
Ifft_Data_User1 = ifft(spData12);

% Taking the IFFT

Ifft_Data12 = Ifft_Data_User1';


%%

Append Cyclic Prefix1 for User1

y1 = [Ifft_Data12(:,(n - 2):n) Ifft_Data12];


transData1 = y1';
tx_User1 = transData1;
%%

% Transmitting Data for User1

Adding Data for Transmission of All User

x = tx_User1;
%%

Creating Rayleigh Channel

Taps = 4;

% Number of Taps

p1 = 0.5 / 2.3;

% Power of Tap1

p2 = 0.9 / 2.3;

% Power of Tap2

p3 = 0.7 / 2.3;

% Power of Tap3

p4 = 0.2 / 2.3;

% Power of Tap4

gain1 = sqrt(p1 / 2) * [randn(1,N) + j * randn(1,N)];

% Gain for Tap1

gain2 = sqrt(p2 / 2) * [randn(1,N) + j * randn(1,N)];

% Gain for Tap2

gain3 = sqrt(p3 / 2) * [randn(1,N) + j * randn(1,N)];

% Gain for Tap3

gain4 = sqrt(p4 / 2) * [randn(1,N) + j * randn(1,N)];

% Gain for Tap4

x11 = x(:);
x12 = reshape(x11,1,length(x11));
i = 1:length(x12);
delay1 = 1;
delay2 = 2;
delay3 = 3;
x13 = circshift(x12,[1 delay1]);

% Producing one sample delay in Tap2

x14 = circshift(x12,[1 delay2]);

% Producing one sample delay in Tap3


x15 = circshift(x12,[1 delay3]);

% Producing one sample delay in Tap4

x1 = reshape(x13,(n + 3),length(x13) / (n + 3));


x2 = reshape(x14,(n + 3),length(x14) / (n + 3));
x3 = reshape(x15,(n + 3),length(x15) / (n + 3));
ch1 = repmat(gain1,(n + 3),1);
ch2 = repmat(gain2,(n + 3),1);
ch3 = repmat(gain3,(n + 3),1);
ch4 = repmat(gain4,(n + 3),1);
Data_channel = x .* ch1 + x1 .* ch2 + x2 .* ch3 + x3 .* ch4;
% Passing Data through channel
%%

Addition of AWGN noise

Data_noise1 = Data_channel(:);
Data_noise2 = reshape(Data_noise1,1,length(Data_noise1));
noise = 1 / sqrt(2) * [randn(1,length(Data_noise2))
+ j * randn(1,length(Data_noise2))];
snr = [0:20];

% Multiple Eb / N0 Values

for K = 1:21
y = Data_noise2 + (sqrt(1) * 10^( - snr(K) / 20)) * noise;
%%

Receiver

received_Data = y;
%%

%Addition of Noise

% Fadded Data Received With Awgn Noise


Removing Cyclic Prefix

rx1 = reshape(received_Data,(n + 3),length(received_Data) / (n + 3));


rx12 = rx1';
rx13 = rx12(:,[(4:(n + 3))]);


rx14 = rx13';
%%

Taking FFT

fft_received_Data = fft(rx14);

%%

Channel Estimation

channel_response=fft([gain1;gain2;gain3;gain4],n);
data_equilized=fft_received_Data.*conj(channel_response);
recData11 = (data_equilized' * Code1')';
%%

BER of Data User1

recData12 = real(recData11)>0;
errors_User1(K) = size(find(Data_User1 - recData12),2); % Errors for User1
SBer1 = errors_User1 / N;

% simulated ber User1

end
%%

Displaying Result

semilogy(snr,SBer1,'g','LineWidth',2.5);
axis([0 20 10^-5 10^0]);
grid on;
title('MC-CDMA in Rayleigh Channel for Single User,BER Vs Eb/No');
legend('Simulated BER for Single User');
ylabel('BER');xlabel('Eb/No, dB');
clc;

MC-CDMA in Rayleigh Channel

%%MC-CDMA simulink in Rayleigh Channel for obtain BER of User1 & User2 & User3 & User4
% Author: Salman Poozesh & Javad Saber
% Data Modified: March 2012

%%
clear;clc;
disp('Please Wait...');
Users = 4;

% Number of Users

N = 10^4;

% Number of Bits for

%%

Data_Users

Generation Walsh Code

n = 4;

% Number of

Data Sub-Carriers

walsh = hadamard(n);
Code1 = walsh(1,:);

% Taking 1nd row of walsh Code for User1

Code2 = walsh(2,:);

% Taking 2rd row of walsh Code for User2

Code3 = walsh(3,:);

% Taking 3rd row of walsh Code for User3

Code4 = walsh(4,:);

% Taking 4rd row of walsh Code for User4

%%

Generating Data for User1

Data_User1 = rand(1,N)>0.5;

% Generation of Data for User1

Data_User1_BPSK = 2 * Data_User1 - 1; % BPSK modulation 0 --> -1 & 1 --> 1


%%

Spreading & IFFT for User1

Data_User11 = Data_User1_BPSK';
spData1_User1 = Data_User11 * Code1;

% Spreading for User1


spData12 = (spData1_User1)';
Ifft_Data_User1 = ifft(spData12);

% Taking the IFFT

Ifft_Data12 = Ifft_Data_User1';
%%

Append Cyclic Prefix1 for User1

y1 = [Ifft_Data12(:,(n - 2):n) Ifft_Data12];


transData1 = y1';
tx_User1 = transData1;
%%

% Transmitting Data for User1

Generating Data for User2

Data_User2 = rand(1,N)>0.5;

% Generation of Data for User2

Data_User2_BPSK = 2 * Data_User2 - 1; % BPSK modulation 0 --> -1; 1 --> 1


%%

Spreading & IFFT for User2

Data_User21 = Data_User2_BPSK';
spData2 = Data_User21 * Code2;

% Spreading for User2

spData22 = (spData2)';
Ifft_Data_User2 = ifft(spData22);

% Taking the IFFT

Ifft_Data22 = Ifft_Data_User2';
%%

Append Cyclic Prefix1 for User2

y2 = [Ifft_Data22(:,[(n - 2):n]) Ifft_Data22];


transData2 = y2';
tx_User2 = transData2;
%%

% Transmitting Data for User2

Generating Data for User3

Data_User3 = rand(1,N)>0.5;

% Generation of Data for User3

Data_User3_BPSK = 2 * Data_User3 - 1;
%%

% BPSK modulation 0 -> -1; 1 -> 0

Spreading & IFFT for User3


Data_User31 = Data_User3_BPSK';
spData3 = Data_User31 * Code3;

% Spreading for User3

spData32 = (spData3)';
Ifft_Data_User3 = ifft(spData32);

% Taking the IFFT

Ifft_Data32 = Ifft_Data_User3';
%%

Append Cyclic Prefix1 for User3

y3 = [Ifft_Data32(:,[(n - 2):n]) Ifft_Data32];


transData3 = y3';
tx_User3 = transData3;
%%

% Transmitting Data for User3

Generating Data for User4

Data_User4 = rand(1,N)>0.5;

% Generation of Data for User4

Data_User4_BPSK = 2 * Data_User4 - 1; % BPSK modulation 0 --> -1; 1 --> 1


%%

Spreading & IFFT for User4

Data_User41 = Data_User4_BPSK';
spData4 = Data_User41 * Code4;

% Spreading for User4

spData42 = (spData4)';
Ifft_Data_User4 = ifft(spData42);

% Taking the IFFT

Ifft_Data42 = Ifft_Data_User4';
%%

Append Cyclic Prefix1 for User4

y4 = [Ifft_Data42(:,[(n - 2):n]) Ifft_Data42];


transData4 = y4';
tx_User4 = transData4;
%%

% Transmitting Data for User4

Adding Data for Transmission of All User

x = tx_User1 + tx_User2 + tx_User3 + tx_User4;


%%

Creating Rayleigh Channel

Taps = 4;

% Number of Taps

p1 = 0.5 / 2.3;

% Power of Tap1

p2 = 0.9 / 2.3;

% Power of Tap2

p3 = 0.7 / 2.3;

% Power of Tap3

p4 = 0.2 / 2.3;

% Power of Tap4

gain1 = sqrt(p1 / 2) * [randn(1,N) + j * randn(1,N)];

% Gain for Tap1

gain2 = sqrt(p2 / 2) * [randn(1,N) + j * randn(1,N)];

% Gain for Tap2

gain3 = sqrt(p3 / 2) * [randn(1,N) + j * randn(1,N)];

% Gain for Tap3

gain4 = sqrt(p4 / 2) * [randn(1,N) + j * randn(1,N)];

% Gain for Tap4

x11 = x(:);
x12 = reshape(x11,1,length(x11));
i = 1:length(x12);
delay1 = 1;
delay2 = 2;
delay3 = 3;
x13 = circshift(x12,[1 delay1]);

% Producing one sample delay in Tap2

x14 = circshift(x12,[1 delay2]);

% Producing one sample delay in Tap3

x15 = circshift(x12,[1 delay3]);

% Producing one sample delay in Tap4

x1 = reshape(x13,(n + 3),length(x13) / (n + 3));


x2 = reshape(x14,(n + 3),length(x14) / (n + 3));
x3 = reshape(x15,(n + 3),length(x15) / (n + 3));
ch1 = repmat(gain1,(n + 3),1);
ch2 = repmat(gain2,(n + 3),1);


ch3 = repmat(gain3,(n + 3),1);
ch4 = repmat(gain4,(n + 3),1);
Data_channel = x .* ch1 + x1 .* ch2 + x2 .* ch3 + x3 .* ch4;
% Passing Data through channel
%%

Addition of AWGN noise

Data_noise1 = Data_channel(:);
Data_noise2 = reshape(Data_noise1,1,length(Data_noise1));
noise = 1 / sqrt(2) * [randn(1,length(Data_noise2))
+ j * randn(1,length(Data_noise2))];
snr = [0:20];

% Multiple Eb / N0 Values

for K = 1:21
y = Data_noise2 + (sqrt(1) * 10^( - snr(K) / 20)) * noise;
%%

Receiver

received_Data = y;
%%

%Addition of Noise

% Fadded Data Received With Awgn Noise


Removing Cyclic Prefix

rx1 = reshape(received_Data,(n + 3),length(received_Data) / (n + 3));


rx12 = rx1';
rx13 = rx12(:,[(4:(n + 3))]);
rx14 = rx13';
%%

Taking FFT

fft_received_Data = fft(rx14);

%%

Channel Estimation

channel_response=fft([gain1;gain2;gain3;gain4],n);


data_equilized=fft_received_Data.*conj(channel_response);
recData11 = (data_equilized' * Code1')';
recData21 = (data_equilized' * Code2')';
recData31 = (data_equilized' * Code3')';
recData41 = (data_equilized' * Code4')';
%%

BER of Data User1

recData12 = real(recData11)>0;
errors_User1(K) = size(find(Data_User1 - recData12),2); % Errors for User1
SBer1 = errors_User1 / N;
%%

% simulated ber User1

BER of Data User2

recData22 = real(recData21)>0;
errors_User2(K) = size(find(Data_User2 - recData22),2); % Errors for User2
SBer2 = errors_User2 / N;
%%

% simulated ber User2

BER of Data User3

recData32 = real(recData31)>0;
errors_User3(K) = size(find(Data_User3 - recData32),2); % Errors for User3
SBer3 = errors_User2 / N;
%%

% simulated ber User3

BER of Data User4

recData42 = real(recData41)>0;
errors_User4(K) = size(find(Data_User4 - recData42),2); % Errors for User4
SBer4 = errors_User4 / N;

% simulated ber User4

end
%%

Displaying Result

semilogy(snr,SBer1,'r','LineWidth',2);


hold on;
semilogy(snr,SBer2,'y','LineWidth',2);
hold on;
semilogy(snr,SBer3,'g','LineWidth',2);
hold on;
semilogy(snr,SBer4,'b','LineWidth',2);
axis([0 20 10^-5 10^0]);
grid on;
title('MC-CDMA in Rayleigh Channel,BER Vs Eb/No');
hleg=legend('Simulated BER for User1','Simulated BER for User2'
,'Simulated BER for User3','Simulated BER for User4');
set(hleg,'FontAngle','italic','TextColor',[.3 .2 .1])
ylabel('BER');xlabel('Eb/No, dB');
clc;

Joint Channel Estimation and Multi-user De-

tection for MC-CDMA System Using Genetic


Algorithm
function Main
clear;clc;
McCdmaSingleUser();
hold on;
McCdmaRayleigh();
hold on;
Users = 4;

% Number of Users

N = 10^4;

% Number of Bits for

Ip = (1:8:N);

% position of Pilots

%%

Data_Users

Generation of Walsh Code

n = 4;

% Number of

Data Sub-Carriers

walsh = hadamard(n);
Code1 = walsh(1,:);

% Taking 1nd row of walsh Code for User1

Code2 = walsh(2,:);

% Taking 2rd row of walsh Code for User2

Code3 = walsh(3,:);

% Taking 3rd row of walsh Code for User3

Code4 = walsh(4,:);

% Taking 4rd row of walsh Code for User4

%%

Generating Data for User1

Data_User1 = rand(1,N)>0.5;

% Generation of Data for User1

Data_User1_BPSK = 2 * Data_User1 - 1; % BPSK modulation 0 --> -1 & 1 --> 1


%%

Spreading & IFFT & Pilot for User1

Data_User11 = Data_User1_BPSK';
spData1_User1 = Data_User11 * Code1;

% Spreading for User1

spData12 = (spData1_User1)';
Pilot_User1 = rand(4,length(Ip))>0.5; % Generating Pilot for User1
Pilot_User1 = 2 * Pilot_User1 - 1;

% 0 --> -1 & 1 --> 1

for i = 1:4

% add Pilot to User1

spd(i,:) = AddC(spData12(i,:),Pilot_User1(i,:),Ip);
end
spData12 = spd;
IFFTData_User1 = ifft(spData12);

% Taking the IFFT

IFFTData12 = IFFTData_User1';
%%

Append Cyclic Prefix1 for User1

y1 = [IFFTData12(:,(n - 2):n) IFFTData12];


transData1 = y1';
tx_User1 = transData1;
%%

% Transmitting Data for User1

Generating Data for User2

Data_User2 = rand(1,N)>0.5;

% Generation of Data for User2

Data_User2_BPSK = 2 * Data_User2 - 1; % BPSK modulation 0 --> -1; 1 --> 1


%%

Spreading & IFFT & Pilot for User2

Data_User21 = Data_User2_BPSK';
spData2 = Data_User21 * Code2;

% Spreading for User2

spData22 = (spData2)';
Pilot_User2 = rand(4,length(Ip))>0.5; % Generating Pilot for User1


Pilot_User2 = 2 * Pilot_User2 - 1;

% 0 --> -1 & 1 --> 1

for i = 1:4

% Add Pilot to User1

spd(i,:) = AddC(spData22(i,:),Pilot_User2(i,:),Ip);
end
spData22 = spd;
IFFTData_User2 = ifft(spData22);

% Taking the IFFT

IFFTData22 = IFFTData_User2';
%%

Append Cyclic Prefix1 for User2

y2 = [IFFTData22(:,[(n - 2):n]) IFFTData22];


transData2 = y2';
tx_User2 = transData2;
%%

% Transmitting Data for User2

Generating Data for User3

Data_User3 = rand(1,N)>0.5;

% Generation of Data for User3

Data_User3_BPSK = 2 * Data_User3 - 1;
%%

% BPSK modulation 0 -> -1; 1 -> 0

Spreading & IFFT & Pilot for User3

Data_User31 = Data_User3_BPSK';
spData3 = Data_User31 * Code3;

% Spreading for User3

spData32 = (spData3)';
Pilot_User3 = rand(4,length(Ip))>0.5; % Generating Pilot for User3
Pilot_User3 = 2 * Pilot_User3 - 1;

% 0 --> -1 & 1 --> 1

for i = 1:4

% add Pilot to User3

spd(i,:) = AddC(spData32(i,:),Pilot_User3(i,:),Ip);
end
spData32 = spd;


IFFTData_User3 = ifft(spData32);

% Taking the IFFT

IFFTData32 = IFFTData_User3';
%%

Append Cyclic Prefix1 for User3

y3 = [IFFTData32(:,[(n - 2):n]) IFFTData32];


transData3 = y3';
tx_User3 = transData3;
%%

% Transmitting Data for User3

Generating Data for User4

Data_User4 = rand(1,N)>0.5;

% Generation of Data for User4

Data_User4_BPSK = 2 * Data_User4 - 1; % BPSK modulation 0 --> -1; 1 --> 1


%%

Spreading & IFFT & Pilot for User4

Data_User41 = Data_User4_BPSK';
spData4 = Data_User41 * Code4;

% Spreading for User4

spData42 = (spData4)';
Pilot_User4 = rand(4,length(Ip))>0.5; % Generating Pilot for User4
Pilot_User4 = 2 * Pilot_User4 - 1;

% 0 --> -1 & 1 --> 1

for i = 1:4

% add Pilot to User4

spd(i,:) = AddC(spData42(i,:),Pilot_User4(i,:),Ip);
end
spData42 = spd;
IFFTData_User4 = ifft(spData42);

% Taking the IFFT

IFFTData42 = IFFTData_User4';
%%

Append Cyclic Prefix1 for User4

y4 = [IFFTData42(:,[(n - 2):n]) IFFTData42];


transData4 = y4';


tx_User4 = transData4;
%%

% Transmitting Data for User4

Adding Data for Transmission of All User

x = tx_User1 + tx_User2 + tx_User3 + tx_User4;


%%

Creating Rayleigh Channel

Taps = 4;

% Number of Taps

p1 = 0.5 / 2.3;

% Power of Tap1

p2 = 0.9 / 2.3;

% Power of Tap2

p3 = 0.7 / 2.3;

% Power of Tap3

p4 = 0.2 / 2.3;

% Power of Tap4

gain1 = sqrt(p1 / 2) * [randn(1,N + length(Ip)) + j * randn(1,N + length(Ip))];


% Gain for Tap1
gain2 = sqrt(p2 / 2) * [randn(1,N + length(Ip)) + j * randn(1,N + length(Ip))];
% Gain for Tap2
gain3 = sqrt(p3 / 2) * [randn(1,N + length(Ip)) + j * randn(1,N + length(Ip))];
% Gain for Tap3
gain4 = sqrt(p4 / 2) * [randn(1,N + length(Ip)) + j * randn(1,N + length(Ip))];
% Gain for Tap4
x11 = x(:);
x12 = reshape(x11,1,length(x11));
i = 1:length(x12);
delay1 = 1;
delay2 = 2;
delay3 = 3;
x13 = circshift(x12,[1 delay1]);

% Producing one sample delay in Tap2


x14 = circshift(x12,[1 delay2]);

% Producing one sample delay in Tap3

x15 = circshift(x12,[1 delay3]);

% Producing one sample delay in Tap4

x1 = reshape(x13,(n + 3),length(x13) / (n + 3));


x2 = reshape(x14,(n + 3),length(x14) / (n + 3));
x3 = reshape(x15,(n + 3),length(x15) / (n + 3));
ch1 = repmat(gain1,(n + 3),1);
ch2 = repmat(gain2,(n + 3),1);
ch3 = repmat(gain3,(n + 3),1);
ch4 = repmat(gain4,(n + 3),1);
Data_channel = x .* ch1 + x1 .* ch2 + x2 .* ch3 + x3 .* ch4;
% Passing Data through channel
%%

Addition of AWGN noise

Data_noise1 = Data_channel(:);
Data_noise2 = reshape(Data_noise1,1,length(Data_noise1));
noise = 1 / sqrt(2) * [randn(1,length(Data_noise2))
+ j * randn(1,length(Data_noise2))];
snr = [0:20];

% Multiple Eb / N0 Values

for K = 1:21
y = Data_noise2 + (sqrt(1) * 10^( - snr(K) / 20)) * noise;
%%
Data_Received = y;
%%

%Addition of Noise

Receiver
% Fadded Data Received With Awgn Noise
Removing Cyclic Prefix

rx1 = reshape(Data_Received,(n + 3),length(Data_Received) / (n + 3));


rx12 = rx1';


rx13 = rx12(:,[(4:(n + 3))]);
rx14 = rx13';
%%

Taking FFT

FFT_Data_Received = fft(rx14);
%%

Extract Pilots

Pilot_Received = FFT_Data_Received(:,Ip);
FFT_Data_Received(:,Ip) = [];
%%

Channel Estimation % Multi-user Detection

RecData11 = (FFT_Data_Received' * Code1')';


RecData21 = (FFT_Data_Received' * Code2')';
RecData31 = (FFT_Data_Received' * Code3')';
RecData41 = (FFT_Data_Received' * Code4')';
[b1,H1] = GeneticA(RecData11);
RecData12 = b1;
[b2,H2] = GeneticA(RecData21);
RecData22 = b2;
[b3,H3] = GeneticA(RecData31);
RecData32 = b3;
[b4,H4] = GeneticA(RecData41);
RecData42 = b4;
%%

BER of User1

RecData12 = real(RecData11)>0;
errors_User1(K) = size(find(Data_User1 - RecData12),2)
SBer1 = errors_User1 / N;

% Errors for User1

% simulated ber User1


%%

BER of User2

RecData22 = real(RecData21)>0;
errors_User2(K) = size(find(Data_User2 - RecData22),2); % Errors for User2
SBer2 = errors_User2 / N;
%%

% simulated ber User2

BER of User3

RecData32 = real(RecData31)>0;
errors_User3(K) = size(find(Data_User3 - RecData32),2); % Errors for User3
SBer3 = errors_User2 / N;
%%

% simulated ber User3

BER of User4

RecData42 = real(RecData41)>0;
errors_User4(K) = size(find(Data_User4 - RecData42),2); % Errors for User4
SBer4 = errors_User4 / N;

% simulated ber User4

end
%%

Displaying Result

semilogy(snr,SBer1,'r','LineWidth',2);
hold on;
axis([0 20 10^-5 10^0]);
grid on
legend('Single user bound','MRC N=4','GA(Roulette Wheel) N=4');

MSE (N=4)of various estimation schemes

%%MSE of MC-CDMA simulink in Rayleigh Channel


% Algorithm
% Author: Salman Poozesh & Mohamad Javad Saber
% Data Modified: March 2012
function MSE
clear;clc;
disp('Please Wait...');
a();
hold on;
Users = 4;

% Number of Users

N = 10^4;

% Number of Bits for

Ip = (1:8:N);

% position of Pilots

%%

Data_Users

Generation of Walsh Code

n = 4;

% Number of

Data Sub-Carriers

walsh = hadamard(n);
Code1 = walsh(1,:);

% Taking 1nd row of walsh Code for User1

Code2 = walsh(2,:);

% Taking 2rd row of walsh Code for User2

Code3 = walsh(3,:);

% Taking 3rd row of walsh Code for User3

Code4 = walsh(4,:);

% Taking 4rd row of walsh Code for User4

%%

Generating Data for User1

Data_User1 = rand(1,N)>0.5;

% Generation of Data for User1

Data_User1_BPSK = 2 * Data_User1 - 1; % BPSK modulation 0 --> -1 & 1 --> 1


%%

Spreading & IFFT & Pilot for User1

Data_User11 = Data_User1_BPSK';
spData1_User1 = Data_User11 * Code1;

% Spreading for User1

spData12 = (spData1_User1)';
Pilot_User1 = rand(4,length(Ip))>0.5; % Generating Pilot for User1
Pilot_User1 = 2 * Pilot_User1 - 1;

% 0 --> -1 & 1 --> 1

for i = 1:4

% add Pilot to User1

spd(i,:) = AddC(spData12(i,:),Pilot_User1(i,:),Ip);
end
spData12 = spd;
IFFTData_User1 = ifft(spData12);

% Taking the IFFT

IFFTData12 = IFFTData_User1';
%%

Append Cyclic Prefix1 for User1

y1 = [IFFTData12(:,(n - 2):n) IFFTData12];


transData1 = y1';
tx_User1 = transData1;
%%

% Transmitting Data for User1

Generating Data for User2

Data_User2 = rand(1,N)>0.5;

% Generation of Data for User2

Data_User2_BPSK = 2 * Data_User2 - 1; % BPSK modulation 0 --> -1; 1 --> 1


%%

Spreading & IFFT & Pilot for User2

Data_User21 = Data_User2_BPSK';
spData2 = Data_User21 * Code2;

% Spreading for User2

spData22 = (spData2)';
Pilot_User2 = rand(4,length(Ip))>0.5; % Generating Pilot for User1


Pilot_User2 = 2 * Pilot_User2 - 1;

% 0 --> -1 & 1 --> 1

for i = 1:4

% Add Pilot to User1

spd(i,:) = AddC(spData22(i,:),Pilot_User2(i,:),Ip);
end
spData22 = spd;
IFFTData_User2 = ifft(spData22);

% Taking the IFFT

IFFTData22 = IFFTData_User2';
%%

Append Cyclic Prefix1 for User2

y2 = [IFFTData22(:,[(n - 2):n]) IFFTData22];


transData2 = y2';
tx_User2 = transData2;
%%

% Transmitting Data for User2

Generating Data for User3

Data_User3 = rand(1,N)>0.5;

% Generation of Data for User3

Data_User3_BPSK = 2 * Data_User3 - 1;
%%

% BPSK modulation 0 -> -1; 1 -> 0

Spreading & IFFT & Pilot for User3

Data_User31 = Data_User3_BPSK';
spData3 = Data_User31 * Code3;

% Spreading for User3

spData32 = (spData3)';
Pilot_User3 = rand(4,length(Ip))>0.5; % Generating Pilot for User3
Pilot_User3 = 2 * Pilot_User3 - 1;

% 0 --> -1 & 1 --> 1

for i = 1:4

% add Pilot to User3

spd(i,:) = AddC(spData32(i,:),Pilot_User3(i,:),Ip);
end
spData32 = spd;


IFFTData_User3 = ifft(spData32);

% Taking the IFFT

IFFTData32 = IFFTData_User3';
%%

Append Cyclic Prefix1 for User3

y3 = [IFFTData32(:,[(n - 2):n]) IFFTData32];


transData3 = y3';
tx_User3 = transData3;
%%

% Transmitting Data for User3

Generating Data for User4

Data_User4 = rand(1,N)>0.5;

% Generation of Data for User4

Data_User4_BPSK = 2 * Data_User4 - 1; % BPSK modulation 0 --> -1; 1 --> 1


%%

Spreading & IFFT & Pilot for User4

Data_User41 = Data_User4_BPSK';
spData4 = Data_User41 * Code4;

% Spreading for User4

spData42 = (spData4)';
Pilot_User4 = rand(4,length(Ip))>0.5; % Generating Pilot for User4
Pilot_User4 = 2 * Pilot_User4 - 1;

% 0 --> -1 & 1 --> 1

for i = 1:4

% add Pilot to User4

spd(i,:) = AddC(spData42(i,:),Pilot_User4(i,:),Ip);
end
spData42 = spd;
IFFTData_User4 = ifft(spData42);

% Taking the IFFT

IFFTData42 = IFFTData_User4';
%%

Append Cyclic Prefix1 for User4

y4 = [IFFTData42(:,[(n - 2):n]) IFFTData42];


transData4 = y4';


tx_User4 = transData4;
%%

% Transmitting Data for User4

Adding Data for Transmission of All User

x = tx_User1 + tx_User2 + tx_User3 + tx_User4;


%%

Creating Rayleigh Channel

Taps = 4;

% Number of Taps

p1 = 0.5 / 2.3;

% Power of Tap1

p2 = 0.9 / 2.3;

% Power of Tap2

p3 = 0.7 / 2.3;

% Power of Tap3

p4 = 0.2 / 2.3;

% Power of Tap4

gain1 = sqrt(p1 / 2) * [randn(1,N + length(Ip)) + j * randn(1,N + length(Ip))];


% Gain for Tap1
gain2 = sqrt(p2 / 2) * [randn(1,N + length(Ip)) + j * randn(1,N + length(Ip))];
% Gain for Tap2
gain3 = sqrt(p3 / 2) * [randn(1,N + length(Ip)) + j * randn(1,N + length(Ip))];
% Gain for Tap3
gain4 = sqrt(p4 / 2) * [randn(1,N + length(Ip)) + j * randn(1,N + length(Ip))];
% Gain for Tap4
x11 = x(:);
x12 = reshape(x11,1,length(x11));
i = 1:length(x12);
delay1 = 1;
delay2 = 2;
delay3 = 3;
x13 = circshift(x12,[1 delay1]);

% Producing one sample delay in Tap2


x14 = circshift(x12,[1 delay2]);

% Producing one sample delay in Tap3

x15 = circshift(x12,[1 delay3]);

% Producing one sample delay in Tap4

x1 = reshape(x13,(n + 3),length(x13) / (n + 3));


x2 = reshape(x14,(n + 3),length(x14) / (n + 3));
x3 = reshape(x15,(n + 3),length(x15) / (n + 3));
ch1 = repmat(gain1,(n + 3),1);
ch2 = repmat(gain2,(n + 3),1);
ch3 = repmat(gain3,(n + 3),1);
ch4 = repmat(gain4,(n + 3),1);
Data_channel = x .* ch1 + x1 .* ch2 + x2 .* ch3 + x3 .* ch4;
% Passing Data through channel
%%

Addition of AWGN noise

Data_noise1 = Data_channel(:);
Data_noise2 = reshape(Data_noise1,1,length(Data_noise1));
noise = 1 / sqrt(2) * [randn(1,length(Data_noise2))
+ j * randn(1,length(Data_noise2))];
snr = [0:20];

% Multiple Eb / N0 Values

for K = 1:21
y = Data_noise2 + (sqrt(1) * 10^( - snr(K) / 20)) * noise;
%%
Data_Received = y;
%%

%Addition of Noise

Receiver
% Fadded Data Received With Awgn Noise
Removing Cyclic Prefix

rx1 = reshape(Data_Received,(n + 3),length(Data_Received) / (n + 3));


rx12 = rx1';


rx13 = rx12(:,[(4:(n + 3))]);
rx14 = rx13';
%%

Taking FFT

FFT_Data_Received = fft(rx14);
%%

Extract Pilots

Pilot_Received = FFT_Data_Received(:,Ip);
FFT_Data_Received(:,Ip) = [];
%%

Channel Estimation % Multi-user Detection

RecData11 = (FFT_Data_Received' * Code1')';


RecData21 = (FFT_Data_Received' * Code2')';
RecData31 = (FFT_Data_Received' * Code3')';
RecData41 = (FFT_Data_Received' * Code4')';
[b1,H1] = GeneticA(RecData11);
RecData12 = b1;
[b2,H2] = GeneticA(RecData21);
RecData22 = b2;
[b3,H3] = GeneticA(RecData31);
RecData32 = b3;
[b4,H4] = GeneticA(RecData41);
RecData42 = b4;
%%

BER of User1

RecData12 = real(RecData11)>0;
errors_User1(K) = size(find(Data_User1 - RecData12),2)
SBer1 = (errors_User1).^2 / N;

% Errors for User1

% simulated ber User1


end
%%

Displaying Result

semilogy(snr,SBer1,'r','LineWidth',2);
hold on;
axis([0 20 10^-5 10^0]);
grid on
legend('Pilot-Based DFT method N=4','GA(Roulette Wheel) N=4');
clc;

You might also like