A method comprising: performing adaptive beam steering using multiple transmit and receive antennas, including iteratively performing a pair of training operations (504, 505, 506, 507, 508), wherein said iteratively performing the pair of training operations includes estimating a transmitter antenna-array weight vector and a receiver antenna-array weight vector, and wherein performing adaptive beam steering (401, 402, 403) using multiple transmit and receive antennas (309, 310) comprises iteratively performing a set of operations, the set of operations including: (a) setting a receive weight vector for receive antennas based on an initial weight vector or phase shift vector; (b) sequentially measuring channel gains corresponding to a plurality of transmit phase shift vectors to form a first set of channel gains (550 1,...,N); (c) calculating a transmit antenna weight vector based on the first set of channel gains; (d) setting transmit phase shifts for transmit antennas based on the transmit antenna weight vector; (e) sequentially measuring channel gains at the receiver corresponding to a plurality of receive phase shift vectors to form a second set of channel gains (560 1,...,N); and (f) calculating a receive antenna weight vector based on the second set of measured channel gains. performing adaptive beam steering using multiple transmit and receive antennas, including iteratively performing a pair of training operations (504, 505, 506, 507, 508), wherein said iteratively performing the pair of training operations includes estimating a transmitter antenna-array weight vector and a receiver antenna-array weight vector, and wherein performing adaptive beam steering (401, 402, 403) using multiple transmit and receive antennas (309, 310) comprises iteratively performing a set of operations, the set of operations including: (a) setting a receive weight vector for receive antennas based on an initial weight vector or phase shift vector; (b) sequentially measuring channel gains corresponding to a plurality of transmit phase shift vectors to form a first set of channel gains (550 1,...,N); (c) calculating a transmit antenna weight vector based on the first set of channel gains; (d) setting transmit phase shifts for transmit antennas based on the transmit antenna weight vector; (e) sequentially measuring channel gains at the receiver corresponding to a plurality of receive phase shift vectors to form a second set of channel gains (560 1,...,N); and (f) calculating a receive antenna weight vector based on the second set of measured channel gains. (a) setting a receive weight vector for receive antennas based on an initial weight vector or phase shift vector; (b) sequentially measuring channel gains corresponding to a plurality of transmit phase shift vectors to form a first set of channel gains (550 1,...,N); (c) calculating a transmit antenna weight vector based on the first set of channel gains; (d) setting transmit phase shifts for transmit antennas based on the transmit antenna weight vector; (e) sequentially measuring channel gains at the receiver corresponding to a plurality of receive phase shift vectors to form a second set of channel gains (560 1,...,N); and (f) calculating a receive antenna weight vector based on the second set of measured channel gains.