Andromeda blog

Top of blog

Signal spaces and bases - 26 Dec 2019

Review:

• The signals we are using are binary, having the values 0 volts (V) and 5 V only. They are divided into n bits (e.g. 2, 4, 8, etc...) which repeat over and over. Each bit is either a 0 (0 V) or a 1 (5 V). The width (duration) of each bit is usually given in milliseconds (ms), for the equipment we are using. In practice, bit widths could be much shorter than nanoseconds (optically, picoseconds).

• Although there are 2^n different n-bit numbers, there are considerably fewer distinguishable signals, due to shift duplication. For example, the actual different 4-bit signal groups are:
ngroups = 6

Signal      Numbers
-------     --------------
0:  0 0 0 0      0
1:  0 0 0 1      1   2   4   8
2:  0 0 1 1      3   6   9  12
3:  0 1 0 1      5  10
4:  0 1 1 1      7  11  13  14
5:  1 1 1 1     15

The different 6-bit signal groups are:

ngroups = 14

Signal          Numbers
-----------     ----------------------
0:  0 0 0 0 0 0      0
1:  0 0 0 0 0 1      1   2   4   8  16  32
2:  0 0 0 0 1 1      3   6  12  24  33  48
3:  0 0 0 1 0 1      5  10  17  20  34  40
4:  0 0 0 1 1 1      7  14  28  35  49  56
5:  0 0 1 0 0 1      9  18  36
6:  0 0 1 0 1 1     11  22  25  37  44  50
7:  0 0 1 1 0 1     13  19  26  38  41  52
8:  0 0 1 1 1 1     15  30  39  51  57  60
9:  0 1 0 1 0 1     21  42
10:  0 1 0 1 1 1     23  29  43  46  53  58
11:  0 1 1 0 1 1     27  45  54
12:  0 1 1 1 1 1     31  47  55  59  61  62
13:  1 1 1 1 1 1     63
Click for 8 to 12-bit signal groups

There are a couple of ways to combine multiple signals. The first we will be using is the following. Two or more signals are combined by:

• Each signal is multiplied by a magnitude: -1, 0, or 1. The magnitude -1 inverts each bit: 0 --> 1 and 1 --> 0.

• All signals but the first are shifted in phase (delayed) by some number of bits (including 0).

• Corresponding bits from each multiplied and shifted signal are combined by modulo 2 addition: e.g. 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1 = 0.

Examples:

4 bits:  {0 0 1 0} and {1 0 0 1} combined with magnitudes 1 and -1 and a phase of 2 =
1 * {0 0 1 0} + -1 * shift({1 0 0 1}, 2) =
{0 0 1 0} + -1 * {0 1 1 0} =
{0 0 1 0} + {1 0 0 1} =
{1 0 1 1}

6 bits:  {0 0 1 0 1 1} and {1 0 1 0 0 1} combined with magnitudes 1 and 1 and a phase of 3 =
1 * {0 0 1 0 1 1} + 1 * shift({1 0 1 0 0 1}, 3) =
{0 0 1 0 1 1} + {0 0 1 1 0 1} =
{0 0 0 1 1 0}

If all combinations of magnitude and phase are used to combine two or more signals, the resulting collection of signals is the spanned or spanning space of the inputs. For example, with reference to the 4-bit signal groups shown above, combining signals from groups 2 and 3 generates:

450: ~/projects/andromeda > signal_space 4 2 3

6 signal groups

string[0] = 0 0 1 1
string[1] = 0 1 0 1

M  P    M  P    S           G
-- --   -- --    --------    --
-1  0   -1  0  -  0 1 1 0  -  2
-1  0   -1  1  -  1 0 0 1  -  2
-1  0   -1  2  -  0 1 1 0  -  2
-1  0   -1  3  -  1 0 0 1  -  2
-1  0    0  0  -  1 1 0 0  -  2
-1  0    0  1  -  1 1 0 0  -  2
-1  0    0  2  -  1 1 0 0  -  2
-1  0    0  3  -  1 1 0 0  -  2
-1  0    1  0  -  1 0 0 1  -  2
-1  0    1  1  -  0 1 1 0  -  2
-1  0    1  2  -  1 0 0 1  -  2
-1  0    1  3  -  0 1 1 0  -  2
0  0   -1  0  -  1 0 1 0  -  3
0  0   -1  1  -  0 1 0 1  -  3
0  0   -1  2  -  1 0 1 0  -  3
0  0   -1  3  -  0 1 0 1  -  3
0  0    0  0  -  0 0 0 0  -  0
0  0    0  1  -  0 0 0 0  -  0
0  0    0  2  -  0 0 0 0  -  0
0  0    0  3  -  0 0 0 0  -  0
0  0    1  0  -  0 1 0 1  -  3
0  0    1  1  -  1 0 1 0  -  3
0  0    1  2  -  0 1 0 1  -  3
0  0    1  3  -  1 0 1 0  -  3
1  0   -1  0  -  1 0 0 1  -  2
1  0   -1  1  -  0 1 1 0  -  2
1  0   -1  2  -  1 0 0 1  -  2
1  0   -1  3  -  0 1 1 0  -  2
1  0    0  0  -  0 0 1 1  -  2
1  0    0  1  -  0 0 1 1  -  2
1  0    0  2  -  0 0 1 1  -  2
1  0    0  3  -  0 0 1 1  -  2
1  0    1  0  -  0 1 1 0  -  2
1  0    1  1  -  1 0 0 1  -  2
1  0    1  2  -  0 1 1 0  -  2
1  0    1  3  -  1 0 0 1  -  2

group counts: 4 0 24 8 0 0
3 of 6 groups spanned

In this case, combinations of these two signals generate only one additional signal: all zeros, which is a combination of any collection of signals when all their magnitudes are zero. Otherwise, they only generate shifted versions of themselves (this is important in combining the outputs of phase filters in hermitian operators).

However, using signals from two other groups generates:

451: ~/projects/andromeda > signal_space 4 1 4

6 signal groups

string[0] = 0 0 0 1
string[1] = 0 1 1 1

M  P    M  P    S           G
-- --   -- --    --------    --
-1  0   -1  0  -  0 1 1 0  -  2
-1  0   -1  1  -  1 0 1 0  -  3
-1  0   -1  2  -  1 1 0 0  -  2
-1  0   -1  3  -  1 1 1 1  -  5
-1  0    0  0  -  1 1 1 0  -  4
-1  0    0  1  -  1 1 1 0  -  4
-1  0    0  2  -  1 1 1 0  -  4
-1  0    0  3  -  1 1 1 0  -  4
-1  0    1  0  -  1 0 0 1  -  2
-1  0    1  1  -  0 1 0 1  -  3
-1  0    1  2  -  0 0 1 1  -  2
-1  0    1  3  -  0 0 0 0  -  0
0  0   -1  0  -  1 0 0 0  -  1
0  0   -1  1  -  0 1 0 0  -  1
0  0   -1  2  -  0 0 1 0  -  1
0  0   -1  3  -  0 0 0 1  -  1
0  0    0  0  -  0 0 0 0  -  0
0  0    0  1  -  0 0 0 0  -  0
0  0    0  2  -  0 0 0 0  -  0
0  0    0  3  -  0 0 0 0  -  0
0  0    1  0  -  0 1 1 1  -  4
0  0    1  1  -  1 0 1 1  -  4
0  0    1  2  -  1 1 0 1  -  4
0  0    1  3  -  1 1 1 0  -  4
1  0   -1  0  -  1 0 0 1  -  2
1  0   -1  1  -  0 1 0 1  -  3
1  0   -1  2  -  0 0 1 1  -  2
1  0   -1  3  -  0 0 0 0  -  0
1  0    0  0  -  0 0 0 1  -  1
1  0    0  1  -  0 0 0 1  -  1
1  0    0  2  -  0 0 0 1  -  1
1  0    0  3  -  0 0 0 1  -  1
1  0    1  0  -  0 1 1 0  -  2
1  0    1  1  -  1 0 1 0  -  3
1  0    1  2  -  1 1 0 0  -  2
1  0    1  3  -  1 1 1 1  -  5

group counts: 6 8 8 4 8 2
*** all 6 groups spanned ***

In this case, all signal groups are generated from combinations of just two input signals (6 groups from 2). We might be tempted to say that this system is 2-dimensional, since it requires two different input types to generate. Indeed, all six output types can be generated from just a single input type, using two independent copies:

452: ~/projects/andromeda > signal_space 4 1 1

6 signal groups

string[0] = 0 0 0 1
string[1] = 0 0 0 1

M  P    M  P    S           G
-- --   -- --    --------    --
-1  0   -1  0  -  0 0 0 0  -  0
-1  0   -1  1  -  1 0 0 1  -  2
-1  0   -1  2  -  0 1 0 1  -  3
-1  0   -1  3  -  0 0 1 1  -  2
-1  0    0  0  -  1 1 1 0  -  4
-1  0    0  1  -  1 1 1 0  -  4
-1  0    0  2  -  1 1 1 0  -  4
-1  0    0  3  -  1 1 1 0  -  4
-1  0    1  0  -  1 1 1 1  -  5
-1  0    1  1  -  0 1 1 0  -  2
-1  0    1  2  -  1 0 1 0  -  3
-1  0    1  3  -  1 1 0 0  -  2
0  0   -1  0  -  1 1 1 0  -  4
0  0   -1  1  -  0 1 1 1  -  4
0  0   -1  2  -  1 0 1 1  -  4
0  0   -1  3  -  1 1 0 1  -  4
0  0    0  0  -  0 0 0 0  -  0
0  0    0  1  -  0 0 0 0  -  0
0  0    0  2  -  0 0 0 0  -  0
0  0    0  3  -  0 0 0 0  -  0
0  0    1  0  -  0 0 0 1  -  1
0  0    1  1  -  1 0 0 0  -  1
0  0    1  2  -  0 1 0 0  -  1
0  0    1  3  -  0 0 1 0  -  1
1  0   -1  0  -  1 1 1 1  -  5
1  0   -1  1  -  0 1 1 0  -  2
1  0   -1  2  -  1 0 1 0  -  3
1  0   -1  3  -  1 1 0 0  -  2
1  0    0  0  -  0 0 0 1  -  1
1  0    0  1  -  0 0 0 1  -  1
1  0    0  2  -  0 0 0 1  -  1
1  0    0  3  -  0 0 0 1  -  1
1  0    1  0  -  0 0 0 0  -  0
1  0    1  1  -  1 0 0 1  -  2
1  0    1  2  -  0 1 0 1  -  3
1  0    1  3  -  0 0 1 1  -  2

group counts: 6 8 8 4 8 2
*** all 6 groups spanned ***

A collection of signals that span the entire n-bit space is called a basis for the space. There might be several m-signal bases for an n-bit space, or there may be none. For example, with 4 bits there are 3 bases consisting of 2 signals:

14: ~/projects/andromeda > signal_bases 4 2

spanning groups:
1  1  '0 0 0 1'  '0 0 0 1'
1  4  '0 0 0 1'  '0 1 1 1'
4  4  '0 1 1 1'  '0 1 1 1'
3 bases

Two of these bases consist of the same signal used twice, while the third consists of two different signals. With six bits, however, there are no two-signal bases, but there are many three-signal bases:

15: ~/projects/andromeda > signal_bases 6 2

spanning groups:
0 bases

16: ~/projects/andromeda > signal_bases 6 3

spanning groups:
1  1  1  '0 0 0 0 0 1'  '0 0 0 0 0 1'  '0 0 0 0 0 1'
1  1  3  '0 0 0 0 0 1'  '0 0 0 0 0 1'  '0 0 0 1 0 1'
1  1  4  '0 0 0 0 0 1'  '0 0 0 0 0 1'  '0 0 0 1 1 1'
1  1  6  '0 0 0 0 0 1'  '0 0 0 0 0 1'  '0 0 1 0 1 1'
1  1  7  '0 0 0 0 0 1'  '0 0 0 0 0 1'  '0 0 1 1 0 1'
1  1  9  '0 0 0 0 0 1'  '0 0 0 0 0 1'  '0 1 0 1 0 1'
1  1 10  '0 0 0 0 0 1'  '0 0 0 0 0 1'  '0 1 0 1 1 1'
1  1 12  '0 0 0 0 0 1'  '0 0 0 0 0 1'  '0 1 1 1 1 1'
1  2  2  '0 0 0 0 0 1'  '0 0 0 0 1 1'  '0 0 0 0 1 1'
1  2  6  '0 0 0 0 0 1'  '0 0 0 0 1 1'  '0 0 1 0 1 1'
1  2  7  '0 0 0 0 0 1'  '0 0 0 0 1 1'  '0 0 1 1 0 1'
1  2  8  '0 0 0 0 0 1'  '0 0 0 0 1 1'  '0 0 1 1 1 1'
1  3  3  '0 0 0 0 0 1'  '0 0 0 1 0 1'  '0 0 0 1 0 1'
1  3  4  '0 0 0 0 0 1'  '0 0 0 1 0 1'  '0 0 0 1 1 1'
1  3  6  '0 0 0 0 0 1'  '0 0 0 1 0 1'  '0 0 1 0 1 1'
1  3  7  '0 0 0 0 0 1'  '0 0 0 1 0 1'  '0 0 1 1 0 1'
1  3  9  '0 0 0 0 0 1'  '0 0 0 1 0 1'  '0 1 0 1 0 1'
1  3 10  '0 0 0 0 0 1'  '0 0 0 1 0 1'  '0 1 0 1 1 1'
1  3 12  '0 0 0 0 0 1'  '0 0 0 1 0 1'  '0 1 1 1 1 1'
1  4 10  '0 0 0 0 0 1'  '0 0 0 1 1 1'  '0 1 0 1 1 1'
1  4 12  '0 0 0 0 0 1'  '0 0 0 1 1 1'  '0 1 1 1 1 1'
1  6  6  '0 0 0 0 0 1'  '0 0 1 0 1 1'  '0 0 1 0 1 1'
1  6  7  '0 0 0 0 0 1'  '0 0 1 0 1 1'  '0 0 1 1 0 1'
1  6  8  '0 0 0 0 0 1'  '0 0 1 0 1 1'  '0 0 1 1 1 1'
1  6 10  '0 0 0 0 0 1'  '0 0 1 0 1 1'  '0 1 0 1 1 1'
1  6 12  '0 0 0 0 0 1'  '0 0 1 0 1 1'  '0 1 1 1 1 1'
1  7  7  '0 0 0 0 0 1'  '0 0 1 1 0 1'  '0 0 1 1 0 1'
1  7  8  '0 0 0 0 0 1'  '0 0 1 1 0 1'  '0 0 1 1 1 1'
1  7 10  '0 0 0 0 0 1'  '0 0 1 1 0 1'  '0 1 0 1 1 1'
1  7 12  '0 0 0 0 0 1'  '0 0 1 1 0 1'  '0 1 1 1 1 1'
1  8  8  '0 0 0 0 0 1'  '0 0 1 1 1 1'  '0 0 1 1 1 1'
1  9 10  '0 0 0 0 0 1'  '0 1 0 1 0 1'  '0 1 0 1 1 1'
1  9 12  '0 0 0 0 0 1'  '0 1 0 1 0 1'  '0 1 1 1 1 1'
1 10 10  '0 0 0 0 0 1'  '0 1 0 1 1 1'  '0 1 0 1 1 1'
1 10 12  '0 0 0 0 0 1'  '0 1 0 1 1 1'  '0 1 1 1 1 1'
1 12 12  '0 0 0 0 0 1'  '0 1 1 1 1 1'  '0 1 1 1 1 1'
2  2  4  '0 0 0 0 1 1'  '0 0 0 0 1 1'  '0 0 0 1 1 1'
2  2  6  '0 0 0 0 1 1'  '0 0 0 0 1 1'  '0 0 1 0 1 1'
2  2  7  '0 0 0 0 1 1'  '0 0 0 0 1 1'  '0 0 1 1 0 1'
2  2  9  '0 0 0 0 1 1'  '0 0 0 0 1 1'  '0 1 0 1 0 1'
2  2 12  '0 0 0 0 1 1'  '0 0 0 0 1 1'  '0 1 1 1 1 1'
2  4  6  '0 0 0 0 1 1'  '0 0 0 1 1 1'  '0 0 1 0 1 1'
2  4  7  '0 0 0 0 1 1'  '0 0 0 1 1 1'  '0 0 1 1 0 1'
2  4  8  '0 0 0 0 1 1'  '0 0 0 1 1 1'  '0 0 1 1 1 1'
2  6  6  '0 0 0 0 1 1'  '0 0 1 0 1 1'  '0 0 1 0 1 1'
2  6  7  '0 0 0 0 1 1'  '0 0 1 0 1 1'  '0 0 1 1 0 1'
2  6  8  '0 0 0 0 1 1'  '0 0 1 0 1 1'  '0 0 1 1 1 1'
2  6  9  '0 0 0 0 1 1'  '0 0 1 0 1 1'  '0 1 0 1 0 1'
2  6 12  '0 0 0 0 1 1'  '0 0 1 0 1 1'  '0 1 1 1 1 1'
2  7  7  '0 0 0 0 1 1'  '0 0 1 1 0 1'  '0 0 1 1 0 1'
2  7  8  '0 0 0 0 1 1'  '0 0 1 1 0 1'  '0 0 1 1 1 1'
2  7  9  '0 0 0 0 1 1'  '0 0 1 1 0 1'  '0 1 0 1 0 1'
2  7 12  '0 0 0 0 1 1'  '0 0 1 1 0 1'  '0 1 1 1 1 1'
2  8  9  '0 0 0 0 1 1'  '0 0 1 1 1 1'  '0 1 0 1 0 1'
2  8 12  '0 0 0 0 1 1'  '0 0 1 1 1 1'  '0 1 1 1 1 1'
3  3  4  '0 0 0 1 0 1'  '0 0 0 1 0 1'  '0 0 0 1 1 1'
3  3  6  '0 0 0 1 0 1'  '0 0 0 1 0 1'  '0 0 1 0 1 1'
3  3  7  '0 0 0 1 0 1'  '0 0 0 1 0 1'  '0 0 1 1 0 1'
3  3  9  '0 0 0 1 0 1'  '0 0 0 1 0 1'  '0 1 0 1 0 1'
3  3 12  '0 0 0 1 0 1'  '0 0 0 1 0 1'  '0 1 1 1 1 1'
3  4 10  '0 0 0 1 0 1'  '0 0 0 1 1 1'  '0 1 0 1 1 1'
3  4 12  '0 0 0 1 0 1'  '0 0 0 1 1 1'  '0 1 1 1 1 1'
3  6 10  '0 0 0 1 0 1'  '0 0 1 0 1 1'  '0 1 0 1 1 1'
3  6 12  '0 0 0 1 0 1'  '0 0 1 0 1 1'  '0 1 1 1 1 1'
3  7 10  '0 0 0 1 0 1'  '0 0 1 1 0 1'  '0 1 0 1 1 1'
3  7 12  '0 0 0 1 0 1'  '0 0 1 1 0 1'  '0 1 1 1 1 1'
3  9 10  '0 0 0 1 0 1'  '0 1 0 1 0 1'  '0 1 0 1 1 1'
3  9 12  '0 0 0 1 0 1'  '0 1 0 1 0 1'  '0 1 1 1 1 1'
3 10 12  '0 0 0 1 0 1'  '0 1 0 1 1 1'  '0 1 1 1 1 1'
3 12 12  '0 0 0 1 0 1'  '0 1 1 1 1 1'  '0 1 1 1 1 1'
4  6  6  '0 0 0 1 1 1'  '0 0 1 0 1 1'  '0 0 1 0 1 1'
4  6  7  '0 0 0 1 1 1'  '0 0 1 0 1 1'  '0 0 1 1 0 1'
4  6  8  '0 0 0 1 1 1'  '0 0 1 0 1 1'  '0 0 1 1 1 1'
4  7  7  '0 0 0 1 1 1'  '0 0 1 1 0 1'  '0 0 1 1 0 1'
4  7  8  '0 0 0 1 1 1'  '0 0 1 1 0 1'  '0 0 1 1 1 1'
4  8  8  '0 0 0 1 1 1'  '0 0 1 1 1 1'  '0 0 1 1 1 1'
4 10 10  '0 0 0 1 1 1'  '0 1 0 1 1 1'  '0 1 0 1 1 1'
4 10 12  '0 0 0 1 1 1'  '0 1 0 1 1 1'  '0 1 1 1 1 1'
4 12 12  '0 0 0 1 1 1'  '0 1 1 1 1 1'  '0 1 1 1 1 1'
6  6  6  '0 0 1 0 1 1'  '0 0 1 0 1 1'  '0 0 1 0 1 1'
6  6  7  '0 0 1 0 1 1'  '0 0 1 0 1 1'  '0 0 1 1 0 1'
6  6  8  '0 0 1 0 1 1'  '0 0 1 0 1 1'  '0 0 1 1 1 1'
6  6  9  '0 0 1 0 1 1'  '0 0 1 0 1 1'  '0 1 0 1 0 1'
6  6 12  '0 0 1 0 1 1'  '0 0 1 0 1 1'  '0 1 1 1 1 1'
6  7  7  '0 0 1 0 1 1'  '0 0 1 1 0 1'  '0 0 1 1 0 1'
6  7  8  '0 0 1 0 1 1'  '0 0 1 1 0 1'  '0 0 1 1 1 1'
6  7  9  '0 0 1 0 1 1'  '0 0 1 1 0 1'  '0 1 0 1 0 1'
6  7 12  '0 0 1 0 1 1'  '0 0 1 1 0 1'  '0 1 1 1 1 1'
6  8  8  '0 0 1 0 1 1'  '0 0 1 1 1 1'  '0 0 1 1 1 1'
6  8  9  '0 0 1 0 1 1'  '0 0 1 1 1 1'  '0 1 0 1 0 1'
6  8 12  '0 0 1 0 1 1'  '0 0 1 1 1 1'  '0 1 1 1 1 1'
6 10 10  '0 0 1 0 1 1'  '0 1 0 1 1 1'  '0 1 0 1 1 1'
6 10 12  '0 0 1 0 1 1'  '0 1 0 1 1 1'  '0 1 1 1 1 1'
6 12 12  '0 0 1 0 1 1'  '0 1 1 1 1 1'  '0 1 1 1 1 1'
7  7  7  '0 0 1 1 0 1'  '0 0 1 1 0 1'  '0 0 1 1 0 1'
7  7  8  '0 0 1 1 0 1'  '0 0 1 1 0 1'  '0 0 1 1 1 1'
7  7  9  '0 0 1 1 0 1'  '0 0 1 1 0 1'  '0 1 0 1 0 1'
7  7 12  '0 0 1 1 0 1'  '0 0 1 1 0 1'  '0 1 1 1 1 1'
7  8  8  '0 0 1 1 0 1'  '0 0 1 1 1 1'  '0 0 1 1 1 1'
7  8  9  '0 0 1 1 0 1'  '0 0 1 1 1 1'  '0 1 0 1 0 1'
7  8 12  '0 0 1 1 0 1'  '0 0 1 1 1 1'  '0 1 1 1 1 1'
7 10 10  '0 0 1 1 0 1'  '0 1 0 1 1 1'  '0 1 0 1 1 1'
7 10 12  '0 0 1 1 0 1'  '0 1 0 1 1 1'  '0 1 1 1 1 1'
7 12 12  '0 0 1 1 0 1'  '0 1 1 1 1 1'  '0 1 1 1 1 1'
8  8  9  '0 0 1 1 1 1'  '0 0 1 1 1 1'  '0 1 0 1 0 1'
8  8 12  '0 0 1 1 1 1'  '0 0 1 1 1 1'  '0 1 1 1 1 1'
9 10 10  '0 1 0 1 0 1'  '0 1 0 1 1 1'  '0 1 0 1 1 1'
9 10 12  '0 1 0 1 0 1'  '0 1 0 1 1 1'  '0 1 1 1 1 1'
9 12 12  '0 1 0 1 0 1'  '0 1 1 1 1 1'  '0 1 1 1 1 1'
10 10 12  '0 1 0 1 1 1'  '0 1 0 1 1 1'  '0 1 1 1 1 1'
10 12 12  '0 1 0 1 1 1'  '0 1 1 1 1 1'  '0 1 1 1 1 1'
12 12 12  '0 1 1 1 1 1'  '0 1 1 1 1 1'  '0 1 1 1 1 1'
112 bases

17: ~/projects/andromeda > signal_bases 8 2

spanning groups:
0 bases

There are also no two-signal 8-bit bases, but there are 896 three-signal bases. There are no three-signal 10-bit bases. So, both the number of bases, and the number of different signals required for each basis, go up and up. Practical signals may have 1000 bits or more (for a 1 second period at 1 ms/bit), and so might have an enormous number of bases. It is not known how many different signals are required for bases of such spaces.

Based on these findings, we might say that 1-bit signals form a 1-dimensional space, 2 to 5-bit signals form a 2-dimensional space, and 6, 7, and 8-bit signals form a 3-dimensional space, etc..:

8: ~/projects/andromeda > signal_bases 1 1

spanning groups:
0  '0'
1  '1'
2 bases

9: ~/projects/andromeda > signal_bases 2 1

spanning groups:
0 bases

10: ~/projects/andromeda > signal_bases 2 2

spanning groups:
0  1  '0 0'  '0 1'
1  1  '0 1'  '0 1'
1  2  '0 1'  '1 1'
3 bases

11: ~/projects/andromeda > signal_bases 3 2

spanning groups:
0  1  '0 0 0'  '0 0 1'
0  2  '0 0 0'  '0 1 1'
1  1  '0 0 1'  '0 0 1'
1  2  '0 0 1'  '0 1 1'
1  3  '0 0 1'  '1 1 1'
2  2  '0 1 1'  '0 1 1'
2  3  '0 1 1'  '1 1 1'
7 bases

12: ~/projects/andromeda > signal_bases 4 2

spanning groups:
1  1  '0 0 0 1'  '0 0 0 1'
1  4  '0 0 0 1'  '0 1 1 1'
4  4  '0 1 1 1'  '0 1 1 1'
3 bases

13: ~/projects/andromeda > signal_bases 5 2

spanning groups:
1  1  '0 0 0 0 1'  '0 0 0 0 1'
1  6  '0 0 0 0 1'  '0 1 1 1 1'
2  2  '0 0 0 1 1'  '0 0 0 1 1'
2  4  '0 0 0 1 1'  '0 0 1 1 1'
3  3  '0 0 1 0 1'  '0 0 1 0 1'
3  5  '0 0 1 0 1'  '0 1 0 1 1'
4  4  '0 0 1 1 1'  '0 0 1 1 1'
5  5  '0 1 0 1 1'  '0 1 0 1 1'
6  6  '0 1 1 1 1'  '0 1 1 1 1'
9 bases

14: ~/projects/andromeda > signal_bases 6 2

spanning groups:
0 bases

15: ~/projects/andromeda > signal_bases 6 3

spanning groups:
1  1  1  '0 0 0 0 0 1'  '0 0 0 0 0 1'  '0 0 0 0 0 1'
1  1  3  '0 0 0 0 0 1'  '0 0 0 0 0 1'  '0 0 0 1 0 1'
etc...
10 12 12  '0 1 0 1 1 1'  '0 1 1 1 1 1'  '0 1 1 1 1 1'
12 12 12  '0 1 1 1 1 1'  '0 1 1 1 1 1'  '0 1 1 1 1 1'
112 bases

Each basis for a signal space represents a different way to create the signals of that space. Put another way, every signal in a space can be represented as a magnitude/phase combination of any of these bases, and there is a way to transform the representation of a signal in one basis to its corresponding representation in another basis (change of basis). Also, every basis for a space corresponds to an operator that acts on the members of that space. For now, just keep that in mind, as we proceed from concrete physical signals toward more abstract mathematical states.

Next: Complex numbers.

29 December 2019