Sphere decoding for non-binary modulation
This channel model is known as a multiplicative channel, and it differs from the AWGN channel in that the signal amplitude is scaled by a gain factor.

If the gain factor is real (that is, if the channel simply attenuates the signal), then we can write $\Re (y) = G\Re(a) + \Re(w)$ and $\Im(y) = G\Im(a)+\Im(w)$. In other words, the real and imaginary parts of the received signal are orthogonal and they can be detected separately.

In a case like this, using SD is overkill. For instance, if the transmitted constellation is QPSK, the optimum detection problem involves calculation of four distances in $\mathbb{R}^2$, which is not a hard problem. Furthermore, the symmetry of QPSK actually reduces the problem to that of finding in which quadrant $y$ lives in, which involves two sign checks.

To make things more interesting, consider a flat-fading wireless channel, where the gain $G$ is complex. In this channel, $\Re(y)$ depends on both the real and the imaginary parts of $a$, so the problem cannot be neatly separated in two anymore. If we write $G=|G|e^{j2\pi\angle{G}}$, then we can see that the wireless channel rotates and scales the transmitted constellation.

Even more interesting is the case where we have receive diversity, or mulitple receiver antennas operating concurrently. In this case $G$ becomes a vector, each element of which is the complex channel gain between the transmitter and one receiver. Now, $y$ is also a vector. For a large number of antennas and/or a large constellation, the problem of estimating $y$ becomes more and more complex.

Consider the case where we use 32-QAM and 4 receiver antennas. The ML calculation now involves calculating $32^4\approx10^6$ distances! And that is to estimate just a single symbol. It is in this situation that the SD algorithm starts to shine, since it can dramatically reduce the number of combinations to check.

Unfortunately, in a case like this the SD problem cannot be neatly separated into two. However, there are (more complex) ways to break the calculations into independent blocks that can be computed in parallel. Search for "parallel sphere decoder" in Google scholar or similar engines: there are many results that can help you speed up the SD algorithm, and still find an optimum solution (or close to).