Оценка 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.