필터 지우기
필터 지우기

Why OQPSK matlab's function ber is differ?

조회 수: 5 (최근 30일)
Seongjong Kim
Seongjong Kim 2023년 4월 14일
답변: Gokul Nath S J 2023년 4월 20일
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])

답변 (1개)

Gokul Nath S J
Gokul Nath S J 2023년 4월 20일
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

카테고리

Help CenterFile Exchange에서 QPSK에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by