A non-transitory, processor-readable medium storing instructions that, when executed by a processor that is associated with a first communication device, cause the processor to:
- generate a plurality of symbols based on an incoming data;
- apply a permutation to each symbol from the plurality of symbols, to produce a plurality of permuted symbols;
- transform each permuted symbol from the plurality of permuted symbols based on at least one primitive transformation matrix, to produce a plurality of transformed symbols;
- apply, to each transformed symbol from the plurality of transformed symbols, a precode matrix selected from a codebook of transformation matrices, the codebook of transformation matrices accessible to the first communication device and to a second communication device different from the first communication device, to produce a plurality of precoded symbols;
- and
- send a signal to cause transmission, to the second communication device, of a plurality of signals, each signal from the plurality of signals representing a precoded symbol from the plurality of precoded symbols, each signal from the plurality of signals transmitted using a unique antenna from a plurality of antennas of the first communication device.