Techniques for processing a data transmission at a transmitter and receiver, which use channel eigen-decomposition, channel inversion, and (optionally) “water-pouring”. At the transmitter, (1) channel eigen-decomposition is performed to determine eigenmodes of a MIMO channel and to derive a first set of steering vectors, (2) channel inversion is performed to derive weights (e.g., one set for each eigenmode) used to minimize ISI distortion, and (3) water-pouring may be performed to derive scaling values indicative of the transmit powers allocated to the eigenmodes. The first set of steering vectors, weights, and scaling values are used to derive a pulse-shaping matrix, which is used to precondition modulation symbols prior to transmission. At the receiver, channel eigen-decomposition is performed to derive a second set of steering vectors, which are used to derive a pulse-shaping matrix used to condition received symbols such that orthogonal symbol streams are recovered.