Generate Kasami sequence from set of Kasami sequences

Sequence Generators sublibrary of Comm Sources

The Kasami Sequence Generator block generates a sequence from the set of Kasami sequences. The Kasami sequences are a set of sequences that have good cross-correlation properties.

This block can output sequences that vary in length during simulation.
For more information about variable-size signals, see Variable-Size Signal Basics in
the Simulink^{®} documentation.

There are two sets of Kasami sequences: the *small
set* and the *large set*. The large set
contains all the sequences in the small set. Only the small set is
optimal in the sense of matching Welch's lower bound for correlation
functions.

Kasami sequences have period *N* = 2^{n} -
1, where *n* is a nonnegative, even integer. Let *u* be
a binary sequence of length *N*, and let *w* be
the sequence obtained by decimating u by 2^{n/2} +1.
The small set of Kasami sequences is defined by the following formulas,
in which *T* denotes the left shift operator, *m* is
the shift parameter for *w*, and $$\oplus $$ denotes addition modulo 2.

**Small Set of Kasami Sequences for n Even**

$${K}_{s}(u,n,m)=\{\begin{array}{ll}u\hfill & m=-1\hfill \\ u\oplus {T}^{m}w\hfill & m=0,\mathrm{...},{2}^{n/2}-2\hfill \end{array}$$

Note that the small set contains 2^{n/2} sequences.

For mod(*n*, 4) = 2, the large set of Kasami
sequences is defined as follows. Let *v* be the
sequence formed by decimating the sequence *u* by
2^{n/2 + 1}+ 1. The large set is defined by
the following table, in which *k* and *m* are
the shift parameters for the sequences *v* and *w*,
respectively.

**Large Set of Kasami Sequences for mod(n, 4) = 2**

$${K}_{L}(u,n,k,m)=\{\begin{array}{ll}u\hfill & k=-2;\text{}m=-1\hfill \\ v\hfill & k=-1;\text{}m=-1\hfill \\ u\oplus {T}^{k}v\hfill & k=0,\mathrm{...},{2}^{n}-2;\text{}m=-1\hfill \\ u\oplus {T}^{m}w\hfill & k=-2;\text{}m=0,\mathrm{...},{2}^{n/2}-2\hfill \\ v\oplus {T}^{m}w\hfill & k=-1;\text{}m=0,\mathrm{...},{2}^{n/2}-2\hfill \\ u\oplus {T}^{k}v\oplus {T}^{m}w\hfill & k=0,\mathrm{...},{2}^{n}-2;\text{}m=0,\mathrm{...},{2}^{n/2}-2\hfill \end{array}$$

The sequences described in the first three rows of the preceding figure correspond to the Gold sequences for mod(n, 4) = 2. See the reference page for the Gold Sequence Generator block for a description of Gold sequences. However, the Kasami sequences form a larger set than the Gold sequences.

The correlation functions for the sequences takes on the values

{-*t*(*n*), -*s*(*n*),
-1, *s*(*n*) -2 , *t*(*n*)
- 2}

where

$$\begin{array}{c}t(n)=1+{2}^{(n+2)/2}\text{,}n\text{even}\\ s(n)=\frac{1}{2}\left(t(n)+1\right)\end{array}$$

The **Generator polynomial** parameter specifies
the generator polynomial, which determines the connections in the
shift register that generates the sequence *u*.
You can specify the **Generator polynomial** parameter
using either of these formats:

A vector that lists the coefficients of the polynomial in descending order of powers. The first and last entries must be 1. Note that the length of this vector is one more than the degree of the generator polynomial.

A vector containing the exponents of

*z*for the nonzero terms of the polynomial in descending order of powers. The last entry must be`0`

.

For example, `[1 0 0 0 0 0 1 0 1]`

and ```
[8
2 0]
```

represent the same polynomial, p(z) = z^{8}+z^{2}+1.

The **Initial states** parameter specifies
the initial states of the shift register that generates the sequence
u. **Initial States** is a binary scalar or row vector
of length equal to the degree of the **Generator polynomial**.
If you choose a binary scalar, the block expands the scalar to a row
vector of length equal to the degree of the **Generator polynomial**,
all of whose entries equal the scalar.

The **Sequence index** parameter specifies
the shifts of the sequences *v* and *w *used
to generate the output sequence. You can specify the parameter in
either of two ways:

To generate sequences from the small set, for

*n*is even, you can specify the**Sequence index**as an integer*m*. The range of*m*is [-1, ..., 2^{n/2}- 2]. The following table describes the output sequences corresponding to**Sequence index**`m`

:Sequence Index Range of Indices Output Sequence `-1`

*m*= -1u `m`

*m*= 0, ... , 2^{n/2}- 2$$u\oplus {T}^{m}w$$

To generate sequences from the large set, for mod (

*n*, 4) = 2, where*n*is the degree of the**Generator polynomial**, you can specify**Sequence index**as an integer vector [*k**m*]. In this case, the output sequence is from the large set. The range for*k*is [-2, ..., 2^{n}- 2], and the range for*m*is [-1, ..., 2^{n/2}- 2]. The following table describes the output sequences corresponding to**Sequence index**[k m]:Sequence Index [k m] Range of Indices Output Sequence `[-2 -1]`

*k*= -2,*m*= -1u `[-1 -1]`

*k*= -1,*m*= -1v `[k -1]`

*k*= 0, 1, ... , 2^{n}- 2*m*= -1$$u\oplus {T}^{k}v$$

`[-2 m]`

*k*= -2*m*= 0, 1, ..., 2^{n/2}- 2$$u\oplus {T}^{m}w$$

`[-1 m]`

*k*= -1*m*= 0, ... , 2^{n/2}- 2$$v\oplus {T}^{m}w$$

`[k m]`

*k*= 0, ... , 2^{n}- 2*m*= 0, ... , 2^{n/2}- 2$$u\oplus {T}^{k}v\oplus {T}^{m}w$$

You can shift the starting point of the Kasami sequence with
the **Shift** parameter, which is an integer representing
the length of the shift.

You can use an external signal to reset the values of the internal
shift register to the initial state by selecting **Reset on
nonzero input**. This creates an input port for the external
signal in the Kasami Sequence Generator block. The way the block resets
the internal shift register depends on whether its output signal and
the reset signal are sample-based or frame-based. See Example: Resetting a Signal for an example.

The following table lists some of the polynomials that you can use to generate the Kasami set of sequences.

n | N | Polynomial | Set |
---|---|---|---|

4 | 15 | [4 1 0] | Small |

6 | 63 | [6 1 0] | Large |

8 | 255 | [8 4 3 2 0] | Small |

10 | 1023 | [10 3 0] | Large |

12 | 4095 | [12 6 4 1 0] | Small |

**Generator polynomial**Binary vector specifying the generator polynomial for the sequence

*u*.**Initial states**Binary scalar or row vector of length equal to the degree of the

**Generator polynomial**, which specifies the initial states of the shift register that generates the sequence*u*.**Sequence index**Integer or vector specifying the shifts of the sequences

*v*and*w*used to generate the output sequence.**Shift**Integer scalar that determines the offset of the Kasami sequence from the initial time.

**Output variable-size signals**Select this if you want the output sequences to vary in length during simulation. The default selection outputs fixed-length signals.

**Maximum output size source**Specify how the block defines maximum output size for a signal.

When you select

`Dialog parameter`

, the value you enter in the**Maximum output size**parameter specifies the maximum size of the output. When you make this selection, the`oSiz`

input port specifies the current size of the output signal and the block output inherits sample time from the input signal. The input value must be less than or equal to the**Maximum output size**parameter.When you select

`Inherit from reference port`

, the block output inherits sample time, maximum size, and current size from the variable-sized signal at the Ref input port.

This parameter only appears when you select

**Output variable-size signals**. The default selection is`Dialog parameter`

.**Maximum output size**Specify a two-element row vector denoting the maximum output size for the block. The second element of the vector must be 1. For example, [10 1] gives a 10-by-1 maximum sized output signal. This parameter only appears when you select

**Output variable-size signals**.**Sample time**Period of each element of the output signal.

**Frame-based outputs**Determines whether the output is frame-based or sample-based.

**Samples per frame**The number of samples in a frame-based output signal. This field is active only if you select

**Frame-based outputs**.**Reset on nonzero input**When selected, you can specify an input signal that resets the internal shift registers to the original values of the

**Initial states.****Output data type**The output type of the block can be specified as a

`boolean`

or`double`

. By default, the block sets this to`double`

.

This model considers Kasami spreading for a combined two-user transmission in a multipath environment.

Open the model here: kasami_sequence_block_examplekasami_sequence_block_example

```
modelname = 'kasami_sequence_block_example';
open_system(modelname);
sim(modelname);
```

You can see very good user separation over multiple paths with the gains of combining. This can be attributed to the "good" correlation properties of Kasami sequences, which provide a balance between the ideal cross-correlation properties of orthogonal codes and the ideal auto-correlation properties of PN sequences. See the relevant examples on the Hadamard Code Generator and PN Sequence Generator reference pages.

To experiment with this model further, try selecting other path delays to see how the performance varies for the same code. Also try different codes with the same delays.

close_system(modelname, 0);

[1] Peterson and Weldon, *Error Correcting
Codes*, 2nd Ed., MIT Press, Cambridge, MA, 1972.

[2] Proakis, John G., *Digital Communications*,
Third edition, New York, McGraw Hill, 1995.

[3] Sarwate, D. V. and Pursley, M.B., "Crosscorrelation
Properties of Pseudorandom and Related Sequences," *Proc.
IEEE*, Vol. 68, No. 5, May 1980, pp. 583-619.

Was this topic helpful?