In this work, we present an open-source implementation of the enumerative sphere shaping (ESS) algorithm used for probabilistic amplitude shaping. Information theory shows that the capacity of an additive white Gaussian noise (AWGN) channel is reached if the input symbols follow a Gaussian distribution. However, many communication systems employ a uniform distribution of channel input symbols, and therefore a shaping gap prevents the communication system from reaching capacity. This shaping gap amounts up to 0.255 bits/channel use or translated to an increase in required SNR, this corresponds to a loss of 1.53 dB in energy efficiency. In order to obtain a certain probabilistic shaping (i.e., a non-uniform probability distribution) of the channel input symbols, a distribution matching algorithm is required to map the uniformly distributed input bits to a sequence of modulation symbols following the desired probability distribution. Distribution matchers can be implemented in various ways; in order to work well with other information processing blocks in communication systems, a block-based (fixed-to-fixed length) mapping of a fixed length input bit sequence to a fixed length symbol sequence is desired. As the number of sequences in this mapping becomes very large even for small block lengths, a simple lookup table becomes unfeasible very quickly. The mapping must therefore be performed algorithmically. One distribution matching algorithm which has gained in popularity is ESS. ESS operates on a trellis representation of a subset of the possible symbol sequences and the desired shaping rate is controlled by constraining the energy in a sequence. This leads to the empirical distribution of the symbols in the represented sequences closely approximating the optimal distribution for the AWGN channel. A lexicographic ordering approach is used on the trellis to assign a unique index to each sequence. Finally, to define a mapping from bit sequence to symbol sequence, the bit sequence is interpreted as a binary number and used as this index. It is important to note that the lookup is performed algorithmically and it is not required to store all possible transmit sequences with their corresponding index. To perform the reverse operation, the index of a received symbol sequence is constructed using the pre-computed trellis. We provide an open-source implementation of this algorithm in the compiled language Rust. This facilitates simulations using our implementation to run significantly faster than implementations in interpreted languages like Python or Matlab. For interoperability, we provide Python/NumPy bindings with which our Rust algorithm can be used from a regular Python script. We will also present simulation results on the AWGN channel and compare the results with previous works on this topic.
|Talk Length||15 Minutes|