필터 지우기
필터 지우기

Have You Used Comm.SphereDecoder System Object For Soft Output?

조회 수: 1 (최근 30일)
smriti
smriti 2013년 6월 8일
편집: Walter Roberson 2015년 11월 16일
Hi I am Using Comm.SphereDecoder System Object for a simulation. I am using Viterbi Decoder System Object To Decode the Soft Bits.
But BER is Coming Like 0.49.
Anyone is here Experienced the same Problem? Or Any Suggestion? I am Adding my Code Here.
M = 16;
k = log2(M);
nBits = 1e3*log2(M);
noiseVariance = 1e-2;
EbNo = 4;
symMap = [11 10 14 15 9 8 12 13 1 0 4 5 3 2 6 7];
BitTable = de2bi(symMap, log2(M), 'left-msb');
codeRate = 1/2;
constlen = 7;
codegenpoly = [171 133];
tblen = 32;
trellis = poly2trellis(constlen, codegenpoly);
hConvEnc = comm.ConvolutionalEncoder(trellis);
trellis = poly2trellis(7, [171 133])
hMod = comm.RectangularQAMModulator('BitInput', true, ...
'ModulationOrder', M, 'NormalizationMethod', 'Average power',...
'SymbolMapping', 'Custom', 'CustomSymbolMapping', symMap);
hAWGN = comm.AWGNChannel('NoiseMethod', ...
'Signal to noise ratio (SNR)',...
'SNR',10);
hMIMO = comm.MIMOChannel('MaximumDopplerShift', 0, ...
'NumTransmitAntennas', 4, ...
'NumReceiveAntennas', 4, ...
'TransmitCorrelationMatrix', eye(4), ...
'ReceiveCorrelationMatrix', eye(4), ...
'PathGainsOutputPort', true);
hSpDec = comm.SphereDecoder('Constellation', constellation(hMod),...
'BitTable', BitTable, 'DecisionType', 'Soft');
hVitDecSD = comm.ViterbiDecoder(trellis, ...
'InputFormat', 'Unquantized', 'TracebackDepth', tblen);
hBER = comm.ErrorRate;
data = randi([0 1], nBits, 1);
encodedData = step(hConvEnc, data);
yMod = step(hMod, encodedData);
yTx = reshape(yMod, [], 4);
[yFad, yPG] = step(hMIMO, yTx);
yRec = step(hAWGN, yFad);
rxBits = step(hSpDec, yRec, squeeze(yPG));
decDataSD = step(hVitDecSD, rxBits(:));
ber = step(hBER, data, decDataSD);
disp(ber(1));

답변 (1개)

Amit Kansal
Amit Kansal 2015년 11월 16일
편집: Walter Roberson 2015년 11월 16일
Couple of issues with the code. The Viterbi Decoder is set to the continuous operation which introduces a delay of tblen bits which is not accounted for in the comparison.
Also, the bit polarity assumed by the SphereDecoder is opposite of that used by the Viterbi Decoder.
Update above respective lines to :
hBER = comm.ErrorRate('ReceiveDelay', tblen);
decDataSD = step(hVitDecSD, -rxBits(:));
to get better ber values.

카테고리

Help CenterFile Exchange에서 Error Detection and Correction에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by