Precoding Techniques for MIMO Channels