GMSK Bit error rate plot

4 ビュー (過去 30 日間)
Mah Mhata
Mah Mhata 2019 年 2 月 4 日
回答済み: charan 2025 年 2 月 12 日
I want to plot GMSK BER vs Eb/N0, but It gives me wrong result. do you know why?
hMod = comm.GMSKModulator('BitInput', true, 'InitialPhaseOffset',0);
hDemod = comm.GMSKDemodulator('BitOutput', true, ...
'InitialPhaseOffset',0);
hmod.bandwidthtimeproduct=0.3;
hdemod.bandwidthtimeproduct=0.3;
hError = comm.ErrorRate('ReceiveDelay', hDemod.TracebackDepth);
for EbNo=0:20;
hAWGN = comm.AWGNChannel('NoiseMethod', ...
'Signal to noise ratio (Eb/No)','EbNo',EbNo);
for counter = 1:100
hAWGN.EbNo=EbNo;
data = randi([0 1],300,1);
modSignal = step(hMod, data);
noisySignal = step(hAWGN, modSignal);
receivedData = step(hDemod, noisySignal);
errorStats = step(hError, data, receivedData);
ber(EbNo+1)=errorStats(1);
end
end
plot(ber);
semilogy(ber)
title('BER of GMSK Modulation');
xlabel('E_b/N_0 (dB)');
ylabel('Bit Error Rate');
  3 件のコメント
daniele scozia
daniele scozia 2019 年 10 月 23 日
why when i use the object " errorRate " without the tracebackDepth the results are wrong?
Stefano Marsili
Stefano Marsili 2023 年 8 月 10 日
ok, a bit late but anyhow ...
I see 2 errors:
ber(EbNo+1)=errorStats(1);
here you want to build the average over the 100 packets but if you do it like that you just overwrite everytime the result with the ber of the last 300 bit packet
EbNo=0:20 .. check the energy of the signal. I saw there is and oversampling by 8 in modSignal, maybe you need to scale the EbNo accordingly
Hope it helps

サインインしてコメントする。

回答 (1 件)

charan
charan 2025 年 2 月 12 日
Hi,
The following code might help:
hMod = comm.GMSKModulator('BitInput', true, 'InitialPhaseOffset',0);
hDemod = comm.GMSKDemodulator('BitOutput', true, ...
'InitialPhaseOffset',0);
hmod.bandwidthtimeproduct=0.3;
EbNo=1:20;
snrVec = EbNo - 10*log10(hMod.SamplesPerSymbol);
ber=zeros(size(EbNo));
hError = comm.ErrorRate('ReceiveDelay', hDemod.TracebackDepth);
for i=0:19
hAWGN = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (SNR)','SNR',snrVec(i+1));
for counter = 1:100
data = randi([0 1],300,1);
modSignal = step(hMod, data);
noisySignal = step(hAWGN, modSignal);
receivedData = step(hDemod, noisySignal);
errorStats = step(hError, data, receivedData);
ber(i+1)=ber(i+1)+errorStats(1);
end
ber(i+1)=ber(i+1)/100;
end
semilogy(EbNo,ber)

カテゴリ

Help Center および File ExchangeTest and Measurement についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by