In the previous post on Single Input Multiple Output (SIMO) models for receive diversity, various receiver diversity techniques were outlined. One of them is selection combining, the focus of the topic here.
Channel model
Assuming flat slow fading channel, the received signal model is given by
where,
Assuming small scale Rayleigh fading, the channel impulse response is modeled as complex Gaussian random variable with zero mean and variance
Therefore, the instantaneous channel power is exponentially distributed
In the context of AWGN channel, the signal-to-noise ratio (SNR) for a given channel condition, is a constant. But in the case of fading channels, the signal-to-noise ratio is no longer a constant as the signal is fluctuating when passed through a fading channel. Therefore, for fading channel, the SNR has a random variable component built into it. Hence, we just don’t call it SNR, instead it is called instantaneous SNR which depends on the current conditions of the channel (or equivalently, the value of the random variable at that instant). Since the SNR is a random variable, we can also talk about its expected (average) value, which is called average SNR.
Denoting the average SNR as
The instantaneous SNR
Therefore, like the channel impulse response, the instantaneous SNR is also exponentially distributed
Selection Combining
In selection combining, the received signal from the antenna that experiences the highest SNR (i.e, the strongest signal from N received signals) is chosen for processing at the receiver (Figure 1).
That is, the weight of the path that has the highest
Therefore, the output SNR (at the combiner output) is the maximum SNR of all the received signals
As we know, fading channels are characterized by fades, i.e, the period when the signal level falls below a certain threshold or certain noise level. During such fades, the user experiences signal outage. We would like to compute the probability, in certain fading channel, that a user will experience signal outage. This is called outage probability. Outage probability can be easily computed if we know the probability distribution characteristics of the fading.
For a selection combining scheme, for an user to experience outage, the SNR
For high average SNR conditions
Python code
import numpy as np import matplotlib.pyplot as plt gamma_ratio_dB = np.arange(start=-10,stop=41,step=2) Ns = [1,2,3,4,10,20] #number of received signal paths gamma_ratio = 10**(gamma_ratio_dB/10) #Average SNR/SNR threshold in dB fig, ax = plt.subplots(1, 1) for N in Ns: P_outage = (1 - np.exp(-1/gamma_ratio))**N ax.semilogy(gamma_ratio_dB,P_outage,label='N='+str(N)) ax.legend() ax.set_xlim(-10,40);ax.set_ylim(0.0001,1.1) ax.set_title('Selection combining outage probability (Rayleigh fading channel)') ax.set_xlabel(r'$10log_{10}\left(\Gamma/\gamma_t\right)$') ax.set_ylabel('Outage probability');fig.show()
Figure 2, plots the outage probability against
Error rate performance
As an example, the symbol error rate performance of a QPSK modulated transmission over a Rayleigh flat fading SIMO channel, for a range of values for the number of receive antennas (
The code utilizes the modem class discussed in the book here. The modem class incorporates modulation and demodulation techniques for PSK,PAM,QAM and FSK modulation schemes. It uses the object oriented programming method for implementing the various modems.
The addition of Gaussian white noise needs to be multidimensional. The method discussed in this article is extended here for computing and adding the required amount of noise across the
""" Eb/N0 Vs SER for PSK over Rayleigh flat fading with Selection Combining @author: Mathuranathan Viswanathan Created on Dec 10, 2019 """ import numpy as np # for numerical computing import matplotlib.pyplot as plt # for plotting functions #from matplotlib import cm # colormap for color palette from numpy.random import standard_normal from DigiCommPy.modem import PSKModem #---------Input Fields------------------------ nSym = 10**6 # Number of symbols to transmit EbN0dBs = np.arange(start=0,stop = 36, step = 2) # Eb/N0 range in dB for simulation N = [1,2,4,8,10] # [1,2,3,4,10,20] #number of diversity branches M = 4 #M-ary PSK modulation k=np.log2(M) EsN0dBs = 10*np.log10(k)+EbN0dBs # EsN0dB calculation fig, ax = plt.subplots(nrows=1,ncols = 1) #To plot figure for nRx in N: #simulate for each # of received branchs #Random input symbols to modulator inputSyms = np.random.randint(low=0, high = M, size=nSym) modem = PSKModem(M) s = modem.modulate(inputSyms) #modulated PSK symbols #nRx signal branches s_diversity = np.kron(np.ones((nRx,1)),s); ser_sim = np.zeros(len(EbN0dBs)) # simulated symbol error rates for i,EsN0dB in enumerate(EsN0dBs): #Rayleigh flat fading channel as channel matrix h = np.sqrt(1/2)*(standard_normal((nRx,nSym))+1j*standard_normal((nRx,nSym))) signal = h*s_diversity #effect of channel on the modulated signal #Computing the signal power and adding noise gamma = 10**(EsN0dB/10) #converting EsN0dB to linear scale P = np.sum(np.abs(signal)**2,axis=1)/nSym #calculate power in each branch of signal N0 = P/gamma #required noise spectral density for each branch #Scale each row of noise with the calculated noise spectral density noise = (standard_normal(signal.shape)+1j*standard_normal(signal.shape))*np.sqrt(N0/2)[:,None] r = signal+noise #received signal branches #Receiver processing idx = np.abs(h).argmax(axis=0) #indices of max |h| values along all branches hSelected = h[idx,np.arange(h.shape[1])] #branches with max |h| values ySelected = r[idx,np.arange(r.shape[1])] #output of selection combiner equalized = ySelected*np.conj(hSelected) #equalized signal detectedSyms = modem.demodulate(equalized) #demodulation decisions ser_sim[i] = np.sum(detectedSyms != inputSyms)/nSym print(ser_sim) #ax.grid(True,which='both'); ax.semilogy(EbN0dBs,ser_sim,label='N='+str(nRx))#plot simulated error rates ax.set_xlim(0,35);ax.set_ylim(0.00001,1.1);ax.grid(True,which='both'); ax.set_xlabel('Eb/N0(dB)');ax.set_ylabel('Symbol Error Rate($P_s$)') ax.set_title('SER performance for QPSK over Rayleigh fading channel with Selection Diversity') ax.legend();fig.show()
Rate this post: Note: There is a rating embedded within this post, please visit this post to rate it.
References
Articles in this series
Books by the author