Оцените BER 8-PSK в AWGN с кодированием тростника-Solomon

Передайте закодированные данные Тростника-Solomon с помощью 8-PSK по каналу AWGN. Демодулируйте и декодируйте полученный сигнал и соберите ошибочные статистические данные. Постройте оценку частоты ошибок по битам.

Задайте параметры в качестве примера.

M = 8;  % Modulation order
bps = log2(M); % Bits per symbol
N = 7; % RS codeword length
K = 5; % RS message length

Создайте модулятор, демодулятор, канал AWGN и объекты коэффициента ошибок.

pskModulator = comm.PSKModulator('ModulationOrder',M,'BitInput',true);
pskDemodulator = comm.PSKDemodulator('ModulationOrder',M,'BitOutput',true);
awgnChannel = comm.AWGNChannel('BitsPerSymbol',bps);
errorRate = comm.ErrorRate;

Создайте (7,5) энкодер Тростника-Solomon и пара декодера, которая принимает битные входные параметры.

rsEncoder = comm.RSEncoder('BitInput',true,'CodewordLength',N,'MessageLength',K);
rsDecoder = comm.RSDecoder('BitInput',true,'CodewordLength',N,'MessageLength',K);

Установите область значений Eb/N0 значения. Инициализируйте ошибочную матрицу статистики.

ebnoVec = (3:0.5:8)';
errorStats = zeros(length(ebnoVec),3);

Оцените частоту ошибок по битам для каждого Eb/N0 значение. Запуски симуляции или до 100 ошибок или до 107 с битами сталкиваются. Основная обработка цикла симуляции включает кодирование, модуляцию, демодуляцию и декодирование.

for i = 1:length(ebnoVec)
    awgnChannel.EbNo = ebnoVec(i);
    reset(errorRate)
    while errorStats(i,2) < 100 && errorStats(i,3) < 1e7
        data = randi([0 1],1500,1); % Generate binary data
        encData = rsEncoder(data); % RS encode
        modData = pskModulator(encData); % Modulate
        rxSig = awgnChannel(modData); % Pass signal through AWGN
        rxData = pskDemodulator(rxSig); % Demodulate
        decData = rsDecoder(rxData); % RS decode
        errorStats(i,:) = errorRate(data,decData); % Collect error statistics
    end
end

Соответствуйте кривой к данным о BER с помощью berfit. Сгенерируйте оценку эффективности 8-PSK, не кодируя использование berawgn функция.

berCurveFit = berfit(ebnoVec,errorStats(:,1));
berNoCoding = berawgn(ebnoVec,'psk',8,'nondiff');

Отобразите на графике данные о BER, подгонку кривой BER и предполагаемую эффективность без кодирования RS.

semilogy(ebnoVec,errorStats(:,1),'b*', ...
ebnoVec,berCurveFit,'c-',ebnoVec,berNoCoding,'r')
ylabel('BER')
xlabel('Eb/No (dB)')
legend('Data','Curve Fit','No Coding')
grid

(7,5) код RS улучшается Eb/N0 требуемый достигнуть a 10-2 частота ошибок по битам, приблизительно, 1,4 дБ.