A computer-implemented method for determining a transmit precoding operation to apply to a signal to be transmitted through a wireless channel via beamforming wherein the signal u is represented by a vector, u, and the method comprises:
- obtaining an inverse channel matrix, G wherein the inverse channel matrix, G, is an inverse of a channel matrix, H, wherein the channel matrix, H, is a matrix representation of the wireless channel;
- determining a vector, b, that approximately minimizes a square of a norm of a result of applying the inverse channel matrix G to the sum of the vector representing the signal, u, and the vector, b, wherein the entries of the vector, b, are integers and determining the vector b, comprises:
- obtaining an initial estimate for the vector, b;
- cloning the initial estimate of the vector, b, n times;
- providing a clone of the initial estimate of the vector b to each of n independent processing runs as a current estimate for the vector, b;
- and
- for each of the n independent processing runs, setting a counter to an initial value, and then iteratively performing the following iteration steps:
- producing two copies of the current estimate for the vector, b;
- applying a randomly generated mutation vector to each of the two copies of the current estimate of the vector, b, wherein the randomly generated mutation vector is generated separately for each copy of the current estimate of the vector, b;
- calculating a value of a cost function for the current estimate of the vector, b, and the two mutated copies of the current estimate of the vector, b;
- selecting the estimate of the vector b that has a best value of the cost function wherein the selection is from the two mutated copies of the current estimate of the vector, b, and the current estimate of the vector b;
- and
- in response to the selected estimate being one of the mutated copies of the current estimate of the vector, b, replacing the current estimate of the vector, b, with the mutated copy of the current estimate of the vector, b, that resulted in the best value of the cost function;
- in response to the selected estimate being the current estimate of the vector, b, maintaining the current estimate of the vector, b;
- comparing the best value of the cost function with a best value of the cost function from the previous iteration;
- and
- in response to the best value of the cost function being better than the best value of the cost function from the previous iteration:
- resetting the counter to the initial value;
- and
- performing another iteration of the iteration steps;
- in response to the best value of the cost function being the same as the best value of the cost function from the previous iteration:
- incrementing the value of the counter;
- determining if the counter has reached a threshold value;
- and
- in response to the counter not having reached the threshold value performing another iteration of the iteration steps;
- and
- in response to the counter having reached the threshold value, returning the current estimate of the vector, b, as the processing run estimate of the vector b;
- once at least one of the processing runs has returned a processing run estimate of the vector b;
- obtaining a value of the cost function for each processing run estimate of the vector, b;
- and
- selecting as the vector, b, the processing run estimate of the vector b with the best value of the cost function.