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

Передайте закодированные данные Тростника-Solomon с помощью QPSK по каналу AWGN. Демодулируйте и декодируйте полученный сигнал и соберите статистику ошибок. Вычислите теоретическую частоту ошибок по битам (BER) для закодированных и незакодированных данных. Постройте результаты BER сравнить эффективность.

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

rng(1993);     % Seed random number generator for repeatable results
M = 4;         % 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 значения и счет на усиление кодирования RS. Инициализируйте матрицу статистики ошибок.

ebnoVec = (3:0.5:8)';
ebnoVecCodingGain = ebnoVec + 10*log10(K/N); % Account for RS coding gain
errorStats = zeros(length(ebnoVec),3);

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

for i = 1:length(ebnoVec)
    awgnChannel.EbNo = ebnoVecCodingGain(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. Сгенерируйте оценку эффективности QPSK с и не кодируя использование bercoding и berawgn функции.

berCurveFit = berfit(ebnoVecCodingGain,errorStats(:,1));
berwCoding = bercoding(ebnoVec,'RS','hard',N,K,'psk',M,'nondiff');
berNoCoding = berawgn(ebnoVec,'psk',M,'nondiff');

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

semilogy(ebnoVecCodingGain,errorStats(:,1),'b*', ...
ebnoVecCodingGain,berCurveFit,'c-',ebnoVecCodingGain,berwCoding,'r',ebnoVec,berNoCoding)
ylabel('BER')
xlabel('Eb/No (dB)')
legend('RS coded BER','Curve Fit','Theory with coding','Theory no coding')
grid

Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent RS coded BER, Curve Fit, Theory with coding, Theory no coding.