A method for transmitting data over a plurality of multiple input multiple output, MIMO, channels comprising: modulating a plurality of bit streams into multiple data symbol vectors (s1-s8), each vector having a transmission rank with one vector for each MIMO channel, wherein transmission rank is the number of elements in a data symbol vector corresponding to the number of data streams being transmitted in parallel over each MIMO channel; precoding the multiple data symbol vectors into multiple precoded symbol vectors (x1-x8) using multiple precoders, wherein a precoder is a matrix having plural columns, belonging to a first open-loop precoder cycling codebook of precoders that are grouped into precoder cycling sets, one set for each transmission rank including multiple different precoders, wherein the precoders within each precoder cycling set are separated with respect to a plurality of distance measures, wherein the precoding includes precoding each data symbol vector of a transmission rank with a precoder belonging to the precoder cycling set of that transmission rank; and transmitting the precoded symbol vectors over the plurality of MIMO channels; and wherein the first precoder cycling codebook comprises the precoders associated with codebook indices 12, 13, 14, and 15 in the following table where a quantity W n s denotes a precoder matrix defined by columns given by the set { s} from the expression W n = I − 2 u n u n H / u n H u n where I is a 4×4 identity matrix and vector u n: Codebook index u n Transmission Rank 1 2 3 4 12 u 12 = [1 -1 -1 1] T W 12 1 W 12 12 / 2 W 12 123 / 3 W 12 1234 / 2 13 u 13 = [1 -1 1 -1] T W 13 1 W 13 13 / 2 W 13 123 / 3 W 13 1324 / 2 14 u 14 = [1 -1 -1] T W 14 1 W 14 13 / 2 W 14 123 / 3 W 14 3214 / 2 15 u 15 = [1 1 1 1] T W 15 1 W 15 12 / 2 W 15 123 / 3 W 15 1234 / 2 modulating a plurality of bit streams into multiple data symbol vectors (s1-s8), each vector having a transmission rank with one vector for each MIMO channel, wherein transmission rank is the number of elements in a data symbol vector corresponding to the number of data streams being transmitted in parallel over each MIMO channel; precoding the multiple data symbol vectors into multiple precoded symbol vectors (x1-x8) using multiple precoders, wherein a precoder is a matrix having plural columns, belonging to a first open-loop precoder cycling codebook of precoders that are grouped into precoder cycling sets, one set for each transmission rank including multiple different precoders, wherein the precoders within each precoder cycling set are separated with respect to a plurality of distance measures, wherein the precoding includes precoding each data symbol vector of a transmission rank with a precoder belonging to the precoder cycling set of that transmission rank; and transmitting the precoded symbol vectors over the plurality of MIMO channels; and wherein the first precoder cycling codebook comprises the precoders associated with codebook indices 12, 13, 14, and 15 in the following table where a quantity W n s denotes a precoder matrix defined by columns given by the set { s} from the expression W n = I − 2 u n u n H / u n H u n where I is a 4×4 identity matrix and vector u n: Codebook index u n Transmission Rank 1 2 3 4 12 u 12 = [1 -1 -1 1] T W 12 1 W 12 12 / 2 W 12 123 / 3 W 12 1234 / 2 13 u 13 = [1 -1 1 -1] T W 13 1 W 13 13 / 2 W 13 123 / 3 W 13 1324 / 2 14 u 14 = [1 -1 -1] T W 14 1 W 14 13 / 2 W 14 123 / 3 W 14 3214 / 2 15 u 15 = [1 1 1 1] T W 15 1 W 15 12 / 2 W 15 123 / 3 W 15 1234 / 2