exponenta event banner

Оценка BER QPSK в AWGN с кодированием Рида-Соломона

Передача кодированных данных Рида-Соломона с использованием 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) пару кодера Рида-Соломона и декодера, которая принимает битовые входы.

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, необходимую для достижения частоты ошибок 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. The axes contains 4 objects of type line. These objects represent RS coded BER, Curve Fit, Theory with coding, Theory no coding.