komm.ZChannel
Z-channel. It is a discrete memoryless channel with input and output alphabets $\mathcal{X} = \mathcal{Y} = \{ 0, 1 \}$. The channel is characterized by a parameter $p$, called the decay probability. Bit $0$ is always received correctly, but bit $1$ turns into $0$ with probability $p$. Equivalently, the channel can be modeled as $$ Y_n = A_n X_n, $$ where $A_n$ are iid Bernoulli random variables with $\Pr[A_n = 0] = p$.
Attributes:
-
decay_probability
(Optional[float]
) –The channel decay probability $p$. Must satisfy $0 \leq p \leq 1$. The default value is
0.0
, which corresponds to a noiseless channel.
Input:
-
input_sequence
(Array1D[int]
) –The input sequence.
Output:
-
output_sequence
(Array1D[int]
) –The output sequence.
Examples:
>>> np.random.seed(1)
>>> zc = komm.ZChannel(0.1)
>>> zc([0, 1, 1, 1, 0, 0, 0, 0, 0, 1])
array([0, 1, 0, 1, 0, 0, 0, 0, 0, 1])
transition_matrix: npt.NDArray[np.float64]
property
The transition probability matrix of the channel. It is given by $$ p_{Y \mid X} = \begin{bmatrix} 1 & 0 \\ p & 1-p \end{bmatrix}. $$
Examples:
>>> zc = komm.ZChannel(0.1)
>>> zc.transition_matrix
array([[1. , 0. ],
[0.1, 0.9]])
mutual_information
Returns the mutual information $\mathrm{I}(X ; Y)$ between the input $X$ and the output $Y$ of the channel. It is given by $$ \mathrm{I}(X ; Y) = \Hb ( \pi (1-p) ) - \pi \Hb(p), $$ in bits, where $\pi = \Pr[X = 1]$, and $\Hb$ is the binary entropy function.
Parameters:
Same as the corresponding method of the general class.
Examples:
>>> zc = komm.ZChannel(0.1)
>>> zc.mutual_information([0.5, 0.5])
np.float64(0.7582766571931676)
capacity
Returns the channel capacity $C$. It is given by $$ C = \log_2 ( 1 + (1-p) p^{p / (1-p)} ), $$ in bits.
Examples:
>>> zc = komm.ZChannel(0.1)
>>> zc.capacity()
np.float64(0.7628482520105094)