Professional Documents
Culture Documents
INTRODUCTION
With the advent of technology & its use in every sphere of life, demand of high speed
communication networks has increased. So to makeup with this demand there is an upsurge
in applying code division multiple access (CDMA) technique to optical networks in parts. As
the Optical CDMA (OCDMA) offers higher security, flexibility & simplicity of network
control.
In conventional CDMA each user is assigned a unique spreading code which is used
to spread the data & same is used by user to distinguish his data from the data of other users
which is spreaded by other code & these codes are orthogonal codes. In Optical CDMA
(OCDMA), On-Off Keying (OOK) modulation scheme is used, which is similar to binary
unipolar encoding {0, 1}. These spreading codes are termed Optical Orthogonal Codes
(OOC). As in case of wireless communication, the spreading has been carried in time domain
only these are known as One-Dimensional OOCs (1-D OOCs).
1-D OOCs has a drawback that it requires large chip rate. For example, consider a
network of 8 users out of which 5 are active at a time & each is transmitting data at 1Gbit/sec.
if we design such a system to meet the mentioned requirement with 1-D OOC we will end up
with a chip-rate of the order of 162Gigachips/sec (162 Gcps). But using a 2-D OOC by
spreading in both time & wavelength above system can be designed with the need of just
6Gigachips/sec (6 Gcps.)
In the next section we will discuss about the bounds on the size of 1-d codes & a bit
about code construction techniques related to bounds. Later we will introduce 2-D OODs &
the bounds on the size of 2-d codes. Also we will introduce new code construction technique
based on the use of rational functions. Later we show the Matlab simulation result of auto-
correlation & cross-correlation of 2-D OOC [1].
- 19 -
2. One-Dimensional Optical Orthogonal Codes
n −1
∑ x ( i ) y (i ⊕n τ )≤ k
i=0
τ ≠ 0. We have used ⊕n to denote addition modulon . & k as the maximum collision parameter
(MCP).
1. Johnson bound A:
1 n−1 n−k
Φ ( n , w ,k ) ≤ ⌊ ⌊ ………⌊ ⌋ ⌋ ⌋ :=J A ( n , w , k ) .
w w−1 w−k
w−k
Φ ( n , w ,k ) ≤ min ( 1 , ⌊ ⌋) :=J B ( n , w , k ) .
w2−nk
- 19 -
1 n−1 n−( l−1 )
Φ ( n , w ,k ) ≤ ⌊ ⌊ ………⌊ h ⌋ … ⌋ ⌋ :=J C ( n , w , k ) .
w w−1 w−( l−1 )
( n−l ) ( w−k )
Where h=min n−l , ⌊ ( ( w−l )2−( n−l )( k −l ) )
⌋ . & l is integer, 1 ≤l ≤ k−1 , such that
P
Asymptotically optimal when lim ¿n →∞ =1 ¿.
Φ (n , w , k )
We have large literature to generate 1-D OOCs & Optimum constructions are known only for
k =1 and k = 2. Most of them only uses of Johnson bound A. some may not be satisfying
Johnson bound A, but they are found optimal w.r.t. Johnson bound B[6].
Example: Consider a network of 8 users out of which 5 users are active at any
instance of time. Assuming the data transmission rate of 1Gbit/sec for each active user[1].
Designing with 1-D OOC: A natural attempt at meeting this requirement might be to
set the maximum-collision parameter (MCP) k equal to 1 and set w=5>(5−1)k where (5-
1)k, represents the maximum possible interference presented by the 4 other active users under
a uniform power assumption. When w=5 and k =1 , the Johnson bound A yields
1 n−1 n−k
Φ ( n , w ,k ) ≤ ⌊ ⌊ ………⌊ ⌋ ⌋ ⌋ :=J A ( n , w , k ) .
w w−1 w−k
1 n−1 n−1
Φ ( n , 5,1 ) ≤ ⌊ ⌊ ⌋⌋≤
w w−1 w(w−1)
- 19 -
n−1>8 x 5 x 4
Orn>161. So the required chip-rate must necessarily equal or exceed 162 G chips per
second (Gcps) which is currently infeasible to implement. Even if it were feasible to
implement, the chip-rate is still large in relation to the data rate supplied to each user.
Designing with 2-D OOC: By spreading in both wavelength and time, this chip-rate
requirement can be reduced substantially to 6 G chips/sec.
W T −1
∑ ∑ A ( λ , t ) B ( λ ,(t ⨁T τ ¿ ))≤ k ¿
λ=1 t=0
Where either A=B ort=0. We will refer to k as the maximum collision parameter
(MCP). Note that asynchronism is present only along the time axis.
It can be shown that it is possible to construct a 2-D (WxT =6 x 6 , w=5 , k=1) OOC
of size 8. Figure below shows such a 2-D OOC. Thus in comparison with the earlier 1-D
OOC of above Example which required a chip-rate in excess of 162 Gcps, with this 2-D code,
one can accommodate the same number of users with a chip rate of 6 G-chips per second
(Gcps).
- 19 -
A
(6 x 6,5,1) 2-D OOC. In this figure each row shows a different wavelength, and each column
is a different chip time.**the above shown codes are [AM-OPPW] .ref.[1]
Arrays with one-pulse per wavelength (OPPW): each row of every (WxT )code
array in C is required to have Hamming weight = 1.
Arrays with at most one-pulse per wavelength (AM-OPPW): here each row of any
(WxT ) code in C is required to have Hamming weight < 1.
Arrays with one-pulse per time slot (OPPTS): here each column of every (WxT )
code array in C is required to have Hamming weight = 1.
Arrays with at most one-pulse per time slot (AM-OPPTS): here each column of any
(WxT ) array in C is required to have Hamming weight < 1.
- 19 -
4.2 Optical correlator for 2-D OOC
**above code satisfies both the AM-OPPW and AM-OPPTS restrictions. ref. [1]
Filters placed further along the reflection path will suffer an increased delay and in
this manner, the placement of the filters can be adjusted to bring the pulses of all the different
wavelengths in the desired code matrix into time alignment at the output of the correlator.
- 19 -
4.3 Bounds on the Size of a 2-D OCDMA Code
For a given set of values of W , T , w , k , let Φ ( WxT , w , k ) denote the largest possible
cardinality of a ( W , T , w , k ) 2-D OOC code[1, 6]. We define optimal and asymptotically
optimum 2-D OOCs as was done in the case of 1-D OOCs in Section 2.1 of this report.
4. Johnson bound A:
W WT −1 WT −k
Φ ( WxT , w , k ) ≤ ⌊ ⌊ ……… ⌊ ⌋ ⌋ ⌋ :=J A ( WxT , w , k ) .
w w−1 w−k
W (w−k )
Φ ( WxT , w , k ) ≤ min (W , ⌊ ⌋ ):=J B (WxT , w , k ) .
w 2−WT k
W WT −1 WT − (l−1 )
Φ ( WxT , w , k ) ≤ ⌊ ⌊ ……… ⌊ h ⌋ … ⌋ ⌋ :=J C ( WxT , w , k ) .
w w−1 w−( l−1 )
( WT −l ) ( w−k )
(
Where h=min WT −l, ⌊
( w−l )2− (WT −l )( k −l ) )
⌋ . & l is integer, 1 ≤l ≤ k−1 ,
- 19 -
Theorem 1. When n=WT the bound J i, i∈ { A , B , C } on the size of a (WT , w , k ) 2-D OOC
satisfies the following inequality compared to the bound on the size of (WT , w , k ) 1-D OOC:
where J i( WT , w ,k ) denotes the upper bound for 1-D OOC stated in equations (1),(2),(3),
and Ji(WxT,w,k) denoted the upper bound for 2-D OOC stated in equations (4),(5),(6).
A 2-D OOC can be regarded as the graph of a function W =f ( t ) , 0< t<T −1 , 0<W <W =1 ,
mapping time into wavelength or vice-versa,t=f ( λ). We define an operator Sτ such that
Sτ (•, f (•)), is a τ unit cyclic shifted version of the graph,( • , f ( •) ), along the time axis, t.
This definition shows that the construction is a valid OOC with MCP equal to k
If the equation Sτ ( x , f ( x ) )=( x , f ( x )) has maximum k solutions for any f and g when either
f ≠ g orτ ≠ 0.
Here we use rational functions over GF ( q )to construct 2-D OOCs[2]. The no of rational
f (x )
functions over GF ( q )is given by c ( t ) , if is satisfying following conditions:
g ( x)
f (x )
≠ a ,for any a (integer) and
g ( x)
- 19 -
f is monic.
& c ( t ) is given as
2 t−1
c ( t ) = q 2−q , t=1,2,3,4,5,6
{ ≥ q −q2 t −6 /7 ,t ≥ 7
t+1
The above conditions guaranteed that each function is counted only once.
f (x )
*in this counting we have discarded the constant rational functions =constant . Two
g ( x)
elements [ ab] ,[ dc ] are equal provided there exist an element n such that[ ab]=n[ dc ].
Theorem 2. If f ( x )=x 2 +a1 x+ a0 with a 1 , a0 ∈GF (q) is a primitive polynomial overGF ( q ),
0 −a0
Then Γ = [ 1 −a1 ]
is a matrix having the property that the smallest exponent i for which
P1 ( GF ( q ) )= Γ i a i=0,1 , … , q ; a ∈ P1 ( GF ( q ) )
{ [ ]|
b []
b }
5.1.1 Construction
Let1<W < q, and W ϵ some subset of GF (q) of sizeW . Here we consider rational functions
f (λ)
t
g ( λ) mapping wavelength into time. Associate to each time slot t, the th element of a cyclic
representation of P1 (GF ( q)). Let us define:
- 19 -
Where, given a rational function, the operator N divides out the common factors
between numerator and denominator and in addition, scales the two so as to make the
numerator monic[1, 2, 4].
Considering f and g are relatively prime, anda 0 ≠ 0, it is obvious that the operator Nresults in
some rational function which satisfies the conditions of section 5.
We note that such a rational function doesn't exist since it means that for certain
from each equivalence class. For each polynomial f ( . ) the ( WxT ) code array C is given by
'
. This results in a ( Wx ( q+1 ) , W , 2 k ) 2-D OOC with
c (k )'
size, +1and k =2 k ' ≤ W ≤ q .
q+1
Let T ∨(q−1), and βϵGF (q)have multiplicative orderT . Take the wavelengths as
P 1(GF (q))(the order of elements doesn't matter). Here we consider rational functions
- 19 -
mapping time into wavelength. Let us associate to time slott, the element β t . We define two
Fk
rational functions in to be equivalent if
f ( x)
for some . First discard all rational functions g ( x )
Choosing one function from each of the remaining equivalence classes and
where and
[1, 2, 4].
6. Simulation
We verify the auto-correlation & cross-correlation properties of 2-D OOC codes by using
MATLAB .The two codes are chosen form the 8 codes shown earlier in this report.
Simulation is done two parts 1.corconv.m to find convolution. & 2.ocdma.m to generate
code, correlate & plot them.
1 0 0 0 0 0
code1=
0
1
1
1
1
[ 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
]
0 0 0 0 1 0
code5=
0
0
1
0
0
[ 0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
] - 19 -
ref. [1]
**Vertical columns are representing time slot & horizontal rows are representing
wavelengths
- 19 -
The 8 figures are correlation of code1 with code1 to code8 resp.
- 19 -
6.2 Matlab code
circonv.m
function[C] = circonv(A,B,N)
if nargin~=3,
error('CIRCONV uses exactly 3 input arguments');
end
if N<=0,
error('N must be great than zero.');
end
if size(A,2)>1,
A=A';
end
if size(B,2)>1,
B=B';
end
- 19 -
if N>length(A),
A=[A ; zeros(N-length(A),1)];
end
if N>length(B),
B=[B ; zeros(N-length(B),1)];
end
A = A(1:N);
B = B(1:N);
FoldAddTable = A*B';
FoldAddTable = fliplr(FoldAddTable);
C=zeros(1,N);
C(N) = sum( diag(FoldAddTable,0) );
for x=1:(N-1),
C(x)= sum( diag(FoldAddTable, N-x) ) + sum( diag(FoldAddTable, -x) );
end
ocdma.m
clear all
clc
size=15;
%% code1
code11=zeros(1,6);code11(1,1)=1;
code12=zeros(1,6);
code13=zeros(1,6);code13(1,1)=1;
code14=zeros(1,6);code14(1,1)=1;
code15=zeros(1,6);code15(1,1)=1;
code16=zeros(1,6);code16(1,1)=1;
code1=[code11;code12;code13;code14;code15;code16];
%% icode1
icode11=fliplr(code11);
icode12=fliplr(code12);
icode13=fliplr(code13);
icode14=fliplr(code14);
icode15=fliplr(code15);
icode16=fliplr(code16);
icode1=fliplr(code1);
%% code2
code21=zeros(1,6);code21(1,5)=1;
code22=zeros(1,6);code22(1,2)=1;
code23=zeros(1,6);code23(1,6)=1;
code24=zeros(1,6);code24(1,3)=1;
code25=zeros(1,6);
code26=zeros(1,6);code26(1,4)=1;
code2=[code21;code22;code23;code24;code25;code26];
- 19 -
%% icode2
icode21=fliplr(code21);
icode22=fliplr(code22);
icode23=fliplr(code23);
icode24=fliplr(code24);
icode25=fliplr(code25);
icode26=fliplr(code26);
icode2=fliplr(code2);
%% code3
code31=zeros(1,6);code31(1,6)=1;
code32=zeros(1,6);code32(1,4)=1;
code33=zeros(1,6);code33(1,3)=1;
code34=zeros(1,6);code34(1,2)=1;
code35=zeros(1,6);code35(1,1)=1;
code36=zeros(1,6);
code3=[code31;code32;code33;code34;code35;code36];
%% icode3
icode31=fliplr(code31);
icode32=fliplr(code32);
icode33=fliplr(code33);
icode34=fliplr(code34);
icode35=fliplr(code35);
icode36=fliplr(code36);
icode3=fliplr(code3);
%% code4
code41=zeros(1,6);
code42=zeros(1,6);code42(1,6)=1;
code43=zeros(1,6);code43(1,1)=1;
code44=zeros(1,6);code44(1,5)=1;
code45=zeros(1,6);code45(1,2)=1;
code46=zeros(1,6);code46(1,3)=1;
code4=[code41;code42;code43;code44;code45;code46];
%% icode4
icode41=fliplr(code41);
icode42=fliplr(code42);
icode43=fliplr(code43);
icode44=fliplr(code44);
icode45=fliplr(code45);
icode46=fliplr(code46);
icode4=fliplr(code4);
%% code5
code51=zeros(1,6);code51(1,5)=1;
code52=zeros(1,6);code52(1,6)=1;
code53=zeros(1,6);
- 19 -
code54=zeros(1,6);code54(1,1)=1;
code55=zeros(1,6);code55(1,3)=1;
code56=zeros(1,6);code56(1,6)=1;
code5=[code51;code52;code53;code54;code55;code56];
%% icode5
icode51=fliplr(code51);
icode52=fliplr(code52);
icode53=fliplr(code53);
icode54=fliplr(code54);
icode55=fliplr(code55);
icode56=fliplr(code56);
icode5=fliplr(code5);
%% code6
code61=zeros(1,6);code61(1,1)=1;
code62=zeros(1,6);
code63=zeros(1,6);ode63(1,5)=1;
code64=zeros(1,6);code64(1,6)=1;
code65=zeros(1,6);code65(1,4)=1;
code66=zeros(1,6);code66(1,2)=1;
code6=[code61;code62;code63;code64;code65;code66];
%% icode6
icode61=fliplr(code61);
icode62=fliplr(code62);
icode63=fliplr(code63);
icode64=fliplr(code64);
icode65=fliplr(code65);
icode66=fliplr(code66);
icode6=fliplr(code6);
%% code7
code71=zeros(1,6);code71(1,3)=1;
code72=zeros(1,6);
code73=zeros(1,6);code73(1,2)=1;
code74=zeros(1,6);code74(1,4)=1;
code75=zeros(1,6);code72(1,5)=1;
code76=zeros(1,6);code76(1,1)=1;
code7=[code71;code72;code73;code74;code75;code76];
%% icode7
icode71=fliplr(code71);
icode72=fliplr(code72);
icode73=fliplr(code73);
icode74=fliplr(code74);
icode75=fliplr(code75);
icode76=fliplr(code76);
icode7=fliplr(code7);
- 19 -
%% code7
code71=zeros(1,6);code71(1,3)=1;
code72=zeros(1,6);
code73=zeros(1,6);code73(1,2)=1;
code74=zeros(1,6);code74(1,4)=1;
code75=zeros(1,6);code72(1,5)=1;
code76=zeros(1,6);code76(1,1)=1;
code7=[code71;code72;code73;code74;code75;code76];
%% code8
code81=zeros(1,6);code81(1,2)=1;
code82=zeros(1,6);code82(1,1)=1;
code83=zeros(1,6);code83(1,4)=1;
code84=zeros(1,6);
code85=zeros(1,6);code84(1,6)=1;
code86=zeros(1,6);code86(1,5)=1;
code8=[code81;code82;code83;code84;code85;code86];
%% icode8
icode81=fliplr(code81);
icode82=fliplr(code82);
icode83=fliplr(code83);
icode84=fliplr(code84);
icode85=fliplr(code85);
icode86=fliplr(code86);
icode8=fliplr(code8);
%% autocorelation code1 & code1
ac_code11=circonv(code11,icode11,size);
ac_code12=circonv(code12,icode12,size);
ac_code13=circonv(code13,icode13,size);
ac_code14=circonv(code14,icode14,size);
ac_code15=circonv(code15,icode15,size);
ac_code16=circonv(code16,icode16,size);
ac_code1=sum([ac_code11;ac_code12;ac_code13;ac_code14;ac_code15;ac_code16]);
figure,plot(ac_code1);
axis([0,12,0,6]);
title('autocorelation of code1 with code1');
xlabel('time');ylabel('corelated output');
%% crosscorelation code1 & code2
ac_code21=circonv(code11,icode21,size);
ac_code22=circonv(code12,icode22,size);
ac_code23=circonv(code13,icode23,size);
ac_code24=circonv(code14,icode24,size);
ac_code25=circonv(code15,icode25,size);
ac_code26=circonv(code16,icode26,size);
ac_code2=sum([ac_code21;ac_code22;ac_code23;ac_code24;ac_code25;ac_code26]);
- 19 -
figure,plot(ac_code2);
axis([0,12,0,6]);
title('autocorelation of code1 with inverted code2');
xlabel('time');ylabel('corelated output');
%% crosscorelation code1 & code3
ac_code31=circonv(code11,icode31,size);
ac_code32=circonv(code12,icode32,size);
ac_code33=circonv(code13,icode33,size);
ac_code34=circonv(code14,icode34,size);
ac_code35=circonv(code15,icode35,size);
ac_code36=circonv(code16,icode36,size);
ac_code3=sum([ac_code31;ac_code32;ac_code33;ac_code34;ac_code35;ac_code36]);
figure,plot(ac_code3);
axis([0,12,0,6]);
title('autocorelation of code1 with inverted code3');
xlabel('time');ylabel('corelated output');
%% crosscorelation code1 & code4
ac_code41=circonv(code11,icode41,size);
ac_code42=circonv(code12,icode42,size);
ac_code43=circonv(code13,icode43,size);
ac_code44=circonv(code14,icode44,size);
ac_code45=circonv(code15,icode45,size);
ac_code46=circonv(code16,icode46,size);
ac_code4=sum([ac_code41;ac_code42;ac_code43;ac_code44;ac_code45;ac_code46]);
figure,plot(ac_code4);
axis([0,12,0,6]);
title('autocorelation of code1 with inverted code4');
xlabel('time');ylabel('corelated output');
%% crosscorelation code1 & code5
ac_code51=circonv(code11,icode51,size);
ac_code52=circonv(code12,icode52,size);
ac_code53=circonv(code13,icode53,size);
ac_code54=circonv(code14,icode54,size);
ac_code55=circonv(code15,icode55,size);
ac_code56=circonv(code16,icode56,size);
ac_code5=sum([ac_code51;ac_code52;ac_code53;ac_code54;ac_code55;ac_code56]);
figure,plot(ac_code5);
axis([0,12,0,6]);
title('autocorelation of code1 with inverted code5');
xlabel('time');ylabel('corelated output');
%% crosscorelation code1 & code6
ac_code61=circonv(code11,icode61,size);
ac_code62=circonv(code12,icode62,size);
ac_code63=circonv(code13,icode63,size);
- 19 -
ac_code64=circonv(code14,icode64,size);
ac_code65=circonv(code15,icode65,size);
ac_code66=circonv(code16,icode66,size);
ac_code6=sum([ac_code61;ac_code62;ac_code63;ac_code64;ac_code65;ac_code66]);
figure,plot(ac_code6);
axis([0,12,0,6]);
title('autocorelation of code1 with inverted code6');
xlabel('time');ylabel('corelated output');
%% crosscorelation code1 & code7
ac_code71=circonv(code11,icode71,size);
ac_code72=circonv(code12,icode72,size);
ac_code73=circonv(code13,icode73,size);
ac_code74=circonv(code14,icode74,size);
ac_code75=circonv(code15,icode75,size);
ac_code76=circonv(code16,icode76,size);
ac_code7=sum([ac_code71;ac_code72;ac_code73;ac_code74;ac_code75;ac_code76]);
figure,plot(ac_code7);
axis([0,12,0,6]);
title('autocorelation of code1 with inverted code7');
xlabel('time');ylabel('corelated output');
%% crosscorelation code1 & code8
ac_code81=circonv(code11,icode81,size);
ac_code82=circonv(code12,icode82,size);
ac_code83=circonv(code13,icode83,size);
ac_code84=circonv(code14,icode84,size);
ac_code85=circonv(code15,icode85,size);
ac_code86=circonv(code16,icode86,size);
ac_code8=sum([ac_code81;ac_code82;ac_code83;ac_code84;ac_code85;ac_code86]);
figure,plot(ac_code8);
axis([0,12,0,6]);
title('autocorelation of code1 with inverted code8');
xlabel('time');ylabel('corelated output');
% crosscorelation of code1 with code2 - code8 is completed
7. Conclusion
We have studied about bounds on the size of codes in 1-D & 2-D OOC & compare
them with suitable example. In 1-D the required chip size is very large but the same
requirement can be fulfilled at very low chip rate by using 2-D OOC, Not only the chip rate is
reduced but the size of code family also increases.
- 19 -
Various algorithms have been proposed for the generation of 2-D OOC, But are
incapable of determining all the possible codes that are given by Johnson’s bounds.
We are required to find a generalized scheme which can determine all the possible
combinations of 2-D orthogonal codes for a given values of( n , w , k ).
- 19 -