Module DigiCommPy.scripts.chapter_6.rf_impairments

Script: DigiCommPy.chapter_6.rf_impairments.py Visualize receiver impairments in a complex plane

@author: Mathuranathan Viswanathan Created on Sep 6, 2019

Expand source code
"""
Script: DigiCommPy.chapter_6.rf_impairments.py
Visualize receiver impairments in a complex plane

@author: Mathuranathan Viswanathan
Created on Sep 6, 2019
"""
import numpy as np #for numerical computing
from numpy import real,imag
from modem import QAMModem #QAM Modem model
from impairments import ImpairmentModel #Impairment Model
import matplotlib.pyplot as plt #for plotting functions

M=64 # M-QAM modulation order
nSym=1000 # To generate random symbols

# uniform random symbols from 0 to M-1
inputSyms = np.random.randint(low=0, high = M, size=nSym)
modem = QAMModem(M) #initialize the M-QAM modem object
s = modem.modulate(inputSyms) #modulated sequence

impModel_1 =  ImpairmentModel(g=0.8) # gain mismatch only model
impModel_2 =  ImpairmentModel(phi=12) # phase mismatch only model
impModel_3 =  ImpairmentModel(dc_i=0.5,dc_q=0.5) # DC offsets only
impModel_4 =  ImpairmentModel(g=0.8,phi=12,dc_i=0.5,dc_q=0.5) # All impairments
 
#Add impairments to the input signal sequence using the models
r1 = impModel_1.receiver_impairments(s) 
r2 = impModel_2.receiver_impairments(s)
r3 = impModel_3.receiver_impairments(s)
r4 = impModel_4.receiver_impairments(s)

fig, ax = plt.subplots(nrows=2,ncols = 2)

ax[0,0].plot(real(s),imag(s),'b.')
ax[0,0].plot(real(r1),imag(r1),'r.');ax[0,0].set_title('IQ Gain mismatch only')

ax[0,1].plot(real(s),imag(s),'b.')
ax[0,1].plot(real(r3),imag(r3),'r.');ax[0,1].set_title('DC offsets only')

ax[1,0].plot(real(s),imag(s),'b.')
ax[1,0].plot(real(r2),imag(r2),'r.');ax[1,0].set_title('IQ Phase mismatch only')

ax[1,1].plot(real(s),imag(s),'b.')
ax[1,1].plot(real(r4),imag(r4),'r.')
ax[1,1].set_title('IQ impairments & DC offsets');fig.show()