1. A method to generate a codebook for channel state information in a wireless system having multiple input/multiple output (MIMO) antennas, comprising: a. generating a random codebook; b. partitioning channel state information into a set of nearest neighbors for each codebook entry based on a distance metric; and c. updating the codebook by finding a centroid for each partition wherein the centroid for the k th partition comprises q i 2 ( 2 ) = ⁢ arg ⁢ ⁢ min q ∈ ℂ ( t - 1 ) × 1 , q * ⁢ q = 1 ⁢ ∑ i 1 = 1 K 1 ⁢ 𝔼 [ ⁢ d p ⁡ ( [ q i 1 ( 1 ) , Ψ ⁡ ( q i 1 ( 1 ) - e t ) ⁡ [ 0 q ] ] , V ( 2 ) ) ⁢ ℐ ⁡ ( V ( 2 ) ∈ v i 1 , i 2 ( 2 ) ) ] .