An apparatus, comprising: a first communication device including a plurality of antennas and configured to access a codebook of unitary matrices that is also accessible by a second communication device ; and a processor operatively coupled to the first communication device , the processor configured to: generate a plurality of symbols based on an incoming data; decompose each unitary matrix from a plurality of unitary matrices of the codebook of unitary matrices into an associated plurality of layers , for each unitary matrix from the plurality of unitary matrices , each layer from the plurality of layers associated with that unitary matrix including a permutation and a primitive transformation matrix ; apply , to each symbol from the plurality of symbols, at least one layer from an associated unitary matrix from the plurality of unitary matrices , to generate a plurality of transformed symbols; apply , to each transformed symbol from the plurality of transformed symbols, a precode matrix selected from the codebook of unitary matrices , 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 the plurality of antennas . a first communication device including a plurality of antennas and configured to access a codebook of unitary matrices that is also accessible by a second communication device ; and a processor operatively coupled to the first communication device , the processor configured to: generate a plurality of symbols based on an incoming data; decompose each unitary matrix from a plurality of unitary matrices of the codebook of unitary matrices into an associated plurality of layers , for each unitary matrix from the plurality of unitary matrices , each layer from the plurality of layers associated with that unitary matrix including a permutation and a primitive transformation matrix ; apply , to each symbol from the plurality of symbols, at least one layer from an associated unitary matrix from the plurality of unitary matrices , to generate a plurality of transformed symbols; apply , to each transformed symbol from the plurality of transformed symbols, a precode matrix selected from the codebook of unitary matrices , 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 the plurality of antennas . generate a plurality of symbols based on an incoming data; decompose each unitary matrix from a plurality of unitary matrices of the codebook of unitary matrices into an associated plurality of layers , for each unitary matrix from the plurality of unitary matrices , each layer from the plurality of layers associated with that unitary matrix including a permutation and a primitive transformation matrix ; apply , to each symbol from the plurality of symbols, at least one layer from an associated unitary matrix from the plurality of unitary matrices , to generate a plurality of transformed symbols; apply , to each transformed symbol from the plurality of transformed symbols, a precode matrix selected from the codebook of unitary matrices , 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 the plurality of antennas . <EOS>