Introducing channels

Issue #13 resolved
David Lucas repo owner created an issue

It could be nice to implement a structure to support channels in the project., and be ready to set these as part of the demonstrator.

According to you, what do we need to have inside our channels files?

Comments (3)

  1. Johan Rosenkilde

    In channels.sage in Codinglib I have already a bit of functionality, as well as a few easy channels. I briefly describe the design of those classes. I'm not saying this is the design we will end up with.

    • A channel has an input_space and output_space. These can be any Sage container object, and have very few formal requirements in general.
    • A channel has methods transmit_element and transmit. The difference is that transmit_element takes one element of input_space and produces one in output_space. transmit takes a list (iterable) of such input elements and returns a list of output elements

    That's it. On top of this, I've implemented

    • QarySymmetricChannel which relies on random_element on input_space
    • BinaryAdditiveGaussianWhiteNoise uses BPSK modulation of F2 and output_space is RR. Supports helper functions decide_hard for going back to F2 and posteriori_probability for calculating prob. of a 0 resp. 1 given the output.)
    • BinaryExtSoftChannel (which does binary expansion of F2m elements, sending each over a soft channel (e.g. BinaryAdditiveGaussianWhiteNoise). Output space is S^m where S is output_space of the inner soft channel. Also has helper functions decide_hard, posteriory_probability and posteriory_probability_table.
  2. Log in to comment