exponenta event banner

Конфигурирование Eb/No для каналов AWGN с кодированием

Этот пример показывает, как установить отношение энергии битов к плотности шума (Eb/No) для линий связи, использующих канальное кодирование.

Укажите кодовое слово и длину сообщения для кода Рида-Соломона. Укажите порядок модуляции.

N = 15;       % R-S codeword length in symbols
K = 9;        % R-S message length in symbols
M = 16;       % Modulation order

Создайте (15,9) кодер Рида-Соломона и модулятор 16-PSK. Укажите объекты так, чтобы они принимали битовые входы.

rsEncoder = comm.RSEncoder('CodewordLength',N,'MessageLength',K, ...
    'BitInput',true);
pskModulator = comm.PSKModulator('ModulationOrder',M,'BitInput',true);

Создайте соответствующий декодер Рида-Соломона и 16-PSK объекты демодулятора.

rsDecoder = comm.RSDecoder('CodewordLength',N,'MessageLength',K, ...
    'BitInput',true);
pskDemodulator = comm.PSKDemodulator('ModulationOrder',M,'BitOutput',true);

Вычислите скорость кода Рида-Соломона на основе отношения символов сообщения к длине кодового слова. Определите биты на символ для модулятора PSK.

codeRate = K/N;
bitsPerSymbol = log2(M);

Укажите некодированный Eb/No в дБ. Преобразуйте некодированные Eb/No в соответствующие кодированные Eb/No с помощью кодовой скорости.

UncodedEbNo = 6;
CodedEbNo = UncodedEbNo + 10*log10(codeRate);

Построение канала AWGN с учетом количества битов на символ. Установите EbNo имущество channel в кодированный Eb/No.

channel = comm.AWGNChannel('BitsPerSymbol',bitsPerSymbol);
channel.EbNo = CodedEbNo;

Установка общего количества ошибок и битов для моделирования. Для точности моделирование должно выполняться до тех пор, пока не будет обнаружено достаточное количество битовых ошибок. Общее количество битов используется для обеспечения того, чтобы моделирование не выполнялось слишком долго.

totalErrors = 100;
totalBits = 1e6;

Создайте системный object™ калькулятора частоты ошибок и инициализируйте вектор частоты ошибок.

errorRate = comm.ErrorRate;
errorVec = zeros(3,1);

Выполните моделирование для определения BER.

while errorVec(2) < totalErrors && errorVec(3) < totalBits
    % Generate random bits
    dataIn = randi([0,1],360,1);
    % Use the RS (15,9) encoder to add error correction capability
    dataEnc = rsEncoder(dataIn);
    % Apply 16-PSK modulation
    txSig = pskModulator(dataIn);
    % Pass the modulated data through the AWGN channel
    rxSig = channel(txSig);
    % Demodulate the received signal
    demodData = pskDemodulator(rxSig);
    % Decode the demodulated data with the RS (15,9) decoder
    dataOut = rsDecoder(demodData);
    % Collect error statistics
    errorVec = errorRate(dataIn,demodData);
end

Отображение результирующей частоты битовых ошибок.

ber = errorVec(1)
ber = 0.0935