Like serial/parallel conversion, mirroring is simple both in principle and implementation, but is essential to DMT. We need to eventually transmit a real-valued signal, but after constellation mapping, the blocks are all complex-valued. Mirroring ensures that the transmitted signal is real-valued by using the fact that the IFFT of a conjugate-symmetric vector is real; i.e., mirroring gives each block conjugate symmetry. In mirroring, each block is flipped around, conjugated and tacked onto the end of the original block. There are a few finer points, however. If the block is length
M before mirroring, the (
M+1)th element of the mirrored block takes any real value (we set it to zero) while the (
M+2)th through 2
Mth elements take the 1st through (M-1)th elements (flipped) of the original block. Also, the first element in any block cannot be complex valued; it must be artificially set to some real value. This is because the first point in any block corresponds to a frequency of zero after after the IFFT; if this element is complex, the resulting IFFT vector will have a complex DC offset and thus will also be complex. Although this would be a source of error, we assumed that the receiver knew the correct first elements of each block, eliminating this error. We felt we were justified in this regard because our main goal was to implement a DMT system resilient to
channel error (We could also have coded it so that the first few bits in each block were assigned real-valued constellation points, but this way was easier).