CHAPTER 5
DESIGN AND IMPLEMENTATION
OF OFFSET TECHNIQUE
FOR 8-PSK
Introduction
Simulation Codes
Simulation Results and Analysis
Conclusion
DESIGN AND IMPLEMENTATION OF
OFFSET TECHNIQUE FOR 8-PSK
- Introduction
- OQPSK
Offset quadrature phase-shift keying (OQPSK) is a variant of QPSK. Taking four values of the phase (two bits) at a time to construct a QPSK symbol can allow the phase of the signal to jump by as much as 180° at a time. When the signal is low-pass filtered (as is typical in a transmitter), these phase-shifts result in large amplitude fluctuations, an undesirable quality in communication systems. By offsetting the timing of the odd and even bits by one bit-period, or half a symbol-period, the in-phase and quadrature components will never change at the same time. This will limit the phase-shift to no more than 90° at a time. This yields much lower amplitude fluctuations than non-offset QPSK and is sometimes preferred in practice. The sudden phase-shifts occur about twice as often as for QPSK (since the signals no longer change together), but they are less severe. In other words, the magnitude of jumps is smaller in OQPSK when compared to QPSK.
Same idea can be applied to higher order M-PSK and other linear modulation techniques. In this section 8-Offset phase shift keying (8-OPSK) is implemented using matlab and BER performance of 8-OQPSK is compared with 8-PSK.
- Simulation Codes
- Offset 8-PSK
M = 8; len = 2048;
x = randi([0 M-1],len, 1); z = de2bi(x);
a = z(:,1)'; b = z(:,2)'; c = z(:,3)';
a1 = []; b1 = []; c1 = []; x1 = [];
for p = 1:len
a1 = [a1 a(p) a(p) a(p)]; b1 = [b1 b(p) b(p) b(p)]; c1 = [c1 c(p) c(p) c(p)];
end
a1 = [a1 0 0]; b1 = [0 b1 0]; c1 = [0 0 c1];
for p = 1:3*len+2
x1 = [221; c1(p) b1(p) a1(p)];
end
d = bi2de(x1); ini_phase = 0;
modmap = zeros(1,8);
modmap(1) = cos(ini_phase + pi/8) + 1i * sin(ini_phase + pi/8);
modmap(2) = cos(ini_phase + 3*pi/8) + 1i * sin(ini_phase + 3*pi/8);
modmap(3) = cos(ini_phase + 7*pi/8) + 1i * sin(ini_phase + 7*pi/8);
modmap(4) = cos(ini_phase + 5*pi/8) + 1i * sin(ini_phase + 5*pi/8);
modmap(5) = cos(ini_phase + 15*pi/8) + 1i * sin(ini_phase + 15*pi/8);
modmap(6) = cos(ini_phase + 13*pi/8) + 1i * sin(ini_phase + 13*pi/8);
modmap(7) = cos(ini_phase + 9*pi/8) + 1i * sin(ini_phase + 9*pi/8);
modmap(8) = cos(ini_phase + 11*pi/8) + 1i * sin(ini_phase + 11*pi/8);
y = genqammod(d,modmap);
hScope = commscope.ScatterPlot;
update(hScope, y)
- Variant of Offset 8-PSK
M = 8; len = 1000;
msg = randi([0 M-1],len,1);
z = de2bi(msg);
a = z(:,1)'; b = z(:,2)'; c = z(:,3)';
a1 = []; b1 = []; c1 = []; x1 = [];
for p = 1:len
a1 = [a1 a(p) a(p) a(p)];
b1 = [b1 b(p) b(p) b(p)];
c1 = [c1 c(p) c(p) c(p)];
end
a1 = [a1 0]; b1 = [b1 0]; c1 = [0 c1];
for p = 1:3*len+1
x1 = [221; a1(p) b1(p) c1(p)];
end
d = bi2de(x1); ini_phase = 0;
modmap = zeros(1,8);
modmap(1) = cos(ini_phase + pi/8) + 1i * sin(ini_phase + pi/8);
modmap(2) = cos(ini_phase + 3*pi/8) + 1i * sin(ini_phase + 3*pi/8);
modmap(3) = cos(ini_phase + 7*pi/8) + 1i * sin(ini_phase + 7*pi/8);
modmap(4) = cos(ini_phase + 5*pi/8) + 1i * sin(ini_phase + 5*pi/8);
modmap(5) = cos(ini_phase + 15*pi/8) + 1i * sin(ini_phase + 15*pi/8);
modmap(6) = cos(ini_phase + 13*pi/8) + 1i * sin(ini_phase + 13*pi/8);
modmap(7) = cos(ini_phase + 9*pi/8) + 1i * sin(ini_phase + 9*pi/8);
modmap(8) = cos(ini_phase + 11*pi/8) + 1i * sin(ini_phase + 11*pi/8);
y = genqammod(d,modmap);
hScope = commscope.ScatterPlot;
update(hScope, y);
- Comparison of BER Performance of Offset 8-PSK and
Non-offset 8-PSK
clc; clear all; close all;
SamplesPerFrame = 120; maxNumErrs=100; maxNumBits=1e6;
M = 8;
s = RandStream.create('mt19937ar', 'seed',529558);
prevStream = RandStream.setGlobalStream(s);
hInt2Bit1 = comm.IntegerToBit('BitsPerInteger',3,'OutputDataType','uint8');
hBit2Int1 = comm.BitToInteger('BitsPerInteger',3,'OutputDataType','uint8');
hMod = comm.PSKModulator('ModulationOrder',M,'SymbolMapping','gray', ...
'PhaseOffset',0,'BitInput',false);
hDemod = comm.PSKDemodulator('ModulationOrder',M,'SymbolMapping','gray', ...
'PhaseOffset',0,'BitOutput',false,'OutputDataType','uint8', ...
'DecisionMethod','Hard decision');
hChan = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (Eb/No)', ...
'BitsPerSymbol',log2(M),'SignalPower',1);
hphase = comm.PhaseNoise('Level',[-60 -80],'FrequencyOffset',[20 200]);
hSymError = comm.ErrorRate; hBitError = comm.ErrorRate; EbNoVec = 0:2:15;
SERVec1 = zeros(size(EbNoVec)); BERVec1 = zeros(size(EbNoVec));
SERVec2 = zeros(size(EbNoVec)); BERVec2 = zeros(size(EbNoVec));
txbits = randi([0 1], SamplesPerFrame, 1, 'uint8');
for p = 1:length(EbNoVec);
reset(hSymError); reset(hBitError);
hChan.EbNo = EbNoVec(p);
SER = zeros(3,1); BER = zeros(3,1);
while (BER(2)<maxNumErrs) && (BER(3)<maxNumBits)
txSym = step(hBit2Int1, txbits); tx = step(hMod, txSym);
rx2 = step(hChan, tx); rx = step(hphase, rx2);
rxSym = step(hDemod, rx); rxBits = step(hInt2Bit1, rxSym);
SER = step(hSymError, txSym, rxSym); BER = step(hBitError, txbits, rxBits);
end
SERVec1(p) = SER(1); BERVec1(p) = BER(1);
if (BER(1) <= 1e-4)||(SER(1) <= 1e-4) , break , end
end
release(hphase); release(hChan);
release(hMod); release(hDemod); release(hInt2Bit1); release(hBit2Int1);
for q = 1:length(EbNoVec);
reset(hSymError); reset(hBitError); hChan.EbNo = EbNoVec(q);
SER = zeros(3,1); BER = zeros(3,1);
while (BER(2)<maxNumErrs) && (BER(3)<maxNumBits)
b1 = []; b2 = []; b3 = [];
for r = 1:length(txbits)/3
b1 = [b1; txbits(3*r-2);txbits(3*r-2);txbits(3*r-2)];
b2 = [b2; txbits(3*r-1);txbits(3*r-1);txbits(3*r-1)];
b3 = [b3; txbits(3*r);txbits(3*r);txbits(3*r)];
end
b1 = [b1;0;0]; b2 = [0;b2;0]; b3 = [0;0;b3]; tbits = [];
for r = 1 : length(b1)
tbits = [20bits;b1(r);b2(r);b3(r)];
end
txSym2 = step(hBit2Int1, tbits); tx2 = step(hMod, txSym2);
rx3 = step(hChan, tx2); rx4 = step(hphase, rx3);
rxSym2 = step(hDemod, rx4); rxBits2 = step(hInt2Bit1, rxSym2);
SER = step(hSymError, txSym2, rxSym2);BER = step(hBitError, tbits, rxBits2);
end
SERVec2(q) = SER(1); BERVec2(q) = BER(1);
if (BER(1) <= 1e-4)||(SER(1) <= 1e-4) , break , end
end
RandStream.setGlobalStream(prevStream);
semilogy(EbNoVec,SERVec1,EbNoVec,SERVec2); axis([0 15 1e-4 1])
legend ( '8 PSK', 'OPSK','Location','SouthWest');
xlabel ( 'Eb/No (dB)' ); ylabel( 'Error Probability' );
title ( 'Symbol Error Probability' ); grid on;
semilogy(EbNoVec,BERVec1,EbNoVec,BERVec2); axis([0 15 1e-4 1])
legend ( '8 PSK', 'OPSK','Location','SouthWest');
xlabel ( 'Eb/No (dB)' ); ylabel( 'Error Probability' );
title ( 'Bit Error Probability' ); grid on;
- Simulation Results
Fig. 5.1 Constellation Diagram of Offset 8-PSK
Fig. 5.2 Constellation Diagram of Variant of Offset 8-PSK
Fig. 5.3 Comparison of BER performance of Offset 8-PSK and 8-PSK
- Conclusion
In this chapter, it is concluded that that offset techniques can be applied to higher order modulation methods such as 8-PSK which is not mentioned in prior art and from Fig. 5.1, it is observed that by applying offset technique to 8-PSK, signal transition does not goes through the origin. Fig. 5.2 shows the alternative form. Moreover, from Fig. 5.3, it is concluded that BER performance of offset M- PSK (M=8) remains same as normal non-offset M-PSK(M=8).
No comments:
Post a Comment