An apparatus for generating a precoding matrix codebook, the apparatus comprising: a matrix group generator adapted to generate a first group of unitary matrices based on a vector-based codebook for precoding of a multiple input multiple output (MIMO) communication scheme; characterized in that the apparatus further comprises: a matrix group extender adapted to extend the first group of unitary matrices to generate a second group of unitary matrices so that: a reference column of an Nt x Nt unitary matrix that is an element of the second group is identical to a reference column of an Nt x Nt unitary matrix that is an element of the first group; remaining columns of the Nt x Nt unitary matrix that is an element of the second group are orthogonal to the reference column of the the Nt x Nt unitary matrix that is an element of the first group; and a matrix group selector adapted to select a group of columns corresponding to a communication rank from each of the unitary matrices that are elements of the second group so that the selected columns maximize a distance between the columns corresponding to the communication rank; wherein the matrix group selector comprises: a candidate matrix selector adapted to select a predetermined number of candidate matrices from unitary matrices that are elements of the second group so that the candidate matrices maximize a distance between reference columns of the candidate matrices; and an optimized columns selector adapted to select the group of columns corresponding to the communication rank from the predetermined number of candidate matrices so that the selected columns maximize a distance between the columns corresponding to the communication rank. a matrix group generator adapted to generate a first group of unitary matrices based on a vector-based codebook for precoding of a multiple input multiple output (MIMO) communication scheme; characterized in that the apparatus further comprises: a matrix group extender adapted to extend the first group of unitary matrices to generate a second group of unitary matrices so that: a reference column of an Nt x Nt unitary matrix that is an element of the second group is identical to a reference column of an Nt x Nt unitary matrix that is an element of the first group; remaining columns of the Nt x Nt unitary matrix that is an element of the second group are orthogonal to the reference column of the the Nt x Nt unitary matrix that is an element of the first group; and a matrix group selector adapted to select a group of columns corresponding to a communication rank from each of the unitary matrices that are elements of the second group so that the selected columns maximize a distance between the columns corresponding to the communication rank; a matrix group extender adapted to extend the first group of unitary matrices to generate a second group of unitary matrices so that: a reference column of an Nt x Nt unitary matrix that is an element of the second group is identical to a reference column of an Nt x Nt unitary matrix that is an element of the first group; remaining columns of the Nt x Nt unitary matrix that is an element of the second group are orthogonal to the reference column of the the Nt x Nt unitary matrix that is an element of the first group; and a reference column of an Nt x Nt unitary matrix that is an element of the second group is identical to a reference column of an Nt x Nt unitary matrix that is an element of the first group; remaining columns of the Nt x Nt unitary matrix that is an element of the second group are orthogonal to the reference column of the the Nt x Nt unitary matrix that is an element of the first group; and a matrix group selector adapted to select a group of columns corresponding to a communication rank from each of the unitary matrices that are elements of the second group so that the selected columns maximize a distance between the columns corresponding to the communication rank; wherein the matrix group selector comprises: a candidate matrix selector adapted to select a predetermined number of candidate matrices from unitary matrices that are elements of the second group so that the candidate matrices maximize a distance between reference columns of the candidate matrices; and an optimized columns selector adapted to select the group of columns corresponding to the communication rank from the predetermined number of candidate matrices so that the selected columns maximize a distance between the columns corresponding to the communication rank. a candidate matrix selector adapted to select a predetermined number of candidate matrices from unitary matrices that are elements of the second group so that the candidate matrices maximize a distance between reference columns of the candidate matrices; and an optimized columns selector adapted to select the group of columns corresponding to the communication rank from the predetermined number of candidate matrices so that the selected columns maximize a distance between the columns corresponding to the communication rank.