One (and probably the first to be implemented) of the modulation schemes used in the UMTS standard. W-CDMA stands for Wideband Code Division Multiple Access.

As the name implies, W-CDMA is a CDMA scheme, also known under the name of DSS, Direct Sequence Spread Spectrum (no, I don't know what happened to the third 'S'). 'Wideband' because it uses a bandwidth (in the UMTS implementation) of 5 MHz, which is quite a bit more than is used for single channels in existing wireless telcommunication standards. The maximum data transfer rate specified for W-CDMA is about 2 Mbits/second, although this would have to be shared between all the active users inside a cell. But then again, W-CDMA is designed to hold a lot of cells within any given volume, down to the size of a single room.

How It Works

The following short description doesn't do justice to the system - but on the other hand, a description that attempts to even start to at least scratch the surface of most of the issues would fill a book. Actually does fill a few books. Plus, there's a lot of stuff there that simply exceeds the possibilities of ASCII art - or is plain boring except for dedicated specialists.

In the currently used wireless telcommunications systems all over the globe, there are three basic means of permitting several users to access the network simultaneously, also called multiple access schemes:

In addition to the acces scheme, which separates the different users, there's also the need for a so-called duplexing scheme, which separates the connection from the mobile to the base station from the connection from the base station to the mobile. There are two such duplexing schemes commonly used:
  • TDD, Time Division Duplex, where mobile and base station transmit on the same frequency, but in different time slots, and
  • FDD, Frequency Division Duplex, where mobile and base station can transmit simultaneously, but at different frequencies.
Naturally, these schemes can be combined. So e.g. there's a TDD-CDMA specification, which is a part of the UMTS/UTRA specification combining aspects of of TDD with aspects of W-CDMA. And W-CDMA uses FDD to separate the two link directions.

But let's stay with W-CDMA for the time being. Anything in digital communications is supposed to be a digital data stream. If you want to transmit analogue information, you'll have to digitize it first. Then, in addition to the data you want to transmit, the user data, there's other information the telecommunications system needs to transmit in order to establish, hold and release a connection - and finally write the bill. All that stuff is described, in detail, in the corresponding ETSI/3GPP documents. But the basic transmission scheme is the same for everything, so let me try to describe how some user data is transferred from a transmitter to a receiver in the W-CDMA system, assuming that something else already took care of establishing a connection.

Spreading and Despreading

The user data stream is first split into blocks, interspersed with control data, interleaved and run through a forward error correction (FEC) system. After that, the resulting data stream is split up into two-bit pairs. These are in turn used as input for a complex QPSK modulation scheme. Although the two bits in each pair are coupled, both through complex multiplications in the transmitter/receiver as well as phase shift and distortion while being transmitted over the air, it is sufficient to concentrate on what happens to a single bit stream. If, instead of real bits, complex symbols are used, some of the real multiplications in the spreading/scrambling operations will have to be replaced by their complex counterparts.

So now we have a stream of bits, containing - among other stuff - the data we want to send over the air. Instead of the usual representation using '1' and '0' for the two states of each bit, the values '+1' and '-1' (or just '+' and '-') will be used. Now take this bit stream (there are limits to ASCII art, so I can't really draw the pictures. Bear with me):

     -1    +1    +1    -1    +1    -1    -1    +1    -1
   ------++++++++++++------++++++------------++++++------

This bit stream is now multiplied with a repetitive higher frequency spreading code. The spreading code is individual for each data stream and, depending on the frequency ratio between the data stream and the spreading code, the so-called spreading factor, there are only so many orthogonal spreading codes to go around. This is one of the limitations where the 2 Mbit limit for the available bandwidth per cell comes from. A bit of the spreading code is also called a 'chip', and so the spreading code data rate is usually called 'chip rate'. In W-CDMA, the chip rate is 3.84 Mchips/second.

bit stream: 
   ------++++++++++++------++++++------------++++++------
   |____|
    1bit
times spreading code:
   --++----++----++----++----++----++----++----++----++--
   |____|
    6 chips -> spreading factor = 6
equals:
   ++--++--++----++--++--++--++--++--++++--++--++--++--++

After that, there's a further scrambling operation, similar to this first spreading operation, which doesn't do anything interesting to the data stream any more but serves to distinguish the signals between different cells. For the time being, let's assume there's only one cell and forget about the scrambling.

On the receiver end, somehow the user data has again to be extracted from the spread stream. Easy if you know how: just repeat the spreading operation, i.e. multiply the incoming stream of spread data with the spreading code:

incoming spread data stream:
   ++--++--++----++--++--++--++--++--++++--++--++--++--++     
times spreading code:
   --++----++----++----++----++----++----++----++----++--
equals: 
   ------++++++++++++------++++++------------++++++------
accumulated:
       -6    +6    +6    -6    +6    -6    -6    +6    -6

Now, if that was all it wouldn't be worth the effort. It gets interesting if you try to despread the incoming stream with the wrong spreading code, i.e. a spreading code that's associated to another user data stream (e.g. another mobile telephone):

incoming spread data stream:
   ++--++--++----++--++--++--++--++--++++--++--++--++--++     
times wrong spreading code:
   -+-++--+-++--+-++--+-++--+-++--+-++--+-++--+-++--+-++-
equals:
   -++-+-+--+-++--+-+-++-+-+--+-+-++-+--++-+-+--+-+-++-+-
accumulated:
        0     0     0     0     0     0     0     0     0

So, when using the wrong code for despreading, instead of the original data sequence (multiplied with the spreading factor, btw), we get exactly zero. You might try it for other orthogonal spreading codes. Now, if instead of a single data stream, we have several data stream simultaneously, they just add up. But still, all the wrong data streams, after despreading and accumulated over the time of one bit, still add up to exactly zero. So it's possible to filter out a single data stream out of the mish-mash of all other data streams.

The Skinny