Why OQPSK matlab's function ber is differ?

4 Ansichten (letzte 30 Tage)
Seongjong Kim
Seongjong Kim am 14 Apr. 2023
Beantwortet: Gokul Nath S J am 20 Apr. 2023
I am testing the PSK series myself.
I check the BER curve, but only OQPSK is different from the theory. What is the problem?
Where does the 6dB difference from QPSK come from?
clc
clear all;
close all;
snr = -2:1:10;
numframes = 100;
ber = comm.ErrorRate; %bpsk
ber2 = comm.ErrorRate; %qpsk
ber3 = comm.ErrorRate('ReceiveDelay',2); %oqpsk
ber_grape = zeros(1,length(snr));
ber_grape2 = zeros(1,length(snr));
ber_grape3 = zeros(1,length(snr));
ebno = convertSNR(snr,'snr','ebno',BitsPerSymbol=1);
ebno2 = convertSNR(snr,'snr','ebno',BitsPerSymbol=2);
ebno3 = convertSNR(snr,'snr','ebno',BitsPerSymbol=2);
oqpskmod=comm.OQPSKModulator('BitInput',true);
oqpskdemod=comm.OQPSKDemodulator('BitOutput',true);
for ii = 1:length(snr)
for counter = 1:numframes
data = randi([0 1],10000,1,'int8');
%BPSK
modSignal = pskmod(data,2,InputType='bit');
[rxsig, noisevar] = awgn(modSignal,snr(ii));
demodSignal = pskdemod(rxsig,2, ...
OutputType='bit', ...
NoiseVariance=1);
errStats = ber(data,int8(demodSignal));
%QPSK
noCoding = pskmod(data,4,InputType='bit');
rxNoCoding = awgn(noCoding,snr(ii));
rxBitsNoCoding = pskdemod(rxNoCoding,4,OutputType='bit');
errStatsNoCoding = ber2(data,int8(rxBitsNoCoding));
%OQPSK
noCoding2 = oqpskmod(data);
rxNoCoding2 = awgn(noCoding2,snr(ii));
rxBitsNoCoding2 = oqpskdemod(rxNoCoding2);
errStatsNoCoding2 = ber3(data,int8(rxBitsNoCoding2));
end
ber_grape(ii) = errStats(1,1);
ber_grape2(ii) = errStatsNoCoding(1,1);
ber_grape3(ii) = errStatsNoCoding2(1,1);
reset(ber);
reset(ber2);
reset(ber3);
end
semilogy(ebno, ber_grape, ...
ebno2, ber_grape2, ...
ebno3, ber_grape3)
xlim([0 inf])
ylim([10^-5 inf])

Antworten (1)

Gokul Nath S J
Gokul Nath S J am 20 Apr. 2023
Hi Seongjong Kim,
Based on my understanding it seems that the BER for QPSK and OQPSK is showing a difference of 6 dB in the graph. As an alternative if you use the following code, the BER will come out almost similar values.
EbNo = (0:10)';
M = 4; % Modulation order
berQ = berawgn(EbNo,'psk',M,'nondiff');
berOQpsk = berawgn(EbNo,'oqpsk','nondiff');
You can also refer the following example to find more information on the computation,
For further information on the code, kindly refer the following link.
Thanks,
Gokul Nath S J

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by