QPSK Implementation
Requirement
Transmitter Side
steps
-
Generate random bits
-
Modulate into complex contellation
Genrate Random Bits
graph LR Random_source --> B(0s and 1s)
- The random source generates random data
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
Modulate into complex constellation
To modulate the Generated bits to complex contellation here Constellation Moulator Block is used
- The constellation modulator expects packed bytes,
- constellation modulator uses a root raised cosine (RRC) , which is uses pulse shaping filter to control the bandwidth(reduce) that param is called excess bandwidth.
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
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]]