OVSF Codes

As we know, the channelization codes for physical channels in UMTS should be orthogonal. Otherwise the reciever would not be able to decode the data correctly.

Spreading Factor

3GPP adopts Hamamard Codes, a.k.a. Walsh Codes, to generate channelisation codes as below figure(from WCDMA for UMTS HSPA Evolution and LTE 5th Edition). In UMTS, we usally call them OVSF(Orthogonal Variable Spreading Factor) codes.



It’s easy to understand why the codes with the same Spreading Factor(SF) are orthogonal.

For instance, C4,3 and C4,4 are orthogonal since the product(bit by bit) is 0.

C4,3(1) * C4,4(1) + C4,3(2) * C4,4(2) + C4,3(3) * C4,4(3) + C4,3(4) * C4,4(4) = 1 * 1 + (-1) * (-1) + 1 * (-1) + (-1) * 1 = 0

Assume there are two channels to transmit data. Let’s say signal on one channel is x while signal on the other channel is y. And x is spread by channelization code C4,3 and y is spread by code C4,4. So the final data to receiver is:

xC4,3 + yC4,4

Receiver should be aware of these two channelization codes in advance, from for example control channels etc. Thus it could respectively decode the original data by multipying received data by each channelization code. That is:

(xC4,3 + yC4,4) * C4,3 = xC4,3C4,3 + yC4,4C4,3 = x*C4,32

That’s why we say ideally there is no inter-channel intereference once they are spread by channelization codes.


In WCDMA for UMTS HSPA Evolution and LTE 5th Edition, it says below words without detailed explanation.

There are certain restrictions as to which of the channelization codes can be used for a transmission from a single source. Another physical channel may use a certain code in the tree if no other physical channel to be transmitted using the same code tree is using a code that is on an underlying branch, i.e. using a higher spreading factor code generated from the intended spreading code to be used. Neither can a smaller spreading factor code on the path to the root of the tree be used.

Still, take C2,2 and C4,4 as example. But here is the problem, C4,4 is a four-dimensional vector meanwhile C2,2 is only two dimensional. How to linealy multiply these two vectors?

One of my colleagues told me, in Linear Algebra, the missing bits would be filled with “0” in case two different dimensional vectors multiply. Thus the product of C2,2 and C4,4 should be “2” instead of “0”.

It’s more clear to draw an illustrator when the signal is one bit as “1”. Because the chip duration Tchip is fixed as 1/3840000 second. The spreading data with C4,4 is longer than C2,2.

Non-orthogonal 1

If the input data is (1, -1) and spread by C2,2. Then the output will be exactly the same as “1” spread by C4,4.

Non-orthogonal 2

That’s why certain code and its children codes are not orthogonal. And it is impossible for receiver to decode the original channel data respectively.