sdr.kasami_code(length: int, index: int | tuple[int, int] = 0, poly: PolyLike | None = None, output: 'binary' = 'binary') ndarray[Any, dtype[int64]]
sdr.kasami_code(length: int, index: int | tuple[int, int] = 0, poly: PolyLike | None = None, output: 'field' = 'binary') FieldArray
sdr.kasami_code(length: int, index: int | tuple[int, int] = 0, poly: PolyLike | None = None, output: 'bipolar' = 'binary') ndarray[Any, dtype[float64]]

Generates the Kasami code/sequence of length \(n = 2^m - 1\).

Parameters:
length: int

The length \(n = 2^m - 1\) of the Kasami code/sequence. The degree \(m\) must be even.

index: int | tuple[int, int] = 0

The index of the Kasami code.

  • int: The index \(j\) in \([-1, 2^{m/2} - 1)\) from the Kasami code small set. There are \(2^{m/2}\) codes in the small set.

  • tuple[int, int]: The index \((i, j)\) from the Kasami code large set, with \(i \in [-2, 2^m - 1)\) and \(j \in [-1, 2^{m/2} - 1)\). There are \((2^m + 1) \cdot 2^{m/2}\) codes in the large set.

poly: PolyLike | None = None

The primitive polynomial of degree \(m\) over \(\mathrm{GF}(2)\). The default is None, which uses the default primitive polynomial of degree \(m\), i.e. galois.primitive_poly(2, m).

output: 'binary' = 'binary'
output: 'field' = 'binary'
output: 'bipolar' = 'binary'

The output format of the Kasami code/sequence.

  • "binary" (default): The Kasami code with binary values of 0 and 1.

  • "field": The Kasami code as a Galois field array over \(\mathrm{GF}(2)\).

  • "bipolar": The Kasami sequence with bipolar values of 1 and -1.

Returns:

The Kasami code/sequence of length \(n = 2^m - 1\).

References

Examples

Create a Kasami code and sequence of length 15.

In [1]: sdr.kasami_code(15, 1)
Out[1]: array([1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0])

In [2]: sdr.kasami_code(15, 1, output="bipolar")
Out[2]: 
array([-1., -1., -1.,  1.,  1., -1.,  1.,  1.,  1.,  1.,  1., -1., -1.,
        1.,  1.])

In [3]: sdr.kasami_code(15, 1, output="field")
Out[3]: GF([1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0], order=2)

Create several Kasami codes of length 63 from the small set.

In [4]: x1 = sdr.kasami_code(63, 0, output="bipolar"); \
   ...: x2 = sdr.kasami_code(63, 1, output="bipolar"); \
   ...: x3 = sdr.kasami_code(63, 2, output="bipolar");
   ...: 

In [5]: plt.figure(); \
   ...: sdr.plot.time_domain(x1 + 3); \
   ...: sdr.plot.time_domain(x2 + 0); \
   ...: sdr.plot.time_domain(x3 - 3)
   ...: 
../../_images/sdr_kasami_code_1.png

Examine the auto-correlation of the Kasami sequences.

In [6]: plt.figure(); \
   ...: sdr.plot.correlation(x1, x1, mode="circular"); \
   ...: sdr.plot.correlation(x2, x2, mode="circular"); \
   ...: sdr.plot.correlation(x3, x3, mode="circular"); \
   ...: plt.ylim(0, 63);
   ...: 
../../_images/sdr_kasami_code_2.png

Examine the cross-correlation of the Kasami sequences.

In [7]: plt.figure(); \
   ...: sdr.plot.correlation(x1, x2, mode="circular"); \
   ...: sdr.plot.correlation(x1, x3, mode="circular"); \
   ...: sdr.plot.correlation(x2, x3, mode="circular"); \
   ...: plt.ylim(0, 63);
   ...: 
../../_images/sdr_kasami_code_3.png