In Multiple-input Multiple-output (MIMO) beamforming, channel state information is fed back to the transmitter so that optimal weights can be applied to each transmitting antenna. This is accomplished by designing a codebook of 2B vectors in ℂn, where n is the number of antennas, and B is the number of bits to be transmitted back. The codebook is designed offline, and is known to both the transmitter and the receiver. The receiver then simply transmits back the code associated with the vector closest to the optimal beamforming weights.

This leaves us with the problem of designing the codebook. We would like the chosen vectors to be as evenly dispersed as possible, so that there are no large gaps which would lead to poor quantization. This can be restated as the Grassmannian line packing problem: Let G(k,l) be the Grassmannian Manifold, i.e. the set of k dimensional subspaces of an l dimensional vector space. Then the Grassmannian line packing problem is the problem of finding m points on G(k,l) that maximizes the minimum distance between the points. In our case, we are trying to pack 2B points into G(n,1).

A solution to the Grassmannian line packing problem can be found using PSO. We will maximize the objective function ƒ(C) = max mind(Ci,Cj) where C = {C1,…,C2N} is a collection of 2B points in G(k,l), and d is the distance between them. In applying PSO to maximize this function, we have the added difficulty of working on a manifold instead of in a vector space. This can be dealt with by noting that the unit sphere in ℂn is a double cover of G(n,1), i.e. for every point in G(n,1), there are two on the unit sphere: the two that the line passes through. So, we will think of our points as being in the vector space, and renormalize after each iteration. Care does need to be taken that when determining in which direction the best locations are, we consider both points that represent the line, and choose the closer one.