1 unstable release
0.1.0 | Aug 30, 2023 |
---|
#353 in Science
57KB
988 lines
Enumerative Sphere Shaping Library
This project implements the enumerative sphere shaping (ESS) (implementation follows this paper) and optimum ESS (OESS) algorithms in Rust.
For ease of use it also contains the subproject pyrsess
which provides Python bindings for the Rust code.
Installation
The Rust code can be compiled and run with cargo run
.
To use the Python bindings refer to the README in the pyrsess
subfolder.
An optimized build can be created using cargo build --release
.
The documentation can be compiled with cargo doc
.
It can then be found as .html
files in ./target/doc/ess/
.
The entry point is ./target/doc/rsess/index.html
.
By default the documentation focuses on the public interface of rsess
.
If the reader is interested in the inner workings of rsess
, running cargo doc --document-private-items
may yield additional insights.
Testing
Some test are located in src/tests.rs
, these can be run with cargo test
.
Rust Code Overview
- File
src/lib.rs
- Defines the trait
DistributionMatcher
- Fixes common methods for
ESS
andOESS
- Fixes common methods for
- Defines the structs
ESS
andOESS
which implementDistributionMatcher
- User interfaces for the ESS / OESS algorithms
- Offer the
encode
/decode
functions
- Offer the
- Offer utilities like calculating the amplitude distribution or average energy
- User interfaces for the ESS / OESS algorithms
- Defines the struct
ASK
- Represents the amplitude shift keying modulation scheme
- Defines the trait
- File
src/trellis.rs
- Defines the struct
Trellis
- Represents the trellis used internally by the ESS and OESS algorithms
- Implements (forward and reverse) trellis construction
- Implements indexing algorithms used in
encode
/decode
- Defines the struct
- File
src/iterators.rs
- Defines an iterator
Amplitudes
- Iterates trough amplitude values in a given ASK with some extra constraints
- Defines an iterator
Energies
- Iterates through energy levels in a trellis
- Defines an iterator
- File
src/tests.rs
- Defines tests for the remaining code
- Roughly divided into three sections: Trellis, ESS and OESS
Dependencies
~2.5MB
~47K SLoC