QPSK Implementation

Requirement

Transmitter Side

steps

  1. Generate random bits

  2. Modulate into complex contellation

Genrate Random Bits

graph LR

Random_source --> B(0s and 1s)

input.png


While we only expect 0's and 1's from the random source but we can actually have a complex signal comming from the random source (idk why)

maybe the representation goes like this

0 -> Real = 0 , Img = 0
1 -> Real = 1 , Img = 1
or
0 -> Real = 0 , Img = 1 
1 -> Real = 1 , Img = 0 

Pasted image 20250313230838.png
Pasted image 20250313230806.png

Modulate into complex constellation

To modulate the Generated bits to complex contellation here Constellation Moulator Block is used

Constellation Modulator
	Constellaton: bpsk,qpsk,etc here qpsk
	Differential Encoding: true,false
	Samples/Symbol: 4 
	excess BW: 350m
samp_rate: 32k
excess_bw: 350m
rrc_taps: firdes.root_raised_cosine(nfilts, nfilts, 1.0/float(sps), 0.35, 11*sps*nfilts)
nfilts: 32
constellation object: 
  id: qpsk 
  symbol map: 0,1,2,3
  constellation point: [0.707+0.707j, -0.707+0.707j, -0.707-0.707j, 0.707-0.707j]
  rotational_sym: 4
  

Pasted image 20250313233625.png

Pasted image 20250313233113.png
The signal looks like it has ISI but it can be reduced using timing recovery , and another RRC filter can be used at the receiver to minimize ISI.

RRC Filter

But when we convolve two RRC filters together, we get a raised cosine filter (which is a form of a Nyquist filter). This can be used to reduce ISI

![[transmitter.pdf]]

Receiver Side

graph LR 
Received_signal --> polyphaase_clock_sync --> Linear_Equalizer --> Constellation_Decoder

![[receiver.pdf]]