# BPSK, QPSK and 16QAM DSSS Tx and Rx with multipath channel

|In previous posts we saw the properties of DSSS signals and the rake receiver implementation for a 16QAM system.

- BPSK Tx and Rake Rx, with AWGN, Rayleigh and exponentially decaying multipath profile function (
**bpsk.m**) - Same for QPSK (
**qpsk.m**) - Same for 16 QAM (
**qam.m**) - Script (
**qam_qpsk_bpsk.m**) that calls each of the functions below and plots the results for different input parameters: number of bits, number of packets, pseudo-random sequence, number of fingers and number of paths in the channel.

By running this script you can see how the performance increase when using DSSS, with respect to the theoretical bit error rate for each modulation.

**DSSS in AWGN plus multipath channels**

The tests in Matlab can be performed by varying the different key parameters on the system for different m-sequences.

The AWGN channel was simulated in Matlab by generating Gaussian random sequences, with zero average and a normalized power (controlled by its typical deviation), which is added to the transmitted signal. The bit energy is known and equal to ½ and the relation Eb/No is the independent variable. For different values of this variable, a number of noisy packets were generated (this is an input parameter in the Matlab functions). The Bit Error Rate and the Packet Error rate are computed for a relevant range of Eb/No values, from 0 up to 20 dB, but this can be changed in the script.

For the case of a multipath channel, assuming perfect channel state information (CSI) estimation at the receiver and no AWGN, it is possible to scale the received signal back exactly onto the original transmitted symbols. However, when white noise is present this transformation will also scale the received signal. Over independent packets, as the noise remains white and Gaussian, the statistical distribution of the scaling absolute value of h(i) follows a Rayleigh distribution (with parameter sigma2=1/2). Therefore, in order to obtain the average effect of this scaling on BER, we can use the following approximation for BPSK in a single path Rayleigh channel:

For the exponentially decaying channel, each path is modeled as a non-i.i.d. Gaussian random variable. The channel model implemented in this code is as follows:

sampRateMHz=11; delaySprdNsec=21; sampTimeNsec = 1000 / sampRateMHz; if delaySprdNsec == 0 Kmax = 0; vark = 1; else Kmax = ceil( 10 * delaySprdNsec/sampTimeNsec ); var0 = (1 - exp( -1*((Kmax + 1)* sampTimeNsec)/delaySprdNsec ))/ ... (1 - exp( - sampTimeNsec/delaySprdNsec )); K = (0:Kmax)'; vark = var0 * exp( - K*sampTimeNsec/delaySprdNsec ); end stdDevReOrIm = sqrt(vark/2); h = stdDevReOrIm .* (randn(Kmax+1,1) + j*randn(Kmax+1,1)); numPaths=length(h);

Therefore, the Rayleigh distribution can be considered as a limiting case of exponential channel where a single path has 0 rms delay spread, Kmax is equal to one, and this single path will scale and rotate the received signal. In addition to that, the exponential model is more suitable for indoor environments, so it gives a good approximation of local area network (LAN) environments.

As mentioned above, this channel model is more realistic than the Rayleigh fading model. In addition, the exponentially decaying channel implies better results because, at the receiver, we are detecting the strongest path.

In order to test this system, we can vary the length of the m-sequence. Four m-sequences were tested in addition to a length 63 MSE m-sequence and some random sequences. For instance, the length 7 m-sequence is:

– [1;1;1;0;1;0;0];

which means that this sequence is especially suitable for a single path and a three paths channels.

In next posts, we will be presenting a similar study for these constellations, in which this time, we will be interested in avoiding Inter-symbol Interference (ISI), but introducing a cyclic prefix (CP) instead of working with pseudo-random sequences. After that, we will analyze what happens when we combine both techniques. Any idea? Comment below your thoughts or stay tuned for our next posts!

Hi,

really great explanation. Thank you for also provides with a Matlab code.

Cheers